{"version":3,"sources":["webpack:///./node_modules/survey-vue/survey-vue.js","webpack:///./src/views/surveys/Surveys.vue?83c9","webpack:///src/views/surveys/Surveys.vue","webpack:///./src/views/surveys/Surveys.vue?515a","webpack:///./src/views/surveys/Surveys.vue","webpack:///./src/mixins/tokenMixin.js"],"names":["root","factory","module","exports","this","__WEBPACK_EXTERNAL_MODULE_2__","modules","installedModules","__webpack_require__","moduleId","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","__assign","__extends","__decorate","__spreadArrays","target","arguments","length","thisClass","baseClass","__","constructor","create","decorators","key","desc","r","getOwnPropertyDescriptor","Reflect","decorate","il","Array","k","a","j","jl","__WEBPACK_IMPORTED_MODULE_0__localization_english__","surveyLocalization","surveyStrings","currentLocaleValue","defaultLocaleValue","locales","localeNames","supportedLocales","val","getLocaleStrings","loc","getCurrentStrings","currentLocale","defaultLocale","getString","strName","result","undefined","getLocales","res","push","sort","_interopDefault","ex","Vue","VueClassComponent","VueClassComponent__default","Inject","createDecorator","componentOptions","inject","isArray","Model","event","prop","model","makePropDecorator","options","type","metadata","getMetadata","props","Prop","Watch","path","_a","deep","_b","immediate","handler","watch","Component","normalizeComponent","scriptExports","render","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","default","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__helpers__","JsonObjectProperty","CustomPropertiesCollection","JsonMetadataClass","JsonMetadata","JsonError","JsonUnknownPropertyError","JsonMissingTypeErrorBase","JsonMissingTypeError","JsonIncorrectTypeError","JsonRequiredPropertyError","JsonObject","Serializer","classInfo","isRequired","typeValue","choicesValue","baseValue","isRequiredValue","readOnlyValue","visibleValue","isLocalizableValue","choicesfunc","dependedProperties","isSerializable","isLightSerializable","isCustom","isDynamicChoices","className","alternativeName","classNamePart","baseClassName","defaultValueValue","serializationProperty","displayName","category","categoryIndex","visibleIndex","nextToProperty","showMode","maxLength","layout","onGetValue","onSetValue","visibleIf","classInfoValue","set","indexOf","substr","getItemValuesDefaultValue","metaData","isDescendantOf","newValue","isDefaultValue","isValueEmpty","defaultValue","getValue","obj","getJson","getPropertyValue","isLocalizable","text","setValue","jsonConv","setJson","parseInt","toLowerCase","getObjType","objType","replace","getClassName","getChoices","choicesCallback","setChoices","valueFunc","getBaseValue","setBaseValue","isVisible","isLayout","visible","mergeWith","valuesNames","mergableValues","mergeValue","addDependedProperty","getDependedProperties","valueName","addProperty","properties","removeProperty","propertyName","splice","addClass","parentClassName","parentClasses","getProperties","createProperties","getType","createPropertiesCore","createPropertiesInObj","parentClass","createPropertyInObj","createCustomLocalizableObj","locDesc","getLocalizableString","getLocalizableStringText","v","setLocalizableStringText","createNewArray","item","locOwner","ownerPropertyName","setPropertyValue","creator","parentName","createProperty","find","propInfo","propertyType","typeIndex","typeSymbol","substring","getIsPropertyNameRequired","getPropertyName","maxValue","minValue","onPropertyEditorUpdate","readOnly","choices","choicesFunc","dependsOn","addDependsOnProperties","addDependsOnProperty","findProperty","requiredSymbol","slice","classes","alternativeNames","childrenClasses","classProperties","classHashProperties","metaDataClass","children","removeClass","metaClass","findClass","index","overrideClassCreatore","overrideClassCreator","fillPropertiesForClass","getHashProperties","hashProperties","fillProperties","getPropertiesByObj","dynamicProps","getDynamicType","dProp","keys","map","getDynamicPropertiesByObj","dynamicType","dType","hash","findProperties","propertyNames","getAllPropertiesByName","getAllClasses","createClass","json","createCustomType","customTypeName","customTemplateName","getTemplate","getChildrenClasses","canBeCreated","fillChildrenClasses","getRequiredProperties","addProperties","propertiesInfos","addCustomPropertyCore","propertyInfo","addPropertyToClass","emptyClassPropertiesHash","removePropertyFromClass","childClasses","newName","ancestorClassName","class_","addAlterNativeClassName","list","addPropertyCore","message","description","at","getFullDescription","_super","_this","types","errors","lightSerializing","metaDataValue","toJsonObject","storeDefaults","toJsonObjectCore","toObject","jsonObj","toObjectCore","error","getRequiredError","addNewError","needAddErrors","startLoadingFromJson","addDynamicProperties","typePropertyName","positionPropertyName","valueToObj","toString","endLoadingFromJson","getData","propertiesToJson","getDynamicProperties","getDynamicPropertyName","dynamicPropName","dynamicProperties","valueToJson","isValueArray","arrValue","hasValue","removePos","hasToUseSetValue","valueToArray","newObj","createNewObj","removePosFromObj","checkNewObjectOnErrors","requiredProperties","start","Helpers","String","trim","isArrayContainsEqual","x","y","isTwoValueEquals","isArraysEqual","ignoreOrder","xSorted","ySorted","isConvertibleToNumber","parseFloat","toLocaleLowerCase","equals","toJSON","randomizeArray","array","Math","floor","random","temp","getUnbindValue","JSON","parse","stringify","createCopy","isNaN","isNumber","isFinite","getMaxLength","surveyLength","getNumberByIndex","startIndexStr","startIndex","prefix","postfix","isNumeric","str","ind","hasDigit","isCharDigit","checkLetter","isCharNotLetterAndDigit","newPostfix","fromCharCode","charCodeAt","ch","toUpperCase","args","match","number","__WEBPACK_IMPORTED_MODULE_0__surveyStrings__","__WEBPACK_IMPORTED_MODULE_1__jsonobject__","QuestionFactory","ElementFactory","creatorHash","colName","rowName","registerQuestion","questionType","questionCreator","unregisterElement","elementType","clear","getAllTypes","createQuestion","Instance","registerElement","elementCreator","removeFromSerializer","createElement","__WEBPACK_IMPORTED_MODULE_1_vue__","__WEBPACK_IMPORTED_MODULE_1_vue___default","__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__","QuestionVue","apply","innerValue","changeQuestion","new_val","old_val","mounted","question","afterRenderQuestionElement","$el","beforeDestroy","beforeDestoyQuestionElement","__WEBPACK_IMPORTED_MODULE_1__localizablestring__","__WEBPACK_IMPORTED_MODULE_2__helpers__","__WEBPACK_IMPORTED_MODULE_3__jsonobject__","__WEBPACK_IMPORTED_MODULE_4__settings__","Base","SurveyError","SurveyElement","Event","propertyHash","isLoadingFromJsonValue","loadingOwner","onPropertyChanged","onItemValuePropertyChanged","onBaseCreating","commentPrefix","IsPropertyEmpty","getIsLoadingFromJson","isLoadingFromJson","fromJSON","clone","clonedObj","locStrsChanged","arraysInfo","isItemValues","arr","itemValueLocStrChanged","localizableStrings","strChanged","getPropertyValueCore","serValue","propertiesHash","getPropertyValueCoreHandler","geValueFromHash","setPropertyValueCore","setPropertyValueCoreHandler","iteratePropertiesHash","func","forEach","oldValue","arrayInfo","setArray","onPush","propertyValueChanged","onPropertyValueChangedCallback","sender","arrayChanges","itemValuePropertyChanged","fire","onPropertyValueChanged","doPropertyValueChangedCallback","onPropChangeFunctions","parentBase","getOwnerForPropertyChanged","testProps","testObj","registerFunctionOnPropertyValueChanged","registerFunctionOnPropertiesValueChanged","names","unRegisterFunctionOnPropertyValueChanged","unRegisterFunctionOnPropertiesValueChanged","locStr","getLocale","createLocalizableString","owner","useMarkDown","defaultStr","addUsedLocales","AddLocStringToUsedLocales","items","locs","createItemValues","self","notifyArrayChanged","ar","onArrayChanged","createNewArrayCore","createArrayCoreHandler","onRemove","newArray","getPrototypeOf","ArrayChanges","unshift","pop","deleteCount","_i","getItemValueType","src","dest","deletedItems","createItemValue","caseInSensitive","getValueInLowCase","copyObject","dst","source","copyCssClasses","itemsToAdd","errorOwner","locTextValue","getText","getDefaultText","getErrorCustomText","getErrorType","selectedElementInDesignValue","disableDesignActions","CreateDisabledDesignElements","isContentElement","onReadOnlyChanged","ScrollElementToTop","elementId","el","document","getElementById","scrollIntoView","elemTop","getBoundingClientRect","top","GetFirstNonTextElement","elements","removeSpaces","tEl","nodeName","data","FocusElement","focus","setSurveyImpl","surveyImplValue","surveyDataValue","geSurveyData","surveyValue","getSurvey","textProcessorValue","getTextProcessor","onSetData","survey","isDesignMode","areInvisibleElementsShowing","isReadOnly","readOnlyChangedCallback","updateElementCss","onNameChanged","updateContainsErrors","getContainsErrors","getElementsInDesign","includeHidden","updateCustomWidgets","onSurveyLoad","onFirstRendering","setVisibleIndex","delete","removeSelfFromList","getProcessedHtml","html","textProcessor","processText","getPage","moveToBase","container","insertBefore","removeElement","addElement","setPage","oldPage","callbacks","hasFunc","remove","settings","webserviceEncodeParameters","surveyServiceUrl","itemValueSeparator","defaultLocaleName","matrixDefaultRowName","matrixDefaultCellType","matrixTotalValuePostFix","matrixMaximumRowCount","panelMaximumPanelCount","ratingMaximumRateValueCount","disableOnGettingChoicesFromWeb","serializeLocalizableStringAsObject","allowShowEmptyTitleInDesignMode","allowShowEmptyDescriptionInDesignMode","executeCompleteTriggerOnValueChanged","readOnlyCommentRenderMode","confirmActionFunc","confirm","minWidth","maxWidth","__WEBPACK_IMPORTED_MODULE_2__jsonobject__","__WEBPACK_IMPORTED_MODULE_3__base__","__WEBPACK_IMPORTED_MODULE_4__surveyStrings__","__WEBPACK_IMPORTED_MODULE_5__error__","__WEBPACK_IMPORTED_MODULE_6__validator__","__WEBPACK_IMPORTED_MODULE_7__localizablestring__","__WEBPACK_IMPORTED_MODULE_8__conditions__","__WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__","__WEBPACK_IMPORTED_MODULE_10__settings__","Question","conditionRunner","isCustomWidgetRequested","customWidgetData","isNeedRender","isReadyValue","onReadyChanged","isRunningValidatorsValue","isValueChangedInSurvey","allowNotifyValueChanged","locNotificationInData","id","getQuestionId","onCreating","validator","locTitleValue","onGetTextCallback","getUpdatedQuestionTitle","locProcessedTitle","sharedData","locCommentText","elementWidthChanged","onIndentChanged","initCommentFromSurvey","questionCounter","isReadOnlyRenderDiv","getValueName","oldValueName","onValueNameChanged","questionRenamed","initDataFromSurvey","choicesLoaded","getPanel","getLayoutType","getChildrenLayoutType","isLayoutTypeSupported","layoutType","onVisibleChanged","notifySurveyVisibilityChanged","runConditions","areEmptyElementsHidden","isEmpty","moveTo","runCondition","getDataFilteredValues","getDataFilteredProperties","questionCreated","getFilteredValues","getFilteredProperties","onParentChanged","getTitleLocation","isVisibilityChanged","titleLocation","questionVisibilityChanged","isFlowLayout","location","getTitleLocationCore","isAllowTitleLeft","getQuestionTitleLocation","questionTitleLocation","hasTitle","questionErrorLocation","hasInput","getDescriptionLocation","descriptionLocation","questionDescriptionLocation","getAllErrors","customWidgetValue","updateCustomWidget","getCustomWidget","hasSingleInput","afterRenderQuestionInput","afterRender","afterRenderQuestion","afterRenderQuestionCallback","textOrHtml","locTitle","renderedHtml","questionTitlePattern","startWithNewLine","css","updateCssClasses","updateQuestionCssClasses","updateElementCssCore","setCssRoot","getCssRoot","cssClasses","flowRoot","mainRoot","hasTitleOnLeft","titleLeftRoot","hasError","small","width","setCssHeader","getCssHeader","header","hasTitleOnTop","headerTop","headerLeft","hasTitleOnBottom","headerBottom","setCssContent","getCssContent","content","contentLeft","setCssTitle","getCssTitle","title","containsErrors","titleOnError","isAnswered","titleOnAnswer","setCssError","getCssError","errorLocation","locationTop","locationBottom","required","objCss","titleRequired","getCssType","getCss","paddingLeft","getIndentSize","indent","paddingRight","rightIndent","onError","scrollElementToTop","getFirstErrorInputElementId","getFirstInputElementId","fireCallback","focusCallback","callback","getOthersMaxLength","maxOthersLength","inputId","getProcessedTextValue","textValue","isExists","TextPreprocessorValuesMap","supportComment","supportOther","onChanged","hasComment","hasOther","hasOtherChanged","isParentReadOnly","isSurveyReadOnly","isDisplayMode","values","runVisibleIfCondition","runEnableIfCondition","runRequiredIfCondition","expression","onRunComplete","run","enableIf","conditionEnabelRunner","requiredIf","conditionRequiredRunner","getStartIndex","getQuestionStartIndex","questionStartIndex","surveyLoadCallback","updateValueWithDefaults","updateDisplayValue","onSurveyValueChanged","updateValueFromSurvey","requireUpdateCommentValue","updateCommentFromSurvey","getComment","commentChangedCallback","getValueCore","setNewValue","clearValue","comment","createValueCopy","canClearValueAsInvisible","isParentVisible","page","isStarted","hasVisibleQuestionByValueName","clearValueIfInvisible","getDisplayValue","keysAsText","customWidget","getDisplayValueCore","keyAsText","getPlainData","includeEmpty","includeQuestionTypes","questionPlainData","displayValue","isNode","calculations","calculation","isComment","correctAnswer","getQuizQuestionCount","getCorrectAnswerCount","isAnswerCorrect","correctAnswerCount","quizQuestionCount","isDefaultValueEmpty","setDefaultValue","getQuestionFromArray","getDefaultValue","getQuestionComment","setQuestionComment","questionComment","setNewComment","updateIsAnswered","getIsAnswered","getValidators","validators","getSupportedValidators","addSupportedValidators","supportedValidators","addConditionObjectsByContext","objects","processedTitle","getConditionJson","operator","hasErrors","rec","oldHasErrors","checkForErrors","isOnValueChanged","beforeSettingQuestionErrors","requiredText","addError","newError","removeError","qErrors","collectErrors","onCheckForErrors","canRunValidators","runValidators","fireSurveyValidation","validateValueCallback","validateQuestion","hasRequiredError","requiredErrorText","getIsRunningValidators","validatorRunner","onAsyncCompleted","doOnAsyncCompleted","raiseOnCompletedAsyncValidators","onCompletedAsyncValidators","isRunningValidators","oldAnswered","setNewValueInData","onValueChanged","isTextValue","isUpdateValueTextOnTyping","getDataLocNotification","isInputTextUpdate","isSurveyInputTextUpdate","valueToData","setValueCore","questionValue","setQuestionValue","valueFromData","setComment","valueChangedCallback","hideNumber","element","supportGoNextPageAutomatic","supportGoNextPageError","clearIncorrectValues","clearOnDeletingContainer","clearErrors","clearUnusedValues","onAnyValueChanged","getMarkdownHtml","getSurveyMarkdownHtml","getProcessedText","useDisplayValuesInTitle","getValidatorTitle","getAllValues","dispose","require","pages","numberingAllowedByParent","showQuestionNumbers","__WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__","__WEBPACK_IMPORTED_MODULE_2__conditionsParser__","ConditionRunner","ExpressionRunner","ExpressionRunnerBase","processValue","parser","isAsyncValue","hasFunctionValue","expressionValue","operand","parseExpression","canRun","hasFunction","hasAsyncFunction","getVariables","variables","setVariables","runCore","isAsync","runValues","asyncFuncList","addToAsyncList","onAsyncReady","doAsyncFunctionReady","evaluateAsync","isReady","evaluate","doOnComplete","__WEBPACK_IMPORTED_MODULE_1__surveyStrings__","__WEBPACK_IMPORTED_MODULE_2__base__","AnswerRequiredError","OneAnswerRequiredError","RequreNumericError","ExceedSizeError","WebRequestError","WebRequestEmptyError","OtherEmptyError","UploadingFileError","RequiredInAllRowsError","MinRowCountError","KeyDuplicationError","CustomError","maxSize","locText","getTextSize","sizes","fixed","log","pow","toFixed","status","response","minRowCount","surveyCss","defaultStandardCss","currentType","body","bodyEmpty","footer","logo","logoImage","headerText","navigationButton","completedPage","navigation","complete","prev","next","preview","edit","progress","progressBar","progressTextInBar","pageTitle","pageDescription","row","formGroup","asCell","panel","titleExpandable","icon","iconExpanded","boolean","control","itemChecked","itemIndeterminate","itemDisabled","switch","slider","label","disabledLabel","checkbox","itemInline","labelChecked","itemControl","itemDecorator","controlLabel","materialDecorator","other","column","dropdown","selectWrapper","image","matrix","cellText","cellTextSelected","cellLabel","matrixdropdown","cell","matrixdynamic","button","buttonAdd","buttonRemove","iconAdd","iconRemove","paneldynamic","buttonPrev","buttonNext","progressContainer","progressText","multipletext","itemTitle","itemValue","radiogroup","clearButton","imagepicker","itemText","rating","selected","minText","maxText","disabled","file","placeholderInput","removeButton","fileInput","removeFile","removeFileSvg","fileDecorator","fileSignBottom","removeButtonBottom","chooseFile","noFileChosen","signaturepad","controls","saveData","saving","success","saveAgainButton","window","buttonExpanded","buttonCollapsed","__WEBPACK_IMPORTED_MODULE_3__helpers__","__WEBPACK_IMPORTED_MODULE_4__conditions__","__WEBPACK_IMPORTED_MODULE_5__base__","__WEBPACK_IMPORTED_MODULE_6__settings__","ItemValue","typeName","isVisibleValue","txt","isValueItemEmpty","setData","createArray","setupArray","originalItem","getItemByValue","getTextOrHtmlByValue","runConditionsForItems","filteredItems","runner","useItemExpression","runConditionsForItemsCore","runEnabledConditionsForItems","choiceValue","hasChanded","itemRunner","getConditionRunner","isEnabled","setIsVisible","setIsEnabled","locale","setLocText","hasText","pureText","calculatedText","newText","oldText","jsoObj","funcName","getVisibleConditionRunner","getEnableConditionRunner","visibleConditionRunner","enableConditionRunner","__WEBPACK_IMPORTED_MODULE_0__helpers__","ProcessValue","getFirstName","getFirstPropertyName","nonNestedObj","getNonNestedObject","curValue","lastIndexOf","getObjectValue","curName","objInArray","getObjInArray","getIntValue","A","first","keyName","Number","__WEBPACK_IMPORTED_MODULE_2__settings__","LocalizableString","useMarkdown","htmlValues","renderedText","calculatedTextValue","calText","setLocaleText","hasHtmlValue","hasHtml","getHtmlValue","getValuesKeys","getLocaleText","deleteValuesEqualsToDefault","deleteValue","hasNonDefaultText","onStrChanged","SerializeAsObject","__WEBPACK_IMPORTED_MODULE_2__survey__","__WEBPACK_IMPORTED_MODULE_3__surveyWindow__","__WEBPACK_IMPORTED_MODULE_4__defaultCss_cssstandard__","VueSurveyModel","VueSurveyWindowModel","updatePropertiesHash","renderCallback","onLoadSurveyFromService","onLoadingSurveyFromService","mergeValues","setDataValueCore","valuesHash","deleteDataValueCore","questionAdded","parentPanel","rootPanel","matrixCellCreated","cellQuestion","doOnPageAdded","doAfterRenderSurvey","afterRenderSurvey","doAfterRenderHeader","afterRenderHeader","panelAdded","initialModel","createSurvey","platform","__WEBPACK_IMPORTED_MODULE_2__question__","__WEBPACK_IMPORTED_MODULE_3__itemvalue__","__WEBPACK_IMPORTED_MODULE_4__helpers__","__WEBPACK_IMPORTED_MODULE_5__surveyStrings__","__WEBPACK_IMPORTED_MODULE_6__error__","__WEBPACK_IMPORTED_MODULE_7__choicesRestfull__","__WEBPACK_IMPORTED_MODULE_9__settings__","QuestionSelectBase","QuestionCheckboxBase","filteredChoicesValue","otherItemValue","choicesFromUrl","cachedValueForUrlRequests","isChoicesLoaded","enableOnLoadingChoices","isSettingDefaultValue","isSettingComment","isFirstLoadChoicesFromUrl","filterItems","onVisibleChoicesChanged","updateVisibilityBasedOnChoices","choicesByUrl","createRestfull","locOtherText","beforeSendRequestCallback","onBeforeSendRequest","getResultCallback","onLoadChoicesFromUrl","updateResultCallback","serverResult","updateChoicesFromServer","isOtherSelected","getHasOther","renderedValue","runItemsEnableCondition","runItemsCondition","hasUnknownValue","setConditionalChoicesRunner","hasChanges","activeChoices","setConditionalEnableChoicesRunner","hasChanged","conditionChoicesEnableIfRunner","clearDisabledValues","choicesVisibleIf","conditionChoicesVisibleIfRunner","choicesEnableIf","filteredChoices","otherItem","rendredValueToDataCore","commentValue","getStoreOthersAsComment","isRenderedValueSetting","rendredValueToData","rendredValueFromData","isOtherSel","prevCommentValue","oldComment","isRunning","isWaitingForParameters","choiceitem","renderedValueFromDataCore","includeOther","isValueDisabled","choicesOrder","visibleChoices","updateVisibleChoices","calcValue","calcVisibleChoices","canUseFilteredChoices","sortVisibleChoices","addToVisibleChoices","dataValue","choice","choiceDataItem","getChoicesDisplayValue","isOther","otherErrorText","runChoicesByUrl","storeOthersAsComment","processor","surveyImpl","newChoices","checkCachedValuesOnExisting","cachedValues","createCachedValueForUrlRequests","updateCachedValueForUrlRequests","checkOnExisting","updatedValue","visibleChoicesChangedCallback","hideIfChoicesEmpty","order","sortArray","mult","b","keepIncorrectValues","questionCountByValueName","clearIncorrectValuesCallback","clearIncorrectValuesCore","clearValueOnDisableItems","clearDisabledValuesCore","canClearValueAnUnknow","getColumnClass","columnClass","hasColumns","colCount","getLabelClass","isChecked","labelClass","getControlLabelClass","controlLabelClass","controlLabelChecked","columns","oldIsReady","colCountChangedCallback","__WEBPACK_IMPORTED_MODULE_4__question__","__WEBPACK_IMPORTED_MODULE_5__conditions__","__WEBPACK_IMPORTED_MODULE_6__questionfactory__","__WEBPACK_IMPORTED_MODULE_7__error__","__WEBPACK_IMPORTED_MODULE_8__settings__","DragDropInfo","QuestionRowModel","PanelModelBase","PanelModel","nestedPanelDepth","filter","e","updateVisible","calcVisible","setWidth","q","rows","visCount","visibleElements","counter","preSetWidthElements","setElementMaxMinWidth","getElementWidth","renderWidth","getRenderedWidthFromWidth","getRenderedCalcWidth","calcWidthEl","isQuestionsReady","questionsValue","conditionVersion","elementsValue","onAddElement","bind","onRemoveElement","getPanelId","panelCounter","markQuestionListDirty","onRowsChanged","showPageTitles","depth","updatePanelCssClasses","isPanel","qs","questions","getQuestionByName","getElementByName","pnl","getQuestionByValueName","getComments","comments","containsElement","focusOnFirstError","focuseOnFirstError","firstErrorQuestion","hasErrorsCore","hasErrorsInPanels","customError","validatePanel","visQuestions","addQuestionsToList","updateElementVisibility","getFirstQuestionToFocus","withError","currentErrorCount","focusFirstQuestion","focusFirstErrorQuestion","visibleOnly","includingDesignTime","addElementsToList","addPanelsIntoList","addElementsToListCore","currentPage","onGetQuestionTitleLocation","childVisibilityChanged","newIsVisibleValue","getIsPageVisible","oldIsVisibleValue","createRow","onElementVisibilityChanged","buildRows","updateRowsOnElementAdded","addElementCallback","onElementStartWithNewLineChanged","updateRowsOnElementRemoved","panelRemoved","questionRemoved","removeElementCallback","updateRowsVisibility","canBuildRows","isNewRow","dragDropInfo","isEdge","destination","isBottom","dragDropAddTargetToRow","updateRowsRemoveElementFromRow","findRowByElement","elIndex","getRenderedTitle","exceptionQuestion","beforeSetVisibleIndex","panelStartIndex","getPanelStartIndex","panelIndex","isContinueNumbering","canAddElement","addQuestion","addPanel","addNewQuestion","addNewPanel","createNewPanel","removeQuestion","runVisibleCondition","runEnableCondition","dragDropAddTarget","prevRow","dragDropFindRow","findElement","isPage","dragDropAddTargetToEmptyPanel","destRow","dragDropAddTargetToNewRow","dragDropAddTargetToExistingRow","dragDropAddTargetToEmptyPanelCore","prevRowIndex","srcRow","targetRow","dragDropMoveElement","targetIndex","srcIndex","stateChangedCallback","state","collapse","expand","notifySurveyOnVisibilityChanged","setNo","showNumber","panelVisibilityChanged","isCollapsed","isExpanded","innerPaddingLeft","innerIndent","cancelPreview","hasEditButton","cancelPreviewByPage","TextPreProcessor","TextPreProcessorItem","TextPreProcessorValue","returnDisplayValue","canProcess","process","doEncoding","hasAllValuesOnLastRunValue","onProcess","getItems","getName","end","replacedValue","encodeURIComponent","__WEBPACK_IMPORTED_MODULE_2__functionsfactory__","__WEBPACK_IMPORTED_MODULE_3__conditionProcessValue__","Operand","BinaryOperand","UnaryOperand","ArrayOperand","Const","Variable","FunctionOperand","OperandMaker","operatorName","left","right","isArithmeticOp","isArithmeticValue","consumer","binaryFunctions","throwInvalidOperatorError","isConjunction","evaluateParam","safeToString","operatorToString","unaryFunctions","join","some","getCorrectValue","isBooleanValue","variableName","origionalValue","parameters","asyncProcessValue","returnResult","asynResult","evaluateCore","isAsyncFunction","op","Error","toOperandString","isSpaceString","opStr","signs","empty","notempty","negate","arithmeticOp","and","or","plus","minus","mul","div","mod","power","greater","less","greaterorequal","equal","lessorequal","notequal","contains","containsCore","notcontains","anyof","allof","isContains","found","rightArray","rIndex","FunctionFactory","registerFunction","functionHash","isAsyncHash","register","unregister","getAll","params","classRunner","getParamsAsArray","sum","min_max","isMin","min","max","count","avg","getInArrayParams","calcInArray","sumInArray","minInArray","maxInArray","countInArray","avgInArray","iif","getDate","Date","age","birthDay","ageDifMs","now","getTime","ageDate","abs","getUTCFullYear","isContainerReady","getPageByName","getPanelByName","currentDate","__WEBPACK_IMPORTED_MODULE_2__martixBase__","__WEBPACK_IMPORTED_MODULE_4__base__","__WEBPACK_IMPORTED_MODULE_5__textPreProcessor__","__WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__","__WEBPACK_IMPORTED_MODULE_7__surveyStrings__","__WEBPACK_IMPORTED_MODULE_8__questionfactory__","__WEBPACK_IMPORTED_MODULE_9__localizablestring__","__WEBPACK_IMPORTED_MODULE_10__question_expression__","__WEBPACK_IMPORTED_MODULE_11__functionsfactory__","__WEBPACK_IMPORTED_MODULE_12__settings__","onUpdateSelectBaseCellQuestion","matrixDropdownColumnTypes","MatrixDropdownColumn","MatrixDropdownCell","MatrixDropdownRowModelBase","QuestionMatrixDropdownModelBase","onCellQuestionUpdate","locOptionsCaption","optionsCaption","columnColCount","showTitle","colOwnerValue","indexValue","_isVisible","_hasVisibleCell","doShowInMultipleColumnsChanged","updateTemplateQuestion","getColumnTypes","templateQuestion","calcCellQuestionType","setIndex","colOwner","onColumnCellTypeChanged","templateQuestionValue","newVal","locRequiredErrorText","cellType","showInMultipleColumns","isSupportMultipleColumns","totalType","totalExpression","createCellQuestion","qType","createNewQuestion","callOnCellQuestionUpdate","updateCellQuestion","onUpdateJson","setQuestionProperties","qDefinition","defaultCellTypeChanged","getCellType","prevCellType","curCellType","removeProperties","doColumnPropertiesChanged","onColumnPropertyChanged","onShowInMultipleColumnsChanged","propName","validateCell","MatrixDropdownTotalCell","locCalculation","getTotalExpression","format","totalFormat","currency","totalCurrency","displayStyle","totalDisplayStyle","maximumFractionDigits","totalMaximumFractionDigits","minimumFractionDigits","totalMinimumFractionDigits","unlocCalculation","funName","isSettingValue","cells","textPreProcessor","idValue","getId","idCounter","allValues","OwnerVariableName","IndexVariableName","rowIndex","RowVariableName","getDataValueCore","getQuestionByColumnName","newColumnValue","changedValue","changedQuestion","changingValue","onRowChanging","onRowChanged","getVariable","setVariable","locNotification","getQuestionByColumn","columnName","getSharedQuestionByName","qVal","updateCellQuestionOnColumnChanged","updateCellOnColumnChanged","onQuestionReadOnlyChanged","parentIsReadOnly","buildCells","createCell","getRowIndex","firstName","processTextEx","hasAllValuesOnLastRun","MatrixDropdownTotalRowModel","onTotalValueChanged","prevValue","QuestionMatrixDropdownRenderedCell","showErrorOnCore","getShowErrorLocation","isChoice","isFirstChoice","hasQuestion","hideCaption","choiceIndex","QuestionMatrixDropdownRenderedRow","QuestionMatrixDropdownRenderedTable","build","hasFooter","isColumnLayoutHorizontal","footerRow","hasRemoveRowsValue","isRequireReset","hasRemoveRows","canRemoveRows","headerRowValue","footerRowValue","visibleRows","buildHeader","buildFooter","onAddedRow","createHorizontalRow","onRemovedRow","colHeaders","showHeader","isShown","hasRowText","headerRow","createHeaderCell","visibleColumns","hasVisibleCell","isShowInMultipleColumns","createMutlipleColumnsHeader","createTextCell","getFooterText","showFooter","visibleTotalRow","createMutlipleColumnsFooter","createEditCell","buildHorizontalRows","buildVerticalRows","canRemoveRow","renderedRows","createMutlipleEditCells","createRemoveRowCell","col","createMutlipleVerticalRows","createVerticalRow","createVerticalRemoveRow","getMultipleColumnChoices","lTitle","rCell","hasTotal","rRow","isFooter","setHeaderCell","getColumnWidth","getRowTitleWidth","isRemoveRow","isRowChanging","lockResetRenderedTable","isDoingonAnyValueChanged","newColumns","updateColumnsIndexes","generatedVisibleRows","generatedTotalRow","resetRenderedTable","columnsChangedCallback","columnLayoutChangedCallback","addDefaultColumns","colNames","DefaultColums","addColumn","createColumnValues","columnLayout","onStartRowAddingRemoving","onEndRowAdding","renderedTable","onEndRowRemoving","renderedTableValue","onRenderedTableResetCallback","createRenderedTable","onRenderedTableCreatedCallback","onMatrixRowCreated","rowValue","onCellCreatedCallback","updateColumnsCellType","updateCellsCallback","cols","getRequiredText","updateHasFooter","onColumnsChanged","getColumnByName","getRowValue","prevTotalValue","totalValue","runCellsCondition","runTotalsCondition","shouldRunColumnExpression","newValues","getRowConditionValues","checkColumnsVisibility","isColumnVisibilityChanged","curVis","hasVisCell","totalRow","getColumnName","columnMinWidth","getVisibleRows","generateRows","updateValueOnRowsGeneration","createNewValue","rValue","getNewValueOnRowChanged","getVisibleTotalRow","generateTotalRow","visRows","getRowValueCore","setRowValue","nullOnEmpty","isMatrixValueEmpty","getRowDisplayValue","rowDataItem","onBeforeValueChanged","onSetQuestionValue","colIndex","checkForAnswersOrErrors","predicate","every","errosInColumns","hasErrorInColumns","getFirstCellQuestion","createQuestionCore","deleteRowValue","isObject","getOnCellValueChangedOptions","getQuestion","getCellQuestion","onCellValueChanged","onCellValueChangedCallback","matrixCellValueChanged","matrixCellValidate","oldRowValue","matrixCellValueChanging","newRowValue","isDeletingValue","combine","getQuestionByValueNameFromArray","isSett","__WEBPACK_IMPORTED_MODULE_1__question__","QuestionNonValue","__WEBPACK_IMPORTED_MODULE_0__defaultCss_cssstandard__","StylesManager","sheet","Enabled","findSheet","SurveyJSStylesSheetId","createSheet","initializeStyles","styleSheetId","styleSheets","ownerNode","style","appendChild","createTextNode","head","applyTheme","themeName","themeSelector","ThemeCss","sheet_1","theme_1","ThemeColors","selector","cssRuleText","colorVariableName","RegExp","insertRule","Styles","Media","media","orange","darkblue","darkrose","stone","winter","winterstone","modern","bootstrap","bootstrapmaterial","modernThemeCss","bootstrapThemeCss","bootstrapmaterialThemeCss","__WEBPACK_IMPORTED_MODULE_5__page__","__WEBPACK_IMPORTED_MODULE_6__textPreProcessor__","__WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__","__WEBPACK_IMPORTED_MODULE_8__dxSurveyService__","__WEBPACK_IMPORTED_MODULE_9__surveyStrings__","__WEBPACK_IMPORTED_MODULE_10__error__","__WEBPACK_IMPORTED_MODULE_11__localizablestring__","__WEBPACK_IMPORTED_MODULE_12__stylesmanager__","__WEBPACK_IMPORTED_MODULE_13__surveytimer__","__WEBPACK_IMPORTED_MODULE_14__conditions__","__WEBPACK_IMPORTED_MODULE_15__settings__","SurveyModel","variablesHash","localeValue","completedStateValue","completedStateTextValue","isTimerStarted","onCompleting","onComplete","onNavigateToUrl","onStarted","onPartialSend","onCurrentPageChanging","onCurrentPageChanged","onValueChanging","onPageVisibleChanged","onPanelVisibleChanged","onQuestionCreated","onQuestionAdded","onQuestionRemoved","onPanelAdded","onPanelRemoved","onPageAdded","onValidateQuestion","onSettingQuestionErrors","onServerValidateQuestions","onValidatePanel","onErrorCustomText","onValidatedErrorsOnCurrentPage","onProcessHtml","onGetQuestionTitle","onTextMarkdown","onSendResult","onGetResult","onUploadFiles","onDownloadFile","onClearFiles","onLoadChoicesFromServer","onLoadedSurveyFromService","onProcessTextValue","onUpdateQuestionCssClasses","onUpdatePanelCssClasses","onUpdatePageCssClasses","onAfterRenderSurvey","onAfterRenderHeader","onAfterRenderPage","onAfterRenderQuestion","onAfterRenderQuestionInput","onAfterRenderPanel","onMatrixRowAdded","onMatrixBeforeRowAdded","onMatrixRowRemoved","onMatrixAllowRemoveRow","onMatrixCellCreated","onMatrixAfterCellRender","onMatrixCellValueChanged","onMatrixCellValueChanging","onMatrixCellValidate","onDynamicPanelAdded","onDynamicPanelRemoved","onTimer","onTimerPanelInfoText","onDynamicPanelItemValueChanged","onIsAnswerCorrect","onDragDropAllow","onScrollingElementToTop","onLocaleChangedEvent","jsonErrors","cssValue","hideRequiredErrors","_isDesignMode","ignoreValidation","isNavigationButtonPressed","runningPages","origionalPages","isTriggerIsRunning","isEndLoadingFromJson","questionHashes","namesInsensitive","valueNames","valueNamesInsensitive","timerFunc","timeSpent","stylesManager","setOwner","onFirstPageIsStartedChanged","onModeChanged","onBeforeCreating","clientId","surveyId","loadSurveyFromService","onQuestionsOnPageModeChanged","getNavigationCss","main","btn","getNavigateToUrl","getExpressionItemOnRunCondition","navigateToUrlOnCondition","url","navigateToUrl","navigateTo","href","onLocaleChanged","getUsedLocales","defaultLoc","defIndex","getLocString","logoPosition","hasLogo","logoClasses","bottom","runExpression","completedHtmlOnCondition","completedHtml","getQuestionTitlePatternOptions","num","getNewTitlePattern","getNewQuestionTitleElement","template","strs","currentValue","showPageNumbers","updateVisibleIndexes","showProgressBar","visiblePages","mode","setCalcuatedValuesIntoResult","setDataCore","mergeData","updateAllQuestionsValue","notifyAllQuestionsOnValueChanged","notifyElementsOnAnyValueOrVariableChanged","calculatedValues","calValue","includeIntoResult","getAllQuestions","resultItem","pageCount","firstPageIsStarted","vPages","currentPageValue","onContainsPageCallback","newPage","getPageByObject","currentPageChanging","setWasShown","currentPageChanged","scrollToTop","scrollToTopOnPageChange","focusFirstQuestionAutomatic","isLoading","isCompleted","isCompletedBefore","isEditMode","isStartedState","startedPage","isShowingPreview","onShowingPreviewChanged","setCompletedState","clearData","gotoFirstPage","visiblePageCount","updateValuesWithDefaults","oldCurrentPage","newCurrentPage","allowChanging","isNextPage","isPrevPage","getProgress","progressBarType","getQuestionsWithInput","answeredQuestionsCount","reduce","ceil","correctAnswersCount","getCorrectedAnswerCount","allQuestions","navigationButtonsVisibility","showNavigationButtons","isShowPreviewBeforeComplete","textUpdateMode","setDesignMode","visPages","updateAllElementsVisibility","showInvisibleElements","showPreviewBeforeComplete","cookieName","cookies","cookie","setCookie","deleteCookie","nextPage","isLastPage","doCurrentPageComplete","hasErrorsOnNavigate","doComplete","checkErrorsMode","isCurrentPageHasErrors","checkForAsyncQuestionValidation","clearAsyncValidationQuesitons","onCompletedAsyncQuestionValidators","asyncValidationQuesitons","asynQuestions","doCurrentPageCompleteCore","checkIsCurrentPageHasErrors","firstErrorPage","ensureUniqueNames","ensureUniqueName","ensureUniquePageName","ensureUniquePanelName","ensureUniqueQuestionName","ensureUniqueElementName","existingElement","getNewName","pos","base","isFocuseOnFirstError","checkIsPageHasErrors","fireValidatedErrorsOnPage","questionsOnPage","prevPage","isFirstPage","resetNavigationButton","completeLastPage","navigationMouseDown","showPreview","curPage","pageIndex","getVisiblePageIndexByRootPanel","panels","getAllPanels","doServerValidation","doNextPage","questionsOnPageMode","isPageStarted","pageVisibilityChanged","setupPagesForPageModes","restoreOrigionalPages","currentPageNo","isSinglePage","originalPages","questionHashesClear","newPages","createPagesForQuestionOnPageMode","deletedLen","doElementsOnLoad","createSinglePage","createPagesForEveryQuestion","single","createNewPage","originalPage","originalElement","pageJson","showPrevButton","getPageMaxTimeToFinish","isCompleteOnTrigger","onCompletingOptions","allowComplete","previousCookie","hasCookie","stopTimer","setCompleted","savingDataStarted","onCompleteOptions","showDataSaving","showDataSavingError","showDataSavingSuccess","showDataSavingClear","surveyPostId","sendResult","startTimerFromUI","setIsValidatingOnServer","isValidatingOnServer","onIsValidatingOnServerChanged","completeServerValidation","checkOnPageTriggers","sendResultOnPageNext","renderedCompletedHtml","processHtml","completedBeforeHtml","loadingHtml","htmlElement","updatePageCssClasses","afterRenderPage","afterRenderPanel","matrixBeforeRowAdded","matrixRowAdded","getQuestionsByValueNameCore","matrixRowRemoved","matrixAllowRemoveRow","allow","matrixAfterCellRender","dynamicPanelAdded","dynamicPanelRemoved","dynamicPanelItemValueChanged","dragAndDropAllow","cancel","uploadFiles","files","uploadingCallback","uploadFilesCore","downloadFile","questionName","fileValue","clearFiles","fileName","createSurveyService","responses","sendFile","addPage","addNewPage","removePage","caseInsensitive","getQuestionsByNames","getPageByElement","getPageByQuestion","getPagesByNames","getQuizQuestions","panelName","questionOnValueChanging","updateQuestionValue","checkQuestionErrorOnValueChanged","oldErrorCount","notifyQuestionOnValueChanged","valName","getCurrentPageQuestions","checkTriggers","includeInvsible","isOnNextPage","triggers","trigger","checkExpression","oldCurrentPageIndex","resetCalculation","doCalculation","checkIfNewPagesBecomeVisible","newCurrentPageIndex","postId","isPartialCompleted","surveyShowDataSaving","request","getResult","resultId","dataList","cliendId","getSurveyJsonAndIsCompleted","loadSurveyFromServiceJson","loadSurvey","updatePageVisibleIndexes","showIndex","isPageVisible","jsonConverter","setJsonObject","getProcessedTextValueCore","wasEmpty","getInCorrectedAnswerCount","variable","clearInvisibleValues","clearInvisibleQuestionValues","newQuestionValue","isValueEqual","triggerKeys","tryGoNextPageAutomatic","generateNewName","questionHashesPanelAdded","baseName","goNextPageAutomatic","allowCompleteSurveyAutomatic","commentName","questionHashesAdded","questionHashesRemoved","oldName","questionHashAddedCore","questionHashRemovedCore","processTextCore","getCorrectedAnswerCountCore","isCorrect","correctAnswers","incorrectAnswers","addCount","getCorrectedAnswers","getInCorrectedAnswers","showTimerPanel","getTimerInfoText","pageSpent","getDisplayTime","surveySpent","pageLimitSec","pageLimit","surveyLimit","maxTimeToFinish","showTimerPanelMode","getTimerInfoPageText","getTimerInfoSurveyText","pageText","surveyText","sec","startTimer","doTimer","instance","stop","maxTimeToFinishPage","getObjects","setTriggerValue","isVariable","copyTriggerValue","fromName","focusQuestion","setTimeout","__WEBPACK_IMPORTED_MODULE_0__settings__","confirmAction","detectIEOrEdge","isIEOrEdge","ua","navigator","userAgent","msie","trident","edge","loadFileFromBase64","b64Data","byteString","atob","split","mimeString","ab","ArrayBuffer","ia","Uint8Array","bb","Blob","msSaveBlob","msSaveOrOpenBlob","__WEBPACK_IMPORTED_MODULE_1__base__","__WEBPACK_IMPORTED_MODULE_2__error__","__WEBPACK_IMPORTED_MODULE_3__surveyStrings__","__WEBPACK_IMPORTED_MODULE_4__jsonobject__","__WEBPACK_IMPORTED_MODULE_6__helpers__","ValidatorResult","SurveyValidator","ValidatorRunner","NumericValidator","TextValidator","AnswerCountValidator","RegexValidator","EmailValidator","ExpressionValidator","getErrorText","getDefaultErrorText","validate","createCustomError","prepareAsyncValidators","asyncResults","isValidateAllValues","asyncValidators","validatorResult","validatedValue","vName","minLength","allowDigits","reg","test","minCount","maxCount","regex","re","isRunningValue","ensureConditionRunner","generateError","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","marker","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","len","Item","noop","nextTick","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","__WEBPACK_IMPORTED_MODULE_3__question__","Boolean","checkedValue","isDisabled","itemClass","checked","preventDefaults","preventDefault","stopPropagation","onSwitchClick","isIndeterminate","isRightClick","offsetX","offsetWidth","isRtl","defaultView","getComputedStyle","direction","onLabelClick","component","Checkbox","getItemClass","isItemSelected","allowHover","itemHover","CheckboxItem","isAllSelected","Comment","change","keyup","Composite","contentPanel","Custom","contentQuestion","getWidgetComponentName","CustomWidget","isDefaultRender","hasVueComponent","htmlTemplate","components","updated","willUnmount","Dropdown","SurveyElementVue","getRootClass","cssRoot","getContentClass","cssContent","ElementHeader","getTitleClass","cssTitle","getHeaderClass","cssHeader","Empty","Errors","additionalClasses","Expression","__WEBPACK_IMPORTED_MODULE_4__utils_utils__","File","onDragOver","onDrop","dataTransfer","onChange","doChange","srcElement","doClean","needConfirmRemoveFile","isConfirmed","confirmRemoveAllMessage","parentElement","querySelectorAll","doRemoveFile","getConfirmRemoveMessage","doDownloadFile","getPlaceholderClass","allowCount","allowMultiple","loadFiles","FlowPanel","isCollapsedValue","rootNodeValue","beforeMount","onCustomHtmlProducing","onGetHtmlForQuestion","renderQuestion","setRootNode","produceHtml","doc","DOMParser","parseFromString","childNodes","changeExpanded","getTitleStyle","FlowPanelElement","tagName","nodes","FlowPanelElement_1","getStyle","nodeType","fontWeight","fontStyle","textDecoration","elementIdValue","node","hasTextChildNodesOnly","textContent","getChildDomNodes","domNodes","SurveyHeader","Html","Image","ImagePicker","Matrix","cellDisabledClass","hasCellText","cellTextDisabled","cellSelectedClass","itemHoverClass","cellClass","cellClick","MatrixCell","showErrorOnTop","showErrorOnBottom","getHeaders","getCellClass","getCellStyle","removeRowClick","removeRowUI","onVisibilityChanged","MatrixDropdown","MatrixDynamic","addRowClick","addRow","MatrixTable","MultipleText","Navigation","nextButtonMouseDown","mouseDownPage","buttonMouseDown","OtherChoice","Page","isCurrentPageChanged","$nextTick","_showTitle","_showDescription","Panel","PanelDynamic","isRenderModeList","currentPanel","addPanelClick","getButtonAddCss","btnClasses","renderMode","PanelDynamicProgress","isProgressTopShowing","progressTop","progressBottom","panelCount","addPanelUI","prevPanelClick","goToPrevPanel","nextPanelClick","goToNextPanel","changeRange","currentIndex","getButtonPrevCss","isPrevButtonShowing","getButtonNextCss","isNextButtonShowing","rangeMax","PanelDynamicRemove","removePanelClick","removePanelUI","Progress","Radiogroup","RadiogroupItem","Rating","__WEBPACK_IMPORTED_MODULE_3__surveyModel__","Row","SignaturePad","SurveyString","__WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__","__WEBPACK_IMPORTED_MODULE_4__stylesmanager__","Survey","forceUpdate","$forceUpdate","showCompletedPage","getCompletedPageClasses","getProcessedCompletedHtml","hasCompletedPage","processedCompletedHtmlValue","processedCompletedHtml","getCompletedStateClasses","completedState","doTrySaveAgain","newType","Text","TimerPanel","timerInfoText","Window","surveyWindow","isexpanded","closeOnCompleteTimeout","isShowing","closeWindowOnCompleteCallback","doHide","doExpand","__WEBPACK_IMPORTED_MODULE_2__itemvalue__","__WEBPACK_IMPORTED_MODULE_4__error__","__WEBPACK_IMPORTED_MODULE_5__settings__","ChoicesRestfull","XmlParser","assignValue","xml2Json","xmlNode","childNode","childObject","parseXmlString","xmlString","xmlRoot","lastObjHash","processedUrl","processedPath","clearCache","itemsResult","sendingSameRequests","addSameRequest","objHash","unregisterSameRequests","getCachedItemsResult","processedText","doEmptyResultCallback","useChangedItemsResults","sendRequest","pUrl","pPath","parseResponse","parsedResponse","xhr","XMLHttpRequest","open","setRequestHeader","loadingObjHash","onload","onLoad","statusText","responseText","beforeSendRequest","send","titleName","getCustomPropertiesNames","getCustomProperties","getCustomPropertyName","itemValueType","allowEmptyResponse","attachOriginalItems","updatedResult","getResultAfterPath","getItemValueCallback","getTitle","setCustomProperties","callResultCallback","getPropertyBinding","pathes","getPathes","__WEBPACK_IMPORTED_MODULE_0__expressions_expressionParser__","ConditionsParser","ConditionsParserError","code","patchExpression","createCondition","parserCache","conditionError","offset","dxSurveyService","serviceUrl","surveyJson","surveyResult","dataStringify","onerror","onSendFile","formData","FormData","append","QuestionResult","onIsCompleted","englishStrings","pagePrevText","pageNextText","completeText","previewText","editText","startSurveyText","otherItemText","noneItemText","selectAllItemText","panelDynamicProgressText","questionsProgressText","emptySurvey","completingSurvey","completingSurveyBefore","loadingSurvey","requiredError","requiredErrorInPanel","requiredInAllRowsError","numericError","textMinLength","textMaxLength","textMinMaxLength","minRowCountError","minSelectError","maxSelectError","numericMinMax","numericMin","numericMax","invalidEmail","invalidExpression","urlRequestError","urlGetChoicesError","exceedMaxSize","otherRequiredError","uploadingFile","loadingFile","confirmDelete","keyDuplicationError","removeRow","removePanel","choices_Item","matrix_column","matrix_row","savingData","savingDataError","savingDataSuccess","timerMin","timerSec","timerSpentAll","timerSpentPage","timerSpentSurvey","timerLimitAll","timerLimitPage","timerLimitSurvey","cleanCaption","clearCaption","chooseFileCaption","removeFileCaption","booleanCheckedLabel","booleanUncheckedLabel","confirmRemoveFile","confirmRemoveAllFiles","questionTitlePatternText","__WEBPACK_IMPORTED_MODULE_1__itemvalue__","__WEBPACK_IMPORTED_MODULE_5__helpers__","QuestionMatrixBaseModel","filteredRows","filteredColumns","newRows","processRowsOnSet","visibleRowsChangedCallback","hasRowsAsItems","oldVisibleRows","runConditionsForRows","hasColumnsChanged","runConditionsForColumns","restoreNewVisibleRowsValues","rowsVisibleIf","columnsVisibleIf","isChanged","clearInvisibleValuesInRows","newData","__WEBPACK_IMPORTED_MODULE_3__panel__","PageModel","hasShownValue","isRandomizing","wasShown","onNumChanged","areQuestionsRandomized","randomizeElements","oldElements","newElements","questionsOrder","getPanels","dragDropStart","dragDropMoveTo","correctDragDropInfo","dragDropCanDropTagert","dragDropCanDropSource","dragDropAllowFromSurvey","insertAfter","dragDropFinish","isCancel","dragDropGetElementIndex","isSamePanel","prevElement","dragDropCanDropCore","dragDropCanDropNotNext","dragDropIsSameElement","destIndex","el1","el2","__WEBPACK_IMPORTED_MODULE_0__base__","QuestionCustomWidget","CustomWidgetCollection","widgetJson","isFirstRender","isFit","isLibraryLoaded","init","activatedByChanged","activatedBy","widgetIsLoaded","pdfQuestionType","pdfRender","widgetsValues","widgetsActivatedBy","onCustomWidgetAdded","addCustomWidget","widgets","getActivatedBy","widgetName","setActivatedBy","widget","getCustomWidgetByName","__WEBPACK_IMPORTED_MODULE_2__questionfactory__","__WEBPACK_IMPORTED_MODULE_3__question_baseselect__","__WEBPACK_IMPORTED_MODULE_5__itemvalue__","QuestionDropdownModel","minMaxChoices","choicesMax","choicesMin","choicesStep","DefaultChoices","__WEBPACK_IMPORTED_MODULE_4__questionfactory__","QuestionExpressionModel","getCurrecyCodes","expressionRunner","expressionIsRunning","getValueAsStr","toLocaleDateString","useGrouping","toLocaleString","__WEBPACK_IMPORTED_MODULE_1__questionfactory__","__WEBPACK_IMPORTED_MODULE_5__validator__","QuestionTextModel","inputType","step","maxTextLength","correctValueType","minMaxTypes","propertyEditor","SurveyWindowModel","windowElement","onSurveyComplete","showingChangedCallback","show","hide","expandedChangedCallback","expandcollapse","closeWindowOnComplete","timerId","clearInterval","setInterval","surveyElementName","SurveyTimer","surveyTimerFunctions","listenerCounter","instanceValue","__WEBPACK_IMPORTED_MODULE_0__cssstandard__","defaultBootstrapCss","progressTextUnderBar","descriptionUnderInput","defaultBootstrapMaterialCss","modernCss","separator","tableWrapper","headerCell","fileSign","wrapper","__WEBPACK_IMPORTED_MODULE_0__main_scss__","__WEBPACK_IMPORTED_MODULE_1__modern_scss__","__WEBPACK_IMPORTED_MODULE_4__validator__","__WEBPACK_IMPORTED_MODULE_6__base__","__WEBPACK_IMPORTED_MODULE_7__calculatedValue__","__WEBPACK_IMPORTED_MODULE_8__error__","__WEBPACK_IMPORTED_MODULE_10__expressionItems__","__WEBPACK_IMPORTED_MODULE_11__choicesRestfull__","__WEBPACK_IMPORTED_MODULE_12__functionsfactory__","__WEBPACK_IMPORTED_MODULE_13__conditions__","__WEBPACK_IMPORTED_MODULE_14__expressions_expressions__","__WEBPACK_IMPORTED_MODULE_15__conditionsParser__","__WEBPACK_IMPORTED_MODULE_16__conditionProcessValue__","__WEBPACK_IMPORTED_MODULE_17__jsonobject__","__WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__","__WEBPACK_IMPORTED_MODULE_19__question_matrixdropdown__","__WEBPACK_IMPORTED_MODULE_20__question_matrixdynamic__","__WEBPACK_IMPORTED_MODULE_21__question_matrix__","__WEBPACK_IMPORTED_MODULE_22__question_multipletext__","__WEBPACK_IMPORTED_MODULE_23__panel__","__WEBPACK_IMPORTED_MODULE_24__flowpanel__","__WEBPACK_IMPORTED_MODULE_25__page__","__WEBPACK_IMPORTED_MODULE_26__question__","__WEBPACK_IMPORTED_MODULE_27__questionnonvalue__","__WEBPACK_IMPORTED_MODULE_28__question_empty__","__WEBPACK_IMPORTED_MODULE_29__question_baseselect__","__WEBPACK_IMPORTED_MODULE_30__question_checkbox__","__WEBPACK_IMPORTED_MODULE_31__question_comment__","__WEBPACK_IMPORTED_MODULE_32__question_dropdown__","__WEBPACK_IMPORTED_MODULE_33__questionfactory__","__WEBPACK_IMPORTED_MODULE_34__question_file__","__WEBPACK_IMPORTED_MODULE_35__question_html__","__WEBPACK_IMPORTED_MODULE_36__question_radiogroup__","__WEBPACK_IMPORTED_MODULE_37__question_rating__","__WEBPACK_IMPORTED_MODULE_38__question_expression__","__WEBPACK_IMPORTED_MODULE_39__question_text__","__WEBPACK_IMPORTED_MODULE_40__question_boolean__","__WEBPACK_IMPORTED_MODULE_41__question_imagepicker__","__WEBPACK_IMPORTED_MODULE_42__question_image__","__WEBPACK_IMPORTED_MODULE_43__question_signaturepad__","__WEBPACK_IMPORTED_MODULE_44__question_paneldynamic__","__WEBPACK_IMPORTED_MODULE_45__surveytimer__","__WEBPACK_IMPORTED_MODULE_46__survey__","__WEBPACK_IMPORTED_MODULE_47__trigger__","__WEBPACK_IMPORTED_MODULE_48__surveyWindow__","__WEBPACK_IMPORTED_MODULE_49__textPreProcessor__","__WEBPACK_IMPORTED_MODULE_50__dxSurveyService__","__WEBPACK_IMPORTED_MODULE_51__localization_english__","__WEBPACK_IMPORTED_MODULE_52__surveyStrings__","__WEBPACK_IMPORTED_MODULE_53__questionCustomWidgets__","__WEBPACK_IMPORTED_MODULE_54__question_custom__","Version","__WEBPACK_IMPORTED_MODULE_55__stylesmanager__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_boolean_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1edb9dd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_boolean_vue__","__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__","__vue_template_functional__","__vue_styles__","__vue_scopeId__","__vue_module_identifier__","__file","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkbox_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_cad276f6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkbox_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkboxitem_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_c58c80d0_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkboxitem_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_comment_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_099c2c8d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_comment_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_composite_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1a9e2196_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_composite_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_custom_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d4aae09a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_custom_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_customwidget_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1e61a7b7_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_customwidget_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_dropdown_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6b3215d3_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_dropdown_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_element_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_973472ac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_element_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_elementheader_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27adc537_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_elementheader_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_empty_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_05052c0a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_empty_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_errors_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5682e6ad_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_errors_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_expression_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1d20865a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_expression_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_file_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_20f70284_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_file_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanel_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_96ae1a78_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanel_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanelelement_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9d992c30_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanelelement_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_header_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_69cff8cf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_header_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_html_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0742e16d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_html_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_image_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1dc8d709_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_image_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_imagepicker_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_153fe052_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_imagepicker_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrix_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7fa2f403_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrix_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixcell_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3ca54ee5_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixcell_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdropdown_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b4da6d8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdropdown_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdynamic_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9a0b88e8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdynamic_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixtable_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_fa197e4a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixtable_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_multipletext_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_93fe4c02_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_multipletext_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_navigation_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_75eadfd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_navigation_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_otherChoice_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_2ed776ff_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_otherChoice_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_page_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_4e962a51_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_page_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_panel_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0c78899c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_panel_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamic_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9dda5d06_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamic_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicprogress_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_742bffac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicprogress_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicremove_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_db6b2f7e_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicremove_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_progress_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27e325ef_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_progress_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroup_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_06c6d526_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroup_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroupitem_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5bbe97b9_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroupitem_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_rating_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7092bfdf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_rating_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_row_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7cc0bd88_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_row_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_signaturepad_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0462349d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_signaturepad_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_string_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d3a3d75a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_string_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_survey_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6874e1c8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_survey_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_text_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_40ece422_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_text_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_timerpanel_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0d2abe21_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_timerpanel_vue__","__WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_window_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_62f588b2_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_window_vue__","global","Function","exporter","makeExporter","previous","writable","hasOwn","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","supportsProto","__proto__","downLevel","HashMap","MakeDictionary","has","functionPrototype","usePolyfill","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","Metadata","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsConstructor","DecorateConstructor","IsObject","IsNull","ToPropertyKey","DecorateProperty","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","size","targetMetadata","decorated","descriptor","O","P","Create","MetadataKey","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","ownKeys_1","hasKey","parentKeys_1","keysObj","GetIterator","IteratorStep","nextValue","IteratorValue","IteratorClose","Type","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","OrdinaryToPrimitive","toString_1","IsCallable","valueOf","toString_2","argument","ToString","V","method","iterResult","done","f","proto","prototypeProto","cacheSentinel","arraySentinel","MapIterator","_index","_keys","_values","_selector","throw","return","_cacheKey","_cacheIndex","_find","getKey","getEntry","insert","_","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","GenRandomBytes","crypto","getRandomValues","msCrypto","byte","Point","time","Bezier","startPoint","control1","control2","endPoint","throttle","wait","later","leading","remaining","trailing","canvas","opts","velocityFilterWeight","minDistance","_strokeMoveUpdate","_strokeUpdate","dotSize","penColor","backgroundColor","onBegin","onEnd","_canvas","_ctx","getContext","_handleMouseDown","which","_mouseButtonDown","_strokeBegin","_handleMouseMove","_handleMouseUp","_strokeEnd","_handleTouchStart","targetTouches","touch","changedTouches","_handleTouchMove","_handleTouchEnd","wasCanvasTouched","velocityFrom","distanceTo","sqrt","steps","px","py","t","cx","_point","cy","xdiff","ydiff","c1","c2","ctx","fillStyle","clearRect","height","fillRect","_data","_reset","_isEmpty","fromDataURL","dataUrl","ratio","devicePixelRatio","drawImage","toDataURL","_toSVG","_len","_handleMouseEvents","_handleTouchEvents","removeEventListener","clientX","clientY","point","_createPoint","lastPointGroup","lastPoint","isLastPointTooClose","_addPoint","curve","widths","_drawCurve","color","canDrawCurve","points","_drawDot","addEventListener","msTouchAction","touchAction","_lastVelocity","_lastWidth","rect","tmp","_calculateCurveControlPoints","c3","_calculateCurveWidths","shift","s1","s2","s3","dx1","dy1","dx2","dy2","m1","m2","l1","l2","dxm","dym","cm","tx","ty","velocity","newWidth","_strokeWidth","_drawPoint","arc","PI","startWidth","endWidth","widthDelta","drawSteps","beginPath","tt","ttt","u","uu","uuu","closePath","fill","_fromData","pointGroups","drawCurve","drawDot","group","rawPoint","_addPoint2","_rawPoint","_this2","minX","minY","maxX","maxY","svg","createElementNS","setAttributeNS","attr","setAttribute","circle","innerHTML","dummy","cloneNode","btoa","fromData","_this3","toData","__WEBPACK_IMPORTED_MODULE_3__conditions__","CalculatedValue","isCalculated","rerunExpression","runExpressionCore","canRunExpression","ensureExpression","runDependentExpressions","calcItem","HtmlConditionItem","UrlConditionItem","ExpressionItem","__WEBPACK_IMPORTED_MODULE_1__expressions__","SyntaxError","expected","captureStackTrace","buildMessage","hex","literalEscape","classEscape","describeExpectation","expectation","escapedParts","parts","part","inverted","describeExpected","expected1","descriptions","describeFound","found1","peg$parse","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parseExpression","peg$startRuleFunction","peg$c0","tail","buildBinaryOperand","peg$c1","peg$c2","peg$literalExpectation","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","expr","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","peg$c116","peg$c117","peg$c118","sequence","peg$c119","peg$c120","peg$c121","flatten","flattenArray","peg$c122","peg$c123","peg$c124","peg$c125","peg$c126","peg$c127","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$classExpectation","peg$c133","sign","peg$c134","peg$c135","peg$c136","peg$c137","peg$c138","peg$c139","peg$c140","peg$c141","chars","peg$c142","peg$c143","peg$c144","peg$c145","peg$c146","peg$c147","peg$c148","peg$c149","peg$c150","peg$c151","peg$c152","peg$c153","peg$c154","peg$c155","peg$c156","peg$c157","peg$c158","peg$c159","peg$otherExpectation","peg$c160","peg$c161","peg$currPos","peg$savedPos","peg$posDetailsCache","line","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$resultsCache","startRule","text1","ignoreCase","peg$endExpectation","peg$computePosDetails","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","location1","s0","s4","s5","s6","s7","s8","cached","nextPos","peg$parse_","peg$parseLogicOr","peg$parseOrSign","peg$parseLogicAnd","peg$parseAndSign","peg$parseCompOps","peg$parseComparableOperators","peg$parsePlusMinusOps","peg$parsePlusMinusSigns","peg$parseMulDivOps","peg$parseMulDivSigns","peg$parseBinaryFuncOp","peg$parsePowerSigns","peg$parseFactor","peg$parseBinFunctions","peg$parseFunctionOp","peg$parseUnaryFunctionOp","peg$parseAtom","peg$parseArrayOp","peg$parseLettersAndDigits","peg$parseSequence","peg$parseUnFunctions","peg$parseConstValue","peg$parseValueInput","peg$parseLogicValue","peg$parseArithmeticValue","peg$parseAnyInput","peg$parseDigits","charAt","peg$parseNumber","peg$parseNonZeroDigits","peg$parseValueCharacters","peg$parseAnyCharacters","peg$parseLetters","__WEBPACK_IMPORTED_MODULE_2__panel__","FlowPanelModel","onContentChanged","contentChangedCallback","regEx","exec","getQuestionFromText","getHtmlForQuestion","contentElementNamePrefix","getQuestionHtmlId","addElementToContent","searchStr","getElementContentText","insertTextAtCursor","prevName","getSelection","sel","getRangeAt","rangeCount","range","deleteContents","insertNode","getContent","arabicSurveyStrings","bulgarianStrings","catalanSurveyStrings","choices_firstItem","choices_secondItem","choices_thirdItem","czechSurveyStrings","danishSurveyStrings","dutchSurveyStrings","estonianSurveyStrings","finnishSurveyStrings","frenchSurveyStrings","georgianSurveyStrings","otherRequiredEror","germanSurveyStrings","greekSurveyStrings","hebrewSurveyStrings","hungarianSurveyStrings","icelandicSurveyStrings","indonesianStrings","italianSurveyStrings","japaneseSurveyStrings","koreanStrings","latvianSurveyStrings","lithuaniaSurveyStrings","norwegianSurveyStrings","persianSurveyStrings","polishSurveyStrings","portugueseSurveyStrings","romanianSurveyStrings","russianSurveyStrings","simplifiedChineseSurveyStrings","spanishSurveyStrings","swahiliStrings","swedishSurveyStrings","tajikSurveyStrings","thaiStrings","traditionalChineseSurveyStrings","turkishSurveyStrings","ukrainianSurveyStrings","QuestionBooleanModel","locLabelFalse","locLabelTrue","getValueTrue","getValueFalse","locLabel","valueTrue","valueFalse","__WEBPACK_IMPORTED_MODULE_6__surveyStrings__","QuestionCheckboxModel","noneItemValue","selectAllItemValue","invisibleOldValues","isChangingValueOnClearIncorrect","selectAllItem","noneItem","allItemCount","hasNone","hasSelectAll","selectedCount","selectAll","toggleSelectAll","prevNoneIndex","noneIndexInArray","newNoneIndex","noneValue","valStr","clearIncorrectAndDisabledValues","clearDisabled","restoredValues","restoreValuesFromInvisible","isUnkown","visItems","setDefaultValueWithOthers","__WEBPACK_IMPORTED_MODULE_3__questionfactory__","QuestionCommentModel","ComponentQuestionJSON","ComponentCollection","QuestionCustomModel","QuestionCompositeModel","onInit","onCreated","onLoaded","onAfterRender","onAfterRenderContentElement","elementsJSON","createElements","customQuestionValues","getCustomQuestionByName","customQuestion","onAddingJson","isComposite","questionJSON","createCompositeModel","createCustomModel","onCreateComposite","onCreateCustom","QuestionCustomModelBase","createWrapper","getElement","initElement","convertDataName","convertDataValue","questionWrapper","panelWrapper","createPanel","setAfterRenderCallbacks","setIsContentElement","oldComposite","composite","QuestionEmptyModel","QuestionFileModel","isUploading","onStateChanged","previewValue","currentState","doneCallback","allFilesOk","stateChanged","loadFilesProc","storeDataAsText","fileReader","FileReader","readAsDataURL","canPreviewImage","fileItem","allowImagesPreview","isFileImage","waitForUpload","errorLength","imagePrefix","subStr","__WEBPACK_IMPORTED_MODULE_1__questionnonvalue__","QuestionHtmlModel","locHtml","QuestionImageModel","showLabel","QuestionImagePickerModel","multiSelect","convertValToArrayForMultSelect","__WEBPACK_IMPORTED_MODULE_3__martixBase__","__WEBPACK_IMPORTED_MODULE_7__questionfactory__","__WEBPACK_IMPORTED_MODULE_8__localizablestring__","__WEBPACK_IMPORTED_MODULE_9__question_dropdown__","MatrixRowModel","MartrixCells","QuestionMatrixModel","fullName","onMatrixRowChanged","cellsOwner","setCellText","getCellRowColumnValue","createString","setDefaultCellText","getCellLocText","getDefaultCellLocText","getCellDisplayLocText","getCellText","getDefaultCellText","getCellDisplayText","getRows","getColumns","resRow","rowValues","emptyLocalizableString","cellsValue","updateVisibilityBasedOnRows","rowsOrder","createMatrixRow","sortVisibleRows","hasValuesInAllRows","hasErrorInRows","isAllRowRequired","rowVal","newKey","hasRows","hideIfRowsEmpty","DefaultRows","__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__","MatrixDropdownRowModel","QuestionMatrixDropdownModel","locTotalText","rowTitleWidth","displayRowValue","hasContext","prefixName","prefixTitle","fullTitle","__WEBPACK_IMPORTED_MODULE_7__settings__","__WEBPACK_IMPORTED_MODULE_8__utils_utils__","MatrixDynamicRowModel","QuestionMatrixDynamicModel","rowCounter","rowCountValue","initialRowCount","setRowCountValueFromData","defaultRowValue","rowCount","newRow","maxRowCount","allowAddRows","allowRemoveRows","canAddRow","addRowCore","prevRowCount","getDefaultRowValue","isRowAdded","defaultValueFromLastRow","isRequireConfirmOnRowDelete","confirmDeleteText","removeRowCore","defaultLocName","addRowLocation","isDuplicated","isValueDuplicated","setRowCount","keyValues","isValueDuplicatedInRow","getRowValueByIndex","newRowCount","__WEBPACK_IMPORTED_MODULE_3__question_text__","__WEBPACK_IMPORTED_MODULE_5__questionfactory__","MultipleTextItemModel","QuestionMultipleTextModel","editorValue","createEditor","editor","questionTitleTemplateCallback","getItemDefaultValue","placeHolder","locPlaceHolder","getMultipleTextValue","setMultipleTextValue","isMultipleItemValueChanging","editorsOnSurveyLoad","addItem","createTextItem","getItemByName","onItemValueChanged","getIsRequiredText","__WEBPACK_IMPORTED_MODULE_2__surveyStrings__","__WEBPACK_IMPORTED_MODULE_3__textPreProcessor__","__WEBPACK_IMPORTED_MODULE_4__conditionProcessValue__","__WEBPACK_IMPORTED_MODULE_5__question__","__WEBPACK_IMPORTED_MODULE_6__panel__","__WEBPACK_IMPORTED_MODULE_7__jsonobject__","__WEBPACK_IMPORTED_MODULE_9__error__","__WEBPACK_IMPORTED_MODULE_11__utils_utils__","QuestionPanelDynamicItem","QuestionPanelDynamicModel","panelValue","setPanelItemData","getPanelItemData","surveyValues","getRootData","ItemVariableName","getItemIndex","getSharedQuestionFromArray","QuestionPanelDynamicTemplateSurveyImpl","loadingPanelCount","currentIndexValue","isAddingNewPanels","templateValue","createAndSetupNewPanelObject","selectedElementInDesign","addOnPropertyChangedCallback","rebuildPanels","setPanelsState","setTemplatePanelSurveyImpl","setPanelsSurveyImpl","assignOnPropertyChangedToTemplate","onTemplateElementPropertyChanged","locDescription","currentIndexChangedCallback","showRangeInProgress","templateElements","prepareValueForPanelCreating","addingNewPanelsValue","isNewPanelsValueChanged","setValueAfterPanelsCreating","isValueChangingInternally","panelsState","setValueBasedOnPanelCount","reRunCondition","panelCountChangedCallback","templateTitle","minPanelCount","maxPanelCount","renderModeChangedCallback","setPanelVisibleIndex","allowAddPanel","allowRemovePanel","defaultPanelValue","isRowEmpty","canAddPanel","newPanel","hasModified","copyValue","defaultValueFromLastPanel","canRemovePanel","getPanelIndex","clearIncorrectValuesInPanel","prefixText","panelObjs","runPanelsCondition","panelValues","hasKeysDuplicated","updatePanelsContainsErrors","changingValueQuestion","errosInPanels","hasErrorInPanels","visibleQuestions","getPanelDisplayValue","setOnCompleteAsyncInPanel","pnlError","createNewPanelObject","getTemplateQuestionTitleLocation","templateTitleLocation","setPanelCountBasedOnValue","newPanelCount","panelUpdateValueFromSurvey","panelSurveyValueChanged","qValue","itemIndex","panelDataItem","QuestionRadiogroupModel","showClearButton","QuestionRatingModel","rateValuesChangedCallback","locMinRateDescriptionValue","locMaxRateDescriptionValue","rateMax","rateStep","rateMin","visibleRateValues","rateValues","correctValue","round","fr","__WEBPACK_IMPORTED_MODULE_4_signature_pad__","QuestionSignaturePadModel","defaultWidth","defaultHeight","resizeCanvas","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","oldWidth","oldHeight","scale","initSignaturePad","destroySignaturePad","getElementsByTagName","buttonEl","signaturePad","onclick","allowClear","display","updateValueHandler","propertyChangedHandler","__WEBPACK_IMPORTED_MODULE_5__expressions_expressions__","Trigger","SurveyTrigger","SurveyTriggerVisible","SurveyTriggerComplete","SurveyTriggerSetValue","SurveyTriggerRunExpression","SurveyTriggerCopyValue","usedNames","oldPropertiesChanged","onExpressionChanged","operatorsValue","expectedValue","exp","buildExpression","operators","isCheckRequired","perform","check","triggerResult","onSuccess","onFailure","isRequireValue","buildUsedNames","ownerValue","onTrigger","onItemSuccess","onItemFailure","setToName","SurveyTriggerSkip","gotoName","onCompleteRunExpression","$decoratorQueue","warn","console","collectDataFromConstructor","vm","_init","getOwnPropertyNames","plainData","NODE_ENV","$internalHooks","componentFactory","_componentTag","methods","computed","mixins","fn","superProto","Super","extend","registerHooks","Component$1","_vm","_h","$createElement","_c","_self","class","_m","_v","attrs","clearButtonCaption","tabindex","_withStripped","_l","_e","canShowClearButton","click","domProps","_s","readonly","maxlength","placeholder","overflowX","horizontalScroll","rootStyle","directives","rawName","no","staticStyle","position","locString","showIcon","iconCss","cssNavigationEdit","$event","$$a","$$el","$$c","$$v","$$i","_q","contentMode","objectFit","imageFit","imageLink","imageWidth","imageHeight","alt","customHtml","hasDefaultRender","componentName","tag","indeterminate","multiple","inputTitle","accept","acceptedTypes","drop","dragover","role","for","chooseButtonCaption","noFileChosenCaption","cleanButtonCaption","download","viewBox","ariaTitleId","isRequireTextOnStart","isRequireTextBeforeTitle","isRequireTextAfterTitle","hasDescriptionUnderTitle","staticClass","commentClass","otherPlaceHolder","headers","hasErrorsOnTop","isCheckbox","hideLabel","hasErrorsOnBottom","removeRowText","showDescription","isShow","koRenderedHtml","cursor","windowSurvey","expandedCss","isExpandedSurvey","float","onsubmit","isNavigationButtonsShowing","cssNavigationStart","isShowProgressBarOnTop","isTimerPanelShowingOnTop","isTimerPanelShowingOnBottom","isShowProgressBarOnBottom","completedStateText","processedCompletedBeforeHtml","processedLoadingHtml","emptySurveyText","isLogoBefore","logoClassNames","logoFit","locLogo","logoWidth","logoHeight","isLogoAfter","otherText","_value","showOptionsCaption","locMinRateDescription","locMaxRateDescription","cssClass","panelPrevText","isRangeShowing","panelNextText","panelAddText","isShowPrevButton","cssNavigationPrev","mousedown","cssNavigationNext","isPreviewButtonVisible","cssNavigationPreview","isCompleteButtonVisible","cssNavigationComplete","flexBasis","flexGrow","flexShrink","ariaRole","columnIndex","rowindex","rootNode","hasTitleOnLeftTop","commentText","hasDescriptionUnderInput","isAddRowOnTop","addRowText","isAddRowOnBottom","elNode","renderedPanels","isProgressBottomShowing","panelRemoveText","cellIndex","g","eval","__WEBPACK_IMPORTED_MODULE_0__chunks_model__","__WEBPACK_IMPORTED_MODULE_2__chunks_helpers__","__WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__","__WEBPACK_IMPORTED_MODULE_5__defaultCss_cssbootstrapmaterial__","__WEBPACK_IMPORTED_MODULE_6__defaultCss_cssmodern__","__WEBPACK_IMPORTED_MODULE_7__vue_surveyModel__","__WEBPACK_IMPORTED_MODULE_8__vue_survey_vue__","__WEBPACK_IMPORTED_MODULE_9__vue_customwidget_vue__","__WEBPACK_IMPORTED_MODULE_10__vue_string_vue__","__WEBPACK_IMPORTED_MODULE_11__vue_element_vue__","__WEBPACK_IMPORTED_MODULE_12__vue_window_vue__","__WEBPACK_IMPORTED_MODULE_13__vue_page_vue__","__WEBPACK_IMPORTED_MODULE_14__vue_radiogroup_vue__","__WEBPACK_IMPORTED_MODULE_15__vue_radiogroupitem_vue__","__WEBPACK_IMPORTED_MODULE_16__vue_otherChoice_vue__","__WEBPACK_IMPORTED_MODULE_17__vue_rating_vue__","__WEBPACK_IMPORTED_MODULE_18__vue_comment_vue__","__WEBPACK_IMPORTED_MODULE_19__vue_checkbox_vue__","__WEBPACK_IMPORTED_MODULE_20__vue_checkboxitem_vue__","__WEBPACK_IMPORTED_MODULE_21__vue_text_vue__","__WEBPACK_IMPORTED_MODULE_22__vue_boolean_vue__","__WEBPACK_IMPORTED_MODULE_23__vue_empty_vue__","__WEBPACK_IMPORTED_MODULE_24__vue_multipletext_vue__","__WEBPACK_IMPORTED_MODULE_25__vue_matrix_vue__","__WEBPACK_IMPORTED_MODULE_26__vue_dropdown_vue__","__WEBPACK_IMPORTED_MODULE_27__vue_file_vue__","__WEBPACK_IMPORTED_MODULE_28__vue_matrixcell_vue__","__WEBPACK_IMPORTED_MODULE_29__vue_matrixtable_vue__","__WEBPACK_IMPORTED_MODULE_30__vue_matrixdropdown_vue__","__WEBPACK_IMPORTED_MODULE_31__vue_matrixdynamic_vue__","__WEBPACK_IMPORTED_MODULE_32__vue_errors_vue__","__WEBPACK_IMPORTED_MODULE_33__vue_html_vue__","__WEBPACK_IMPORTED_MODULE_34__vue_expression_vue__","__WEBPACK_IMPORTED_MODULE_35__vue_imagepicker_vue__","__WEBPACK_IMPORTED_MODULE_36__vue_paneldynamic_vue__","__WEBPACK_IMPORTED_MODULE_37__vue_paneldynamicremove_vue__","__WEBPACK_IMPORTED_MODULE_38__vue_paneldynamicprogress_vue__","__WEBPACK_IMPORTED_MODULE_39__vue_navigation_vue__","__WEBPACK_IMPORTED_MODULE_40__vue_progress_vue__","__WEBPACK_IMPORTED_MODULE_41__vue_timerpanel_vue__","__WEBPACK_IMPORTED_MODULE_42__vue_panel_vue__","__WEBPACK_IMPORTED_MODULE_43__vue_flowpanel_vue__","__WEBPACK_IMPORTED_MODULE_44__vue_flowpanelelement_vue__","__WEBPACK_IMPORTED_MODULE_45__vue_row_vue__","__WEBPACK_IMPORTED_MODULE_46__vue_elementheader_vue__","__WEBPACK_IMPORTED_MODULE_47__vue_image_vue__","__WEBPACK_IMPORTED_MODULE_48__vue_signaturepad_vue__","__WEBPACK_IMPORTED_MODULE_49__vue_header_vue__","__WEBPACK_IMPORTED_MODULE_50__vue_custom_vue__","__WEBPACK_IMPORTED_MODULE_51__vue_composite_vue__","thisVue","showSurvey","surveyJSON","myCss","tokenMixin","saveResults","resultsdata","userSurveyId","axios","put","checkForToken","sId","$route","$localStorage","$router","expirationDate","expirationDateToDate","checkForNav","buildTokenHeader"],"mappings":"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ACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGR30E,EAA0C,KAAsB1O,SAAS,aAAc,CACnF,wBACA,CAAE1N,KAAM,SAAU+J,sBAAuB,aACzC,CACI/J,KAAM,eACNuG,QAAS,OACTuJ,QAAS,CAAC,OAAQ,UAAW,WAAY,UAAW,SAExD,CACI9P,KAAM,WACN8P,QAAS,WACL,OAAOihF,KAEXxqF,QAAS,OAEb,CAAEvG,KAAM,+BAAgCuG,SAAU,GAClD,CAAEvG,KAAM,+BAAgCuG,SAAU,GAClD,CAAEvG,KAAM,sBAAuBuG,SAAS,GACxC,CAAEvG,KAAM,cAAe6M,SAAS,GAChC,CAAE7M,KAAM,WAAY6M,SAAS,GAC7B,CAAE7M,KAAM,aAAc6M,SAAS,GAC/B,CAAE7M,KAAM,WAAY6M,SAAS,GAC7B,CAAE7M,KAAM,oBAAqB6M,SAAS,GACtC,CAAE7M,KAAM,aAAc6M,SAAS,GAC/B,CAAE7M,KAAM,eAAgB6M,SAAS,GACjC,CAAE7M,KAAM,gBAAiB6M,SAAS,GAClC,CAAE7M,KAAM,aAAc6M,SAAS,KAChC,WACC,OAAO,IAAIikF,EAAwB,MACpC,YACHD,EAA+C,KAA2B/1E,SAASR,iBAAiB,cAAc,SAAUta,GACxH,OAAO,IAAI8wF,EAAwB9wF,OAMjC,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D+xF,EAAiD/xF,EAAoB,GACrEsoB,EAA4CtoB,EAAoB,GAChEu2E,EAA0Cv2E,EAAoB,IAC9DgrC,EAAyChrC,EAAoB,GAC7DgyF,EAA2ChyF,EAAoB,IACzDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwwF,KAUnG,IAAIA,EAAmC,SAAUv9E,GAE7C,SAASu9E,EAAkBxxF,GACvB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAGvC,OAFA+U,EAAMlU,KAAOA,EACbkU,EAAM8L,wBAAwB,cAAe9L,GACtCA,EAmKX,OAxKA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFiyF,EAAmBv9E,GAOnGu9E,EAAkB5wF,UAAUy3B,YAAc,WACtC,MAAyB,QAAlBl5B,KAAKsyF,WAEhBD,EAAkB5wF,UAAUmN,QAAU,WAClC,MAAO,QAEX5N,OAAOC,eAAeoxF,EAAkB5wF,UAAW,YAAa,CAI5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACXA,EAAMA,EAAI8I,cACC,kBAAP9I,IACAA,EAAM,kBACV/D,KAAKqhD,SAAM78C,EACXxE,KAAKshD,SAAM98C,EACXxE,KAAKuyF,UAAO/tF,EACZxE,KAAK2P,iBAAiB,YAAa5L,EAAI8I,gBAE3C1L,YAAY,EACZD,cAAc,IAElBmxF,EAAkB5wF,UAAUi1B,cAAgB,WACxC,IAAIC,EAAa7hB,EAAOrT,UAAUi1B,cAAcl2B,KAAKR,MAKrD,MAJuB,UAAnBA,KAAKsyF,WACJtyF,KAAK22B,WAAWinB,MAAK,SAAUvuC,GAAK,MAAuB,mBAAhBA,EAAET,cAC9C+nB,EAAWhyB,KAAK,IAAIytF,EAAyC,MAE1Dz7D,GAEX07D,EAAkB5wF,UAAU6pB,sBAAwB,SAAUC,GAC1D,OAAO,GAEXvqB,OAAOC,eAAeoxF,EAAkB5wF,UAAW,YAAa,CAM5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBmxF,EAAkB5wF,UAAU6X,aAAe,WACvC,OAAO8xB,EAAuC,KAAmB9xB,aAAatZ,KAAKmL,UAAWnL,KAAKqlB,OAASrlB,KAAKqlB,OAAOmtE,eAAiB,IAE7IxxF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,OAAQ,CAIvDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,SAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,MAAO,CAItDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,QAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,MAAO5L,IAEjC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,MAAO,CAItDL,IAAK,WACD,IAAImP,EAAWvQ,KAAKsM,iBAAiB,OAKrC,OAJKiE,GACmB,SAAnBvQ,KAAKsyF,WAA2C,mBAAnBtyF,KAAKsyF,YACnC/hF,EAAW,cAERA,GAEX9E,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,MAAO5L,IAEjC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,OAAQ,CAIvDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,SAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBmxF,EAAkB5wF,UAAUmqB,QAAU,WAClC,OAAO9W,EAAOrT,UAAUmqB,QAAQprB,KAAKR,OAAwB,KAAfA,KAAKW,OAEvD0xF,EAAkB5wF,UAAUu4B,2BAA6B,WACrD,OAAO,GAEXq4D,EAAkB5wF,UAAUw4B,uBAAyB,WACjD,MAAO,CAAC,OAAQ,WAAY,kBAAkBvuB,QAAQ1L,KAAKsyF,WAAa,GAE5EtxF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,cAAe,CAI9DL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,cAAevL,IAEjD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeoxF,EAAkB5wF,UAAW,iBAAkB,CACjEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,gBAErChO,YAAY,EACZD,cAAc,IAElBmxF,EAAkB5wF,UAAUw2B,iBAAmB,SAAUT,GACrD,OAAQx3B,KAAKiV,OAAO7S,OAAS,IACxBo1B,GACDx3B,KAAKi6B,0BAEbo4D,EAAkB5wF,UAAUyyB,YAAc,SAAUnoB,GAChDA,EAAW/L,KAAKyyF,iBAAiB1mF,GACjC+I,EAAOrT,UAAUyyB,YAAY1zB,KAAKR,KAAM+L,IAE5CsmF,EAAkB5wF,UAAUgxF,iBAAmB,SAAU1mF,GACrD,OAAKA,IAEiB,UAAlB/L,KAAKsyF,WAA2C,SAAlBtyF,KAAKsyF,WAC5BlnD,EAAuC,KAAmBhyB,SAASrN,GAAYqM,WAAWrM,GAAY,GAFtGA,GAMfsmF,EAAkB5wF,UAAUo1B,uBAAyB,SAAUC,GAC3DhiB,EAAOrT,UAAUo1B,uBAAuBr2B,KAAKR,KAAM82B,GACnDA,EAAoBnyB,KAAK,UAAW,OAAQ,QAAS,UAElD0tF,EAzK2B,CA0KpC1b,EAAwC,MAEtC+b,EAAc,CACd,SACA,QACA,OACA,iBACA,QACA,OACA,QAEJhqE,EAA0C,KAAsBna,SAAS,OAAQ,CAC7E,CACI1N,KAAM,YACNuG,QAAS,OACTuJ,QAAS,CACL,QACA,OACA,WACA,iBACA,QACA,QACA,SACA,WACA,QACA,MACA,OACA,OACA,MACA,SAGR,CAAE9P,KAAM,cAAeuG,QAAS,IAChC,CACIvG,KAAM,MACNgQ,UAAW,YACXtF,UAAW,SAAUa,GACjB,QAAKA,IAE0C,IAAxCsmF,EAAYhnF,QAAQU,EAAIkmF,YAEnC7hF,uBAAwB,SAAUrE,EAAKumF,GACnCA,EAAeL,UAAYlmF,EAAIkmF,YAGvC,CACIzxF,KAAM,MACNgQ,UAAW,YACXtF,UAAW,SAAUa,GACjB,QAAKA,IAE0C,IAAxCsmF,EAAYhnF,QAAQU,EAAIkmF,YAEnC7hF,uBAAwB,SAAUrE,EAAKumF,GACnCA,EAAeL,UAAYlmF,EAAIkmF,YAGvC,CACIzxF,KAAM,cACNgQ,UAAW,YACXtF,UAAW,SAAUa,GACjB,QAAKA,GAEoB,WAAlBA,EAAIkmF,YAGnB,CAAEzxF,KAAM,mBAAoBuG,SAAU,GACtC,CAAEvG,KAAM,cAAe+J,sBAAuB,oBAC/C,WACC,OAAO,IAAIynF,EAAkB,MAC9B,YACHF,EAA+C,KAA2Bx2E,SAASR,iBAAiB,QAAQ,SAAUta,GAClH,OAAO,IAAIwxF,EAAkBxxF,OAM3B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D2xE,EAAsC3xE,EAAoB,GAC1DmpC,EAAwCnpC,EAAoB,IACtDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO+wF,KAOnG,IAAIA,EAAmC,SAAU99E,GAE7C,SAAS89E,EAAkBp9E,EAASu1B,QACX,IAAjBA,IAA2BA,EAAe,MAC9C,IAAIh2B,EAAQD,EAAOtU,KAAKR,OAASA,KAIjC+U,EAAMsuE,uBAAyB,EAE3BtuE,EAAMiQ,YADN+lB,GAIoBh2B,EAAMi2B,aAAax1B,GAE3CT,EAAMiQ,YAAYm/B,WAAY,EAC1B,qBAAuBrgC,WACvB/O,EAAM89E,cAAgB/uE,SAAS/H,cAAc,QAEjD,IAAIuF,EAAOvM,EAIX,OAHAA,EAAMsQ,OAAOiyC,WAAWvvD,KAAI,SAAUsd,EAAQzf,GAC1C0b,EAAKwxE,sBAEF/9E,EAgIX,OAtJA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFwyF,EAAmB99E,GAwBnG89E,EAAkBnxF,UAAUmN,QAAU,WAClC,MAAO,UAEX5N,OAAOC,eAAe2xF,EAAkBnxF,UAAW,SAAU,CAKzDL,IAAK,WACD,OAAOpB,KAAKglB,aAEhB7jB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe2xF,EAAkBnxF,UAAW,YAAa,CAM5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAAa,IAE9Cb,IAAK,SAAU1H,GACP/D,KAAKsjF,WAAav/E,IAEtB/D,KAAK2P,iBAAiB,YAAa5L,GAC/B/D,KAAK+yF,wBACL/yF,KAAK+yF,2BAEb5xF,YAAY,EACZD,cAAc,IAOlB0xF,EAAkBnxF,UAAUuxF,KAAO,WAC/BhzF,KAAKsjF,WAAY,GAOrBsP,EAAkBnxF,UAAUwxF,KAAO,WAC/BjzF,KAAKsjF,WAAY,GAErBtiF,OAAOC,eAAe2xF,EAAkBnxF,UAAW,aAAc,CAM7DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAAc,IAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAC/B/D,KAAKge,mBAAqBhe,KAAKkzF,yBAChClzF,KAAKkzF,2BAEb/xF,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe2xF,EAAkBnxF,UAAW,QAAS,CAIxDL,IAAK,WACD,OAAOpB,KAAKqlB,OAAO0K,OAEvBtkB,IAAK,SAAU9K,GACXX,KAAKqlB,OAAO0K,MAAQpvB,GAExBQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe2xF,EAAkBnxF,UAAW,WAAY,CAC3DL,IAAK,WACD,OAAOpB,KAAKqlB,OAAO0I,UAEvB5sB,YAAY,EACZD,cAAc,IAKlB0xF,EAAkBnxF,UAAUi5C,OAAS,WACjC16C,KAAKmzF,gBAAe,IAKxBP,EAAkBnxF,UAAUg5C,SAAW,WACnCz6C,KAAKmzF,gBAAe,IAExBP,EAAkBnxF,UAAUupC,aAAe,SAAUx1B,GACjD,OAAO,IAAI+zB,EAAsC,KAAuB/zB,IAE5Eo9E,EAAkBnxF,UAAU0xF,eAAiB,SAAUxyF,GACnDX,KAAKg7C,WAAar6C,GAEtBiyF,EAAkBnxF,UAAUqxF,iBAAmB,WAC3C,KAAI9yF,KAAKqjF,uBAAyB,GAElC,GAAmC,GAA/BrjF,KAAKqjF,uBACLrjF,KAAKozF,4BAEJ,CACD,IAAI9xE,EAAOthB,KACPqzF,EAAU,KACVl0E,EAAO,WACPmC,EAAK8xE,wBACL5uD,OAAO8uD,cAAcD,IAEzBA,EAAU7uD,OAAO+uD,YAAYp0E,EAAoC,IAA9Bnf,KAAKqjF,0BAGhDuP,EAAkBnxF,UAAU2xF,sBAAwB,WAC1CpzF,KAAKujF,+BACPvjF,KAAKujF,iCAGbqP,EAAkBY,kBAAoB,iBAC/BZ,EAvJ2B,CAwJpC7gB,EAAoC,OAMhC,SAAUjyE,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsvF,EAAsCtvF,EAAoB,GAEpDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO4xF,KAEnG,IAAIC,EAAuB,CACvBpjB,WAAY,SAAUnxD,GAClB,OAAOqlB,OAAO8rC,WAAWnxD,EAAM,MAEnCw1D,aAAc,SAAU0e,GACpB7uD,OAAOmwC,aAAa0e,KAGxBI,EAA6B,WAC7B,SAASA,IACLzzF,KAAK2zF,gBAAkB,EACvB3zF,KAAKqzF,SAAW,EAChBrzF,KAAK06D,QAAU,IAAIg1B,EAAoC,KA8C3D,OA5CA1uF,OAAOC,eAAewyF,EAAa,WAAY,CAC3CryF,IAAK,WAID,OAHKqyF,EAAYG,gBACbH,EAAYG,cAAgB,IAAIH,GAE7BA,EAAYG,eAEvBzyF,YAAY,EACZD,cAAc,IAElBuyF,EAAYhyF,UAAU8V,MAAQ,SAAU4H,GACpC,IAAIpK,EAAQ/U,UACC,IAATmf,IAAmBA,EAAO,MAC1BA,GACAnf,KAAK06D,QAAQ3yD,IAAIoX,GAEjBnf,KAAKqzF,QAAU,IACfrzF,KAAKqzF,QAAUK,EAAqBpjB,YAAW,WAC3Cv7D,EAAM66D,cAGd5vE,KAAK2zF,mBAETF,EAAYhyF,UAAUquE,KAAO,SAAU3wD,QACtB,IAATA,IAAmBA,EAAO,MAC1BA,GACAnf,KAAK06D,QAAQtzC,OAAOjI,GAExBnf,KAAK2zF,kBACuB,GAAxB3zF,KAAK2zF,iBAAwB3zF,KAAKqzF,SAAW,IAC7CK,EAAqB/e,aAAa30E,KAAKqzF,SACvCrzF,KAAKqzF,SAAW,IAGxBI,EAAYhyF,UAAUmuE,QAAU,WAC5B,IAAI76D,EAAQ/U,KACRA,KAAKqzF,QAAU,IAEnBrzF,KAAK06D,QAAQ56C,KAAK9f,KAAM,IACxBA,KAAKqzF,QAAUK,EAAqBpjB,YAAW,WAC3Cv7D,EAAM66D,eAGd6jB,EAAYG,cAAgB,KACrBH,EAlDqB,IAyD1B,SAAU3zF,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIyzF,EAA6CzzF,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiyF,KAEnG,IAAIA,EAAsB,CACtBl0F,KAAM,2BACNgnB,UAAW,eACXuI,OAAQ,4BACRwP,KAAM,6BACNC,UAAW,2CACXC,OAAQ,2BACR9O,MAAO,GACPpb,YAAa,GACbmqB,KAAM,UACNC,UAAW,iBACXC,WAAY,kBACZC,iBAAkB,GAClBC,cAAe,GACfC,WAAY,CACRC,SAAU,sBACVC,KAAM,kBACNC,KAAM,kBACN/nB,MAAO,mBACPgoB,QAAS,qBACTC,KAAM,mBAEVC,SAAU,qCACVC,YAAa,eACbq0D,qBAAsB,YACtBv/D,KAAM,CACF50B,KAAM,GACNmwB,MAAO,GACPpb,YAAa,SAEjBirB,UAAW,GACXC,gBAAiB,QACjBC,IAAK,SACLpjB,SAAU,CACNiS,SAAU,UACVD,SAAU,oBACVS,OAAQ,GACRG,WAAY,aACZK,QAAS,GACTC,YAAa,eACbf,cAAe,eACfkB,MAAO,GACPpV,OAAQ,WACRhG,YAAa,QACbq/E,sBAAuB,QACvBt8D,aAAc,qBACdtD,QAAS,eACT3D,SAAU,GACVE,cAAe,GACf7B,SAAU,YACVkC,OAAQ,GACR+O,UAAW,cAEfE,MAAO,CACHlQ,MAAO,aACPmQ,gBAAiB,wBACjBC,KAAM,gBACNC,aAAc,cACdzrB,YAAa,yBACbiS,UAAW,iBACXiY,OAAQ,eAEZnpB,MAAO,CACH9V,KAAM,qBACNugC,KAAM,uCACN3wB,KAAM,GACN+gB,YAAa,oBACbC,eAAgB,wBAEpB6P,QAAS,CACLzgC,KAAM,+BACN4P,KAAM,aACN8wB,QAAS,oBACTC,YAAa,8BACbC,kBAAmB,4BACnBC,aAAc,uBACdC,OAAQ,qBACRC,OAAQ,qBACRC,MAAO,qBACPC,cAAe,+BAEnBC,SAAU,CACNlhC,KAAM,8BACN4P,KAAM,WACN+wB,YAAa,UACbQ,WAAY,uBACZE,YAAa,GACbC,cAAe,YACfN,MAAO,GACPI,aAAc,GACdG,aAAc,GACdC,kBAAmB,oBACnBC,MAAO,mCACPC,OAAQ,sBAEZlN,QAAS,eACTmN,SAAU,CACN3hC,KAAM,GACN0gC,QAAS,eACTe,MAAO,8BAEX9a,KAAM,CAAE3mB,KAAM,IACd6hC,MAAO,CAAE7hC,KAAM,aAAc6hC,MAAO,kBACpCC,OAAQ,CACJ9hC,KAAM,oBACNghC,MAAO,eACPL,YAAa,UACbW,cAAe,YACfS,SAAU,mBACVC,iBAAkB,kCAClBC,UAAW,qBAEfC,eAAgB,CAAEliC,KAAM,SACxBoiC,cAAe,CACXpiC,KAAM,QACNqiC,OAAQ,SACRC,UAAW,GACXC,aAAc,GACdC,QAAS,GACTC,WAAY,IAEhBC,aAAc,CACV1iC,KAAM,GACNu/B,WAAY,8BACZmhD,YAAa,2DACbC,eAAgB,8DAChBxwD,MAAO,8BACPkS,OAAQ,SACRC,UAAW,kCACXC,aAAc,qCACdI,WAAY,4BACZC,WAAY,4BACZC,kBAAmB,sCACnBhD,SAAU,cACVC,YAAa,mBACbgD,aAAc,kCAElBC,aAAc,CACV/iC,KAAM,QACNgjC,UAAW,GACXC,UAAW,mCAEfC,WAAY,CACRljC,KAAM,sBACN4P,KAAM,QACN+wB,YAAa,UACbQ,WAAY,yBACZH,MAAO,GACPI,aAAc,GACdC,YAAa,GACbC,cAAe,YACfC,aAAc,GACdC,kBAAmB,SACnBC,MAAO,qCACP0B,YAAa,+BACbzB,OAAQ,sBAEZ0B,YAAa,CACTpjC,KAAM,YACN4P,KAAM,cACN+wB,YAAa,UACbQ,WAAY,0BACZH,MAAO,oBACPK,YAAa,2BACbQ,MAAO,oBACPwB,SAAU,mBACVF,YAAa,yBAEjBG,OAAQ,CACJtjC,KAAM,YACN4P,KAAM,gCACN2zB,SAAU,SACVC,QAAS,uBACTH,SAAU,wBACVI,QAAS,uBACTC,SAAU,IAEd92B,KAAM,eACNsmB,WAAY,eACZyQ,KAAM,CACF3jC,KAAM,YACN4jC,iBAAkB,wBAClBjE,QAAS,oBACTkE,aAAc,0BACdC,UAAW,kBACXC,WAAY,mBACZC,cAAe,YACfC,cAAe,YACfC,eAAgB,YAChBC,mBAAoB,aAExBG,aAAc,CACVtkC,KAAM,qCACNukC,SAAU,kBACVpB,YAAa,gBAEjBqB,SAAU,CACNxkC,KAAM,GACNykC,OAAQ,mBACR3uB,MAAO,qBACP4uB,QAAS,sBACTC,gBAAiB,IAErBC,OAAQ,CACJ5kC,KAAM,gBACN++B,KAAM,aACNxP,OAAQ,CACJvvB,KAAM,2BACNmwB,MAAO,YACPkS,OAAQ,uBACRwC,eAAgB,4CAChBC,gBAAiB,iDAI7BmvD,EAA2C,KAAqB,aAAeC,GAKzE,SAAUh0F,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIyzF,EAA6CzzF,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOoyF,KAEnG,IAAIA,EAA8B,CAC9Br0F,KAAM,mCACNgnB,UAAW,eACXuI,OAAQ,eACRwP,KAAM,YACNC,UAAW,0BACXC,OAAQ,cACR9O,MAAO,GACPpb,YAAa,GACbmqB,KAAM,UACNC,UAAW,iBACXC,WAAY,kBACZC,iBAAkB,GAClBC,cAAe,GACfC,WAAY,CACRC,SAAU,kCACVC,KAAM,8BACNC,KAAM,8BACN/nB,MAAO,+BACPgoB,QAAS,iCACTC,KAAM,+BAEVC,SAAU,qCACVC,YAAa,eACbq0D,qBAAsB,YACtBv/D,KAAM,CACF50B,KAAM,GACNmwB,MAAO,GACPpb,YAAa,SAEjBirB,UAAW,GACXC,gBAAiB,QACjBC,IAAK,SACLpjB,SAAU,CACNiS,SAAU,oCACVD,SAAU,sCACVS,OAAQ,GACRG,WAAY,aACZK,QAAS,GACTC,YAAa,eACbf,cAAe,eACf6I,aAAc,qBACd3H,MAAO,GACPpV,OAAQ,WACRhG,YAAa,QACbq/E,sBAAuB,QACvB5/D,QAAS,eACT3D,SAAU,GACVE,cAAe,GACf7B,SAAU,YACVkC,OAAQ,GACR+O,UAAW,6BAEfE,MAAO,CACHlQ,MAAO,aACPmQ,gBAAiB,wBACjBC,KAAM,gBACNC,aAAc,cACdzrB,YAAa,yBACbiS,UAAW,iBACXiY,OAAQ,eAEZnpB,MAAO,CACH9V,KAAM,qBACNugC,KAAM,uCACN3wB,KAAM,GACN+gB,YAAa,oBACbC,eAAgB,wBAEpB6P,QAAS,CACLzgC,KAAM,mBACN4P,KAAM,aACN8wB,QAAS,oBACTC,YAAa,8BACbC,kBAAmB,4BACnBC,aAAc,uBACdC,OAAQ,qBACRC,OAAQ,qBACRC,MAAO,qBACPC,cAAe,+BAEnBC,SAAU,CACNlhC,KAAM,UACN4P,KAAM,WACN+wB,YAAa,UACbQ,WAAY,uBACZG,cAAe,YACfD,YAAa,GACbL,MAAO,GACPI,aAAc,GACdG,aAAc,GACdC,kBAAmB,qBACnBC,MAAO,mCACPC,OAAQ,sBAEZlN,QAAS,eACTmN,SAAU,CACN3hC,KAAM,GACN0gC,QAAS,eACTe,MAAO,8BAEX9a,KAAM,CAAE3mB,KAAM,IACd6hC,MAAO,CAAE7hC,KAAM,aAAc6hC,MAAO,kBACpCC,OAAQ,CACJ9hC,KAAM,oBACNkgC,IAAK,4BACLc,MAAO,4BACPe,SAAU,mBACVC,iBAAkB,kCAClBC,UAAW,oBACXgB,UAAW,eACXtC,YAAa,UACbW,cAAe,YACfE,kBAAmB,aAEvBU,eAAgB,CAAEliC,KAAM,QAASijC,UAAW,6BAC5Cb,cAAe,CACXrT,SAAU,UACVD,SAAU,YACV9uB,KAAM,QACNqiC,OAAQ,kBACRY,UAAW,4BACXX,UAAW,GACXC,aAAc,GACdC,QAAS,GACTC,WAAY,IAEhBC,aAAc,CACV1iC,KAAM,GACNu/B,WAAY,8BACZmhD,YAAa,2DACbC,eAAgB,8DAChBxwD,MAAO,8BACPkS,OAAQ,SACRC,UAAW,kDACXC,aAAc,qDACdI,WAAY,4BACZC,WAAY,4BACZC,kBAAmB,sCACnBhD,SAAU,cACVC,YAAa,mBACbgD,aAAc,kCAElBC,aAAc,CACV/iC,KAAM,QACNgjC,UAAW,GACX9C,IAAK,4BACL+C,UAAW,mCAEfC,WAAY,CACRljC,KAAM,GACN4P,KAAM,QACN+wB,YAAa,UACbQ,WAAY,yBACZG,cAAe,YACfN,MAAO,GACPI,aAAc,GACdC,YAAa,GACbE,aAAc,gCACdC,kBAAmB,YACnBC,MAAO,qCACP0B,YAAa,+CACbzB,OAAQ,sBAEZ0B,YAAa,CACTpjC,KAAM,YACN4P,KAAM,cACN+wB,YAAa,UACbQ,WAAY,0BACZH,MAAO,oBACPK,YAAa,2BACbQ,MAAO,oBACPwB,SAAU,mBACVF,YAAa,yBAEjBG,OAAQ,CACJtjC,KAAM,YACN4P,KAAM,gCACN2zB,SAAU,SACVC,QAAS,uBACTH,SAAU,wBACVI,QAAS,uBACTC,SAAU,IAEd92B,KAAM,eACNsmB,WAAY,eACZyQ,KAAM,CACF3jC,KAAM,mDACN4jC,iBAAkB,GAClBjE,QAAS,oBACTkE,aAAc,0BACdC,UAAW,kBACXC,WAAY,mBACZC,cAAe,YACfC,cAAe,YACfC,eAAgB,YAChBC,mBAAoB,aAExBG,aAAc,CACVtkC,KAAM,qCACNukC,SAAU,kBACVpB,YAAa,gBAEjBqB,SAAU,CACNxkC,KAAM,GACNykC,OAAQ,mBACR3uB,MAAO,qBACP4uB,QAAS,sBACTC,gBAAiB,IAErBC,OAAQ,CACJ5kC,KAAM,gBACN++B,KAAM,aACNxP,OAAQ,CACJvvB,KAAM,0BACNmwB,MAAO,YACPkS,OAAQ,uBACRwC,eAAgB,4CAChBC,gBAAiB,iDAI7BmvD,EAA2C,KAAqB,qBAAuBI,GAKjF,SAAUn0F,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIyzF,EAA6CzzF,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqyF,KAEnG,IAAIA,EAAY,CACZt0F,KAAM,iBACNgnB,UAAW,sBACXuI,OAAQ,sCACRwP,KAAM,UACNC,UAAW,yBACXC,OAAQ,wCACR9O,MAAO,GACPpb,YAAa,GACbmqB,KAAM,UACNC,UAAW,iBACXC,WAAY,kBACZC,iBAAkB,GAClBC,cAAe,mBACfC,WAAY,CACRC,SAAU,iCACVC,KAAM,6BACNC,KAAM,6BACN/nB,MAAO,8BACPgoB,QAAS,gCACTC,KAAM,8BAEVS,MAAO,CACHlQ,MAAO,2BACPmQ,gBAAiB,8BACjBvrB,YAAa,uCACbiS,UAAW,yBACX+I,QAAS,oBACTwQ,KAAM,iBACNC,aAAc,2BACdvB,OAAQ,oBAEZyD,aAAc,CACV1iC,KAAM,kBACNu/B,WAAY,8BACZpP,MAAO,8BACPkS,OAAQ,SACRE,aAAc,8BACdD,UAAW,2BACXo+C,YAAa,2DACbC,eAAgB,8DAChBh+C,WAAY,4BACZC,WAAY,4BACZC,kBAAmB,sCACnBhD,SAAU,cACVC,YAAa,mBACbgD,aAAc,iCACdyxD,UAAW,8BAEf10D,SAAU,gCACVC,YAAa,mBACbgD,aAAc,oBACd/C,kBAAmB,YACnBnL,KAAM,CACF50B,KAAM,wBACNmwB,MAAO,0BACPpb,YAAa,uCAEjBirB,UAAW,0BACXC,gBAAiB,sCACjBC,IAAK,qBACLpjB,SAAU,CACNiS,SAAU,+BACVD,SAAU,sDACVsR,OAAQ,iBACR7Q,OAAQ,sBACRG,WAAY,sCACZD,UAAW,qCACXG,aAAc,wCACdG,QAAS,uBACTC,YAAa,6BACbf,cAAe,GACfsB,cAAe,6BACfF,aAAc,4BACdF,MAAO,8BACP2H,aAAc,6BACd/c,OAAQ,mBACRhG,YAAa,0CACbq/E,sBAAuB,0CACvB5/D,QAAS,aACT3D,SAAU,wBACVE,cAAe,+BACfK,OAAQ,GACR6N,OAAQ,sBACRkB,UAAW,0BACXjR,SAAU,GACVwU,SAAU,yBAEd7B,MAAO,CAAE7hC,KAAM,WAAY6hC,MAAO,kBAClC/rB,MAAO,CACH9V,KAAM,qBACNugC,KAAM,GACN3wB,KAAM,GACN+gB,YAAa,oCACbC,eAAgB,wCAEpBsQ,SAAU,CACNlhC,KAAM,gBACN4P,KAAM,0CACNixB,aAAc,0CACdF,YAAa,uBACb43C,UAAW,0BACXp3C,WAAY,8BACZH,MAAO,uBACPI,aAAc,GACdC,YAAa,qCACbC,cAAe,gCACfC,aAAc,yBACdC,kBAAmB,4CACnBC,MAAO,gCACPC,OAAQ,yBAEZwB,WAAY,CACRljC,KAAM,gBACN4P,KAAM,uCACNuxB,WAAY,8BACZH,MAAO,uBACPI,aAAc,GACdP,aAAc,uCACdF,YAAa,oBACb43C,UAAW,uBACXl3C,YAAa,qCACbC,cAAe,6BACfC,aAAc,yBACdC,kBAAmB,yCACnBC,MAAO,gCACP0B,YAAa,kCACbzB,OAAQ,yBAEZjB,QAAS,CACLzgC,KAAM,GACNmvB,MAAO,0BACPvf,KAAM,qBACN8wB,QAAS,oBACTC,YAAa,sBACbC,kBAAmB,4BACnBC,aAAc,yCACdC,OAAQ,qBACRC,OAAQ,qBACRC,MAAO,qBACPC,cAAe,+BAEnBr0B,KAAM,CACF5M,KAAM,UACNmvB,MAAO,0BACPoC,QAAS,kBAEbwR,aAAc,CACV/iC,KAAM,kBACN4P,KAAM,wBACNozB,UAAW,8BACX9C,IAAK,uBACLiC,KAAM,yBAEVR,SAAU,CACN3hC,KAAM,GACNmvB,MAAO,0BACPuR,QAAS,cACTkB,cAAe,GACfH,MAAO,gCACPlQ,QAAS,sBAEb6R,YAAa,CACTpjC,KAAM,iBACN4P,KAAM,uBACNuxB,WAAY,+BACZR,YAAa,gCACbE,aAAc,iCACd03C,UAAW,mCACXv3C,MAAO,wBACPK,YAAa,0BACbQ,MAAO,wBACPwB,SAAU,uBACVF,YAAa,SACb1B,MAAO,iCAEXK,OAAQ,CACJ0yD,aAAc,YACdx0F,KAAM,WACNmiC,KAAM,iCACNsyD,WAAY,wCACZzzD,MAAO,oCACPiC,UAAW,uDACXtC,YAAa,oBACbE,aAAc,uCACd03C,UAAW,uBACX/2C,kBAAmB,yCACnBF,cAAe,6BACfS,SAAU,kBACVC,iBAAkB,2BAClBk8C,iBAAkB,6BAEtBh8C,eAAgB,CACZliC,KAAM,WACNmiC,KAAM,iBACNsyD,WAAY,yCAEhBryD,cAAe,CACXpiC,KAAM,4BACNmiC,KAAM,iBACNsyD,WAAY,wCACZpyD,OAAQ,SACRC,UAAW,4BACXC,aAAc,+BACdC,QAAS,GACTC,WAAY,IAEhBa,OAAQ,CACJtjC,KAAM,YACN4P,KAAM,kBACN2zB,SAAU,4BACVC,QAAS,sBACTH,SAAU,uBACVI,QAAS,sBACTC,SAAU,uBAEdlP,QAAS,CACLx0B,KAAM,aACNmvB,MAAO,2BAEX+D,WAAY,GACZyQ,KAAM,CACF3jC,KAAM,UACNyhC,MAAO,gCACPmC,iBAAkB,oBAClBjE,QAAS,mBACT+0D,SAAU,YACVxwD,eAAgB,gBAChBD,cAAe,qBACfH,UAAW,oBACXO,aAAc,yCACdD,WAAY,6BACZV,SAAU,gCACVG,aAAc,YACdM,mBAAoB,4BACpBJ,WAAY,YACZC,cAAe,sBACf2wD,QAAS,oBAEbrwD,aAAc,CACVtkC,KAAM,mCACNmvB,MAAO,0BACPoV,SAAU,kBACVpB,YAAa,gBAEjBqB,SAAU,CACNxkC,KAAM,GACNykC,OAAQ,GACR3uB,MAAO,GACP4uB,QAAS,GACTC,gBAAiB,IAErBC,OAAQ,CACJ5kC,KAAM,YACN++B,KAAM,oBACNxP,OAAQ,CACJvvB,KAAM,kBACNmwB,MAAO,GACPkS,OAAQ,GACRwC,eAAgB,GAChBC,gBAAiB,MAI7BmvD,EAA2C,KAAqB,UAAYK,GAKtE,SAAUp0F,EAAQ+B,EAAqBzB,GAE7C,aAC8EA,EAAoB,KACjBA,EAAoB,KACtBA,EAAoB,KACtBA,EAAoB,KACnBA,EAAoB,KACrBA,EAAoB,KACjBA,EAAoB,KACrBA,EAAoB,KACrBA,EAAoB,KAClBA,EAAoB,KACrBA,EAAoB,KACrBA,EAAoB,KACnBA,EAAoB,KACjBA,EAAoB,KACpBA,EAAoB,KACnBA,EAAoB,KACvBA,EAAoB,KACnBA,EAAoB,KACtBA,EAAoB,KACnBA,EAAoB,KACjBA,EAAoB,KACrBA,EAAoB,KACtBA,EAAoB,KACrBA,EAAoB,KAChBA,EAAoB,KACtBA,EAAoB,KACrBA,EAAoB,KACTA,EAAoB,KAC/BA,EAAoB,KACpBA,EAAoB,KACvBA,EAAoB,KACjBA,EAAoB,KACRA,EAAoB,KAC9BA,EAAoB,KACxBA,EAAoB,KAClBA,EAAoB,MAyC9F,SAAUN,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIo0F,EAA2Cp0F,EAAoB,KAE/Dq0F,GADmDr0F,EAAoBiB,EAAEmzF,GAC5Bp0F,EAAoB,MAEjEioC,GADqDjoC,EAAoBiB,EAAEozF,GACjCr0F,EAAoB,KACtDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwmC,EAAwC,QACxH,IAAI1D,EAAyCvkC,EAAoB,GACrDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8iC,EAAuC,QACvH,IAAI+vD,EAA2Ct0F,EAAoB,IACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QAC7Gt0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6yF,EAAyC,QACzH,IAAIvD,EAA2C/wF,EAAoB,IACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOsvF,EAAyC,QACzH,IAAIwD,EAAsCv0F,EAAoB,GAClDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8yF,EAAoC,QACxGv0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8yF,EAAoC,QACxGv0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8yF,EAAoC,QACxGv0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8yF,EAAoC,QACpH,IAAIC,EAAiDx0F,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO+yF,EAA+C,QAC/H,IAAIC,EAAuCz0F,EAAoB,IACnDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgzF,EAAqC,QACzGz0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgzF,EAAqC,QACzGz0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgzF,EAAqC,QACzGz0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgzF,EAAqC,QACzGz0F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgzF,EAAqC,QACrH,IAAIxxC,EAAmDjjD,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwhD,EAAiD,QACjI,IAAIyxC,EAAkD10F,EAAoB,KAC9DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOizF,EAAgD,QACpH10F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOizF,EAAgD,QAChI,IAAIC,EAAkD30F,EAAoB,IAC9DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOkzF,EAAgD,QAChI,IAAIC,EAAmD50F,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmzF,EAAiD,QACrH50F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmzF,EAAiD,QACjI,IAAIC,EAA6C70F,EAAoB,IACzDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOozF,EAA2C,QAC/G70F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOozF,EAA2C,QAC3H,IAAIC,EAA0D90F,EAAoB,IACtEA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QAC5H90F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QAC5H90F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QAC5H90F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QAC5H90F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QAC5H90F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqzF,EAAwD,QACxI,IAAIC,EAAmD/0F,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOszF,EAAiD,QACjI,IAAIC,EAAwDh1F,EAAoB,IACpEA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOuzF,EAAsD,QACtI,IAAIC,EAA6Cj1F,EAAoB,GACzDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC/Gj1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOwzF,EAA2C,QAC3H,IAAIC,EAA8Dl1F,EAAoB,IAC1EA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOyzF,EAA4D,QAChIl1F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOyzF,EAA4D,QAChIl1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAOyzF,EAA4D,QACjIl1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAOyzF,EAA4D,QACjIl1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAOyzF,EAA4D,QAC7I,IAAIC,EAA0Dn1F,EAAoB,KACtEA,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO0zF,EAAwD,QAC7Hn1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO0zF,EAAwD,QACzI,IAAIC,EAAyDp1F,EAAoB,KACrEA,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO2zF,EAAuD,QAC5Hp1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO2zF,EAAuD,QACxI,IAAIC,EAAkDr1F,EAAoB,KAC9DA,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO4zF,EAAgD,QACrHr1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO4zF,EAAgD,QACrHr1F,EAAoBQ,EAAEiB,EAAqB,MAAM,WAAa,OAAO4zF,EAAgD,QACjI,IAAIC,EAAwDt1F,EAAoB,KACpEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO6zF,EAAsD,QAC5Ht1F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO6zF,EAAsD,QACxI,IAAIC,EAAwCv1F,EAAoB,IACpDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO8zF,EAAsC,QAC5Gv1F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO8zF,EAAsC,QAC5Gv1F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO8zF,EAAsC,QACxH,IAAIC,EAA4Cx1F,EAAoB,KACxDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO+zF,EAA0C,QAC5H,IAAIC,EAAuCz1F,EAAoB,IACnDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOg0F,EAAqC,QACvH,IAAIC,EAA2C11F,EAAoB,IACvDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOi0F,EAAyC,QAC3H,IAAIC,EAAmD31F,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOk0F,EAAiD,QACnI,IAAIC,EAAiD51F,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOm0F,EAA+C,QACjI,IAAIC,EAAsD71F,EAAoB,IAClEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOo0F,EAAoD,QAC1H71F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOo0F,EAAoD,QACtI,IAAIC,EAAoD91F,EAAoB,KAChEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOq0F,EAAkD,QACpI,IAAIC,EAAmD/1F,EAAoB,KAC/DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs0F,EAAiD,QACnI,IAAIC,EAAoDh2F,EAAoB,IAChEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOu0F,EAAkD,QACpI,IAAIC,EAAkDj2F,EAAoB,GAC9DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOw0F,EAAgD,QACtHj2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOw0F,EAAgD,QAClI,IAAIC,EAAgDl2F,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOy0F,EAA8C,QAChI,IAAIC,EAAgDn2F,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO00F,EAA8C,QAChI,IAAIC,EAAsDp2F,EAAoB,KAClEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO20F,EAAoD,QACtI,IAAIC,EAAkDr2F,EAAoB,KAC9DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO40F,EAAgD,QAClI,IAAIC,EAAsDt2F,EAAoB,IAClEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO60F,EAAoD,QACtI,IAAIC,EAAgDv2F,EAAoB,IAC5DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO80F,EAA8C,QAChI,IAAIC,EAAmDx2F,EAAoB,KAC/DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO+0F,EAAiD,QACnI,IAAIC,EAAuDz2F,EAAoB,KACnEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOg1F,EAAqD,QACvI,IAAIC,EAAiD12F,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOi1F,EAA+C,QACjI,IAAIC,EAAwD32F,EAAoB,KACpEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOk1F,EAAsD,QACxI,IAAIC,EAAwD52F,EAAoB,KACpEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOm1F,EAAsD,QAC5H52F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOm1F,EAAsD,QACxI,IAAIC,EAA8C72F,EAAoB,IAC1DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOo1F,EAA4C,QAC9H,IAAIC,EAAyC92F,EAAoB,IACrDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOq1F,EAAuC,QACzH,IAAIC,EAA0C/2F,EAAoB,KACtDA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC9G/2F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOs1F,EAAwC,QAC1H,IAAIC,EAA+Ch3F,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOu1F,EAA6C,QAC/H,IAAIC,EAAmDj3F,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOw1F,EAAiD,QACnI,IAAIC,EAAkDl3F,EAAoB,IAC9DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAOy1F,EAAgD,QAClI,IAAIC,GAAuDn3F,EAAoB,IACnEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO01F,GAAqD,QACvI,IAAIC,GAAgDp3F,EAAoB,GAC5DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO21F,GAA8C,QACpHp3F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO21F,GAA8C,QAChI,IAAIC,GAAwDr3F,EAAoB,IACpEA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO41F,GAAsD,QAC5Hr3F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO41F,GAAsD,QACxI,IAAIC,GAAkDt3F,EAAoB,KAC9DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO61F,GAAgD,QACtHt3F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO61F,GAAgD,QACtHt3F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO61F,GAAgD,QACtHt3F,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO61F,GAAgD,QAClI,IAMjBC,GANqBC,GAAgDx3F,EAAoB,IAC5DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO+1F,GAA8C,QACtHx3F,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO81F,MAKnGA,GAAe,UA8DT,SAAU73F,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy3F,EAAgHz3F,EAAoB,IAClHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg2F,EAA8G,QACxM,IAAIC,EAAgN13F,EAAoB,KACpO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy3F,EAA8G,KAC9GC,EAA8M,KAC9MA,EAA8M,KAC9ME,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,sBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi4F,EAAiHj4F,EAAoB,IACnHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw2F,EAA+G,QACzM,IAAIC,EAAiNl4F,EAAoB,KACrO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi4F,EAA+G,KAC/GC,EAA+M,KAC/MA,EAA+M,KAC/MN,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,uBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm4F,EAAqHn4F,EAAoB,IACvHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO02F,EAAmH,QAC7M,IAAIC,EAAqNp4F,EAAoB,KACzO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm4F,EAAmH,KACnHC,EAAmN,KACnNA,EAAmN,KACnNR,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,2BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq4F,EAAgHr4F,EAAoB,IAClHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO42F,EAA8G,QACxM,IAAIC,EAAgNt4F,EAAoB,KACpO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq4F,EAA8G,KAC9GC,EAA8M,KAC9MA,EAA8M,KAC9MV,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,sBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIu4F,EAAkHv4F,EAAoB,IACpHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO82F,EAAgH,QAC1M,IAAIC,EAAkNx4F,EAAoB,KACtO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdu4F,EAAgH,KAChHC,EAAgN,KAChNA,EAAgN,KAChNZ,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,wBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy4F,EAA+Gz4F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg3F,EAA6G,QACvM,IAAIC,EAA+M14F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy4F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7Md,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI24F,EAAqH34F,EAAoB,IACvHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk3F,EAAmH,QAC7M,IAAIC,EAAqN54F,EAAoB,KACzO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd24F,EAAmH,KACnHC,EAAmN,KACnNA,EAAmN,KACnNhB,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,2BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI64F,EAAiH74F,EAAoB,IACnHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo3F,EAA+G,QACzM,IAAIC,EAAiN94F,EAAoB,KACrO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd64F,EAA+G,KAC/GC,EAA+M,KAC/MA,EAA+M,KAC/MlB,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,uBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI+4F,EAAgH/4F,EAAoB,IAClHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs3F,EAA8G,QACxM,IAAIC,EAAgNh5F,EAAoB,KACpO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd+4F,EAA8G,KAC9GC,EAA8M,KAC9MA,EAA8M,KAC9MpB,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,sBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi5F,EAAsHj5F,EAAoB,IACxHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw3F,EAAoH,QAC9M,IAAIC,EAAsNl5F,EAAoB,KAC1O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi5F,EAAoH,KACpHC,EAAoN,KACpNA,EAAoN,KACpNtB,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,4BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm5F,EAA8Gn5F,EAAoB,IAChHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO03F,EAA4G,QACtM,IAAIC,EAA8Mp5F,EAAoB,KAClO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm5F,EAA4G,KAC5GC,EAA4M,KAC5MA,EAA4M,KAC5MxB,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,oBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq5F,EAA+Gr5F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO43F,EAA6G,QACvM,IAAIC,EAA+Mt5F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq5F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7M1B,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIu5F,EAAmHv5F,EAAoB,IACrHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO83F,EAAiH,QAC3M,IAAIC,EAAmNx5F,EAAoB,KACvO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdu5F,EAAiH,KACjHC,EAAiN,KACjNA,EAAiN,KACjN5B,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,yBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy5F,EAA6Gz5F,EAAoB,IAC/GA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg4F,EAA2G,QACrM,IAAIC,EAA6M15F,EAAoB,KACjO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy5F,EAA2G,KAC3GC,EAA2M,KAC3MA,EAA2M,KAC3M9B,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,mBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI25F,EAAkH35F,EAAoB,IACpHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk4F,EAAgH,QAC1M,IAAIC,EAAkN55F,EAAoB,KACtO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd25F,EAAgH,KAChHC,EAAgN,KAChNA,EAAgN,KAChNhC,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,wBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI65F,EAAyH75F,EAAoB,IAC3HA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo4F,EAAuH,QACjN,IAAIC,EAAyN95F,EAAoB,KAC7O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd65F,EAAuH,KACvHC,EAAuN,KACvNA,EAAuN,KACvNlC,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,+BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI+5F,EAA+G/5F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs4F,EAA6G,QACvM,IAAIC,EAA+Mh6F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd+5F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7MpC,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi6F,EAA6Gj6F,EAAoB,IAC/GA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw4F,EAA2G,QACrM,IAAIC,EAA6Ml6F,EAAoB,KACjO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi6F,EAA2G,KAC3GC,EAA2M,KAC3MA,EAA2M,KAC3MtC,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,mBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm6F,EAA8Gn6F,EAAoB,IAChHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO04F,EAA4G,QACtM,IAAIC,EAA8Mp6F,EAAoB,KAClO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm6F,EAA4G,KAC5GC,EAA4M,KAC5MA,EAA4M,KAC5MxC,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,oBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq6F,EAAoHr6F,EAAoB,IACtHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO44F,EAAkH,QAC5M,IAAIC,EAAoNt6F,EAAoB,KACxO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq6F,EAAkH,KAClHC,EAAkN,KAClNA,EAAkN,KAClN1C,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,0BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIu6F,EAA+Gv6F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO84F,EAA6G,QACvM,IAAIC,EAA+Mx6F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdu6F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7M5C,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy6F,EAAmHz6F,EAAoB,IACrHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg5F,EAAiH,QAC3M,IAAIC,EAAmN16F,EAAoB,KACvO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy6F,EAAiH,KACjHC,EAAiN,KACjNA,EAAiN,KACjN9C,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,yBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI26F,EAAuH36F,EAAoB,IACzHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk5F,EAAqH,QAC/M,IAAIC,EAAuN56F,EAAoB,KAC3O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd26F,EAAqH,KACrHC,EAAqN,KACrNA,EAAqN,KACrNhD,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,6BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI66F,EAAsH76F,EAAoB,IACxHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo5F,EAAoH,QAC9M,IAAIC,EAAsN96F,EAAoB,KAC1O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd66F,EAAoH,KACpHC,EAAoN,KACpNA,EAAoN,KACpNlD,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,4BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI+6F,EAAoH/6F,EAAoB,IACtHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs5F,EAAkH,QAC5M,IAAIC,EAAoNh7F,EAAoB,KACxO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd+6F,EAAkH,KAClHC,EAAkN,KAClNA,EAAkN,KAClNpD,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,0BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi7F,EAAqHj7F,EAAoB,IACvHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw5F,EAAmH,QAC7M,IAAIC,EAAqNl7F,EAAoB,KACzO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi7F,EAAmH,KACnHC,EAAmN,KACnNA,EAAmN,KACnNtD,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,2BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm7F,EAAmHn7F,EAAoB,IACrHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO05F,EAAiH,QAC3M,IAAIC,EAAmNp7F,EAAoB,KACvO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm7F,EAAiH,KACjHC,EAAiN,KACjNA,EAAiN,KACjNxD,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,yBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq7F,EAAoHr7F,EAAoB,IACtHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO45F,EAAkH,QAC5M,IAAIC,EAAoNt7F,EAAoB,KACxO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq7F,EAAkH,KAClHC,EAAkN,KAClNA,EAAkN,KAClN1D,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,0BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIu7F,EAA6Gv7F,EAAoB,IAC/GA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO85F,EAA2G,QACrM,IAAIC,EAA6Mx7F,EAAoB,KACjO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdu7F,EAA2G,KAC3GC,EAA2M,KAC3MA,EAA2M,KAC3M5D,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,mBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy7F,EAA8Gz7F,EAAoB,IAChHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg6F,EAA4G,QACtM,IAAIC,EAA8M17F,EAAoB,KAClO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy7F,EAA4G,KAC5GC,EAA4M,KAC5MA,EAA4M,KAC5M9D,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,oBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI27F,EAAqH37F,EAAoB,IACvHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk6F,EAAmH,QAC7M,IAAIC,EAAqN57F,EAAoB,KACzO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd27F,EAAmH,KACnHC,EAAmN,KACnNA,EAAmN,KACnNhE,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,2BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI67F,EAA6H77F,EAAoB,IAC/HA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo6F,EAA2H,QACrN,IAAIC,EAA6N97F,EAAoB,KACjP23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd67F,EAA2H,KAC3HC,EAA2N,KAC3NA,EAA2N,KAC3NlE,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,mCAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI+7F,EAA2H/7F,EAAoB,IAC7HA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs6F,EAAyH,QACnN,IAAIC,EAA2Nh8F,EAAoB,KAC/O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd+7F,EAAyH,KACzHC,EAAyN,KACzNA,EAAyN,KACzNpE,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,iCAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi8F,EAAiHj8F,EAAoB,IACnHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw6F,EAA+G,QACzM,IAAIC,EAAiNl8F,EAAoB,KACrO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi8F,EAA+G,KAC/GC,EAA+M,KAC/MA,EAA+M,KAC/MtE,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,uBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm8F,EAAmHn8F,EAAoB,IACrHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO06F,EAAiH,QAC3M,IAAIC,EAAmNp8F,EAAoB,KACvO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm8F,EAAiH,KACjHC,EAAiN,KACjNA,EAAiN,KACjNxE,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,yBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq8F,EAAuHr8F,EAAoB,IACzHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO46F,EAAqH,QAC/M,IAAIC,EAAuNt8F,EAAoB,KAC3O23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq8F,EAAqH,KACrHC,EAAqN,KACrNA,EAAqN,KACrN1E,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,6BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIu8F,EAA+Gv8F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO86F,EAA6G,QACvM,IAAIC,EAA+Mx8F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdu8F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7M5E,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIy8F,EAA4Gz8F,EAAoB,IAC9GA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg7F,EAA0G,QACpM,IAAIC,EAA4M18F,EAAoB,KAChO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdy8F,EAA0G,KAC1GC,EAA0M,KAC1MA,EAA0M,KAC1M9E,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,kBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI28F,EAAqH38F,EAAoB,IACvHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk7F,EAAmH,QAC7M,IAAIC,EAAqN58F,EAAoB,KACzO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd28F,EAAmH,KACnHC,EAAmN,KACnNA,EAAmN,KACnNhF,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,2BAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI68F,EAA+G78F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo7F,EAA6G,QACvM,IAAIC,EAA+M98F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd68F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7MlF,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAI+8F,EAA+G/8F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs7F,EAA6G,QACvM,IAAIC,EAA+Mh9F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACd+8F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7MpF,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIi9F,EAA6Gj9F,EAAoB,IAC/GA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOw7F,EAA2G,QACrM,IAAIC,EAA6Ml9F,EAAoB,KACjO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdi9F,EAA2G,KAC3GC,EAA2M,KAC3MA,EAA2M,KAC3MtF,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,mBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIm9F,EAAmHn9F,EAAoB,IACrHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO07F,EAAiH,QAC3M,IAAIC,EAAmNp9F,EAAoB,KACvO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdm9F,EAAiH,KACjHC,EAAiN,KACjNA,EAAiN,KACjNxF,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,yBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIq9F,EAA+Gr9F,EAAoB,IACjHA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO47F,EAA6G,QACvM,IAAIC,EAA+Mt9F,EAAoB,KACnO23F,EAA0F33F,EAAoB,GAQnI43F,GAA8B,EAE9BC,EAAiB,KAEjBC,EAAkB,KAElBC,EAA4B,KAE5BzxF,EAAYtG,EAAoBE,EAAEy3F,EAAwF,KAA9G33F,CACdq9F,EAA6G,KAC7GC,EAA6M,KAC7MA,EAA6M,KAC7M1F,EACAC,EACAC,EACAC,GAEFzxF,EAAUd,QAAQwyF,OAAS,qBAkB8C1xF,EAAU3G,SAK7E,SAAUD,EAAQC,KAMlB,SAAUD,EAAQC,KAMlB,SAAUD,EAAQC,EAASK,IAEL,SAASu7C,EAASgiD;;;;;;;;;;;;;;;AAc9C,IAAI56F,GACJ,SAAWA,IAGP,SAAWlD,GACP,IAAID,EAAyB,kBAAX+9F,EAAsBA,EACpB,kBAATr8E,KAAoBA,KACP,kBAATthB,KAAoBA,KACvB49F,SAAS,eAATA,GACRC,EAAWC,EAAa/6F,GAQ5B,SAAS+6F,EAAa57F,EAAQ67F,GAC1B,OAAO,SAAUp7F,EAAKhC,GACS,oBAAhBuB,EAAOS,IACd3B,OAAOC,eAAeiB,EAAQS,EAAK,CAAEzB,cAAc,EAAM88F,UAAU,EAAMr9F,MAAOA,IAEhFo9F,GACAA,EAASp7F,EAAKhC,IAbE,qBAAjBf,EAAKmD,QACZnD,EAAKmD,QAAUA,EAGf86F,EAAWC,EAAal+F,EAAKmD,QAAS86F,GAE1Ch+F,EAAQg+F,IAZZ,EAsBG,SAAUA,GACT,IAAII,EAASj9F,OAAOS,UAAUC,eAE1Bw8F,EAAmC,oBAAXC,OACxBC,EAAoBF,GAAgD,qBAAvBC,OAAOE,YAA8BF,OAAOE,YAAc,gBACvGC,EAAiBJ,GAA6C,qBAApBC,OAAOI,SAA2BJ,OAAOI,SAAW,aAC9FC,EAA0C,oBAAlBx9F,OAAOyB,OAC/Bg8F,EAAgB,CAAEC,UAAW,cAAgBx7F,MAC7Cy7F,GAAaH,IAAmBC,EAChCG,EAAU,CAEVn8F,OAAQ+7F,EACF,WAAc,OAAOK,GAAe79F,OAAOyB,OAAO,QAClDg8F,EACI,WAAc,OAAOI,GAAe,CAAEH,UAAW,QACjD,WAAc,OAAOG,GAAe,KAC9CC,IAAKH,EACC,SAAUlsF,EAAK9P,GAAO,OAAOs7F,EAAOz9F,KAAKiS,EAAK9P,IAC9C,SAAU8P,EAAK9P,GAAO,OAAOA,KAAO8P,GAC1CrR,IAAKu9F,EACC,SAAUlsF,EAAK9P,GAAO,OAAOs7F,EAAOz9F,KAAKiS,EAAK9P,GAAO8P,EAAI9P,QAAO6B,GAChE,SAAUiO,EAAK9P,GAAO,OAAO8P,EAAI9P,KAGvCo8F,EAAoB/9F,OAAO8gB,eAAe87E,UAC1CoB,EAAiC,kBAAZrjD,GAAwBA,EAAQ65B,KAA4D,SAArD75B,EAAQ65B,IAAI,qCACxEypB,EAAQD,GAA8B,oBAARE,KAAuD,oBAA1BA,IAAIz9F,UAAU09F,QAA+BC,KAANF,IAClGG,EAAQL,GAA8B,oBAARM,KAAuD,oBAA1BA,IAAI79F,UAAU09F,QAA+BI,KAAND,IAClGE,EAAYR,GAAkC,oBAAZS,QAAmCC,KAAVD,QAG3DE,EAAW,IAAIH,EAwCnB,SAASx8F,EAASN,EAAYR,EAAQ09F,EAAaC,GAC/C,GAAKC,EAAYF,GAYZ,CACD,IAAKG,EAAQr9F,GACT,MAAM,IAAIs9F,UACd,IAAKC,EAAc/9F,GACf,MAAM,IAAI89F,UACd,OAAOE,EAAoBx9F,EAAYR,GAhBvC,IAAK69F,EAAQr9F,GACT,MAAM,IAAIs9F,UACd,IAAKG,EAASj+F,GACV,MAAM,IAAI89F,UACd,IAAKG,EAASN,KAAgBC,EAAYD,KAAgBO,EAAOP,GAC7D,MAAM,IAAIG,UAId,OAHII,EAAOP,KACPA,OAAar7F,GACjBo7F,EAAcS,EAAcT,GACrBU,EAAiB59F,EAAYR,EAAQ09F,EAAaC,GAqDjE,SAAS/5F,EAASy6F,EAAaC,GAC3B,SAASC,EAAUv+F,EAAQ09F,GACvB,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UACd,IAAKF,EAAYF,KAAiBc,EAAcd,GAC5C,MAAM,IAAII,UACdW,EAA0BJ,EAAaC,EAAet+F,EAAQ09F,GAElE,OAAOa,EA0CX,SAASG,EAAeL,EAAaC,EAAet+F,EAAQ09F,GACxD,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzBe,EAA0BJ,EAAaC,EAAet+F,EAAQ09F,GAqCzE,SAASiB,EAAYN,EAAar+F,EAAQ09F,GACtC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzBkB,EAAoBP,EAAar+F,EAAQ09F,GAqCpD,SAASmB,EAAeR,EAAar+F,EAAQ09F,GACzC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzBoB,EAAuBT,EAAar+F,EAAQ09F,GAqCvD,SAAS75F,EAAYw6F,EAAar+F,EAAQ09F,GACtC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzBqB,EAAoBV,EAAar+F,EAAQ09F,GAqCpD,SAASsB,EAAeX,EAAar+F,EAAQ09F,GACzC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzBuB,EAAuBZ,EAAar+F,EAAQ09F,GAoCvD,SAASwB,EAAgBl/F,EAAQ09F,GAC7B,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzByB,EAAqBn/F,EAAQ09F,GAoCxC,SAAS0B,EAAmBp/F,EAAQ09F,GAChC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UAGd,OAFKF,EAAYF,KACbA,EAAcS,EAAcT,IACzB2B,EAAwBr/F,EAAQ09F,GAqC3C,SAAS4B,EAAejB,EAAar+F,EAAQ09F,GACzC,IAAKO,EAASj+F,GACV,MAAM,IAAI89F,UACTF,EAAYF,KACbA,EAAcS,EAAcT,IAChC,IAAI6B,EAAcC,EAAuBx/F,EAAQ09F,GAAwB,GACzE,GAAIE,EAAY2B,GACZ,OAAO,EACX,IAAKA,EAAYr7E,OAAOm6E,GACpB,OAAO,EACX,GAAIkB,EAAYE,KAAO,EACnB,OAAO,EACX,IAAIC,EAAiBjC,EAASv+F,IAAIc,GAElC,OADA0/F,EAAex7E,OAAOw5E,GAClBgC,EAAeD,KAAO,GAE1BhC,EAASv5E,OAAOlkB,IADL,EAKf,SAASg+F,EAAoBx9F,EAAYR,GACrC,IAAK,IAAI5B,EAAIoC,EAAWN,OAAS,EAAG9B,GAAK,IAAKA,EAAG,CAC7C,IAAImgG,EAAY/9F,EAAWpC,GACvBuhG,EAAYpB,EAAUv+F,GAC1B,IAAK49F,EAAY+B,KAAezB,EAAOyB,GAAY,CAC/C,IAAK5B,EAAc4B,GACf,MAAM,IAAI7B,UACd99F,EAAS2/F,GAGjB,OAAO3/F,EAEX,SAASo+F,EAAiB59F,EAAYR,EAAQ09F,EAAakC,GACvD,IAAK,IAAIxhG,EAAIoC,EAAWN,OAAS,EAAG9B,GAAK,IAAKA,EAAG,CAC7C,IAAImgG,EAAY/9F,EAAWpC,GACvBuhG,EAAYpB,EAAUv+F,EAAQ09F,EAAakC,GAC/C,IAAKhC,EAAY+B,KAAezB,EAAOyB,GAAY,CAC/C,IAAK1B,EAAS0B,GACV,MAAM,IAAI7B,UACd8B,EAAaD,GAGrB,OAAOC,EAEX,SAASJ,EAAuBK,EAAGC,EAAGC,GAClC,IAAIL,EAAiBjC,EAASv+F,IAAI2gG,GAClC,GAAIjC,EAAY8B,GAAiB,CAC7B,IAAKK,EACD,OACJL,EAAiB,IAAI3C,EACrBU,EAASl0F,IAAIs2F,EAAGH,GAEpB,IAAIH,EAAcG,EAAexgG,IAAI4gG,GACrC,GAAIlC,EAAY2B,GAAc,CAC1B,IAAKQ,EACD,OACJR,EAAc,IAAIxC,EAClB2C,EAAen2F,IAAIu2F,EAAGP,GAE1B,OAAOA,EAIX,SAASX,EAAoBoB,EAAaH,EAAGC,GACzC,IAAI/D,EAAS+C,EAAuBkB,EAAaH,EAAGC,GACpD,GAAI/D,EACA,OAAO,EACX,IAAIr2F,EAASu6F,GAAuBJ,GACpC,OAAK3B,EAAOx4F,IACDk5F,EAAoBoB,EAAat6F,EAAQo6F,GAKxD,SAAShB,EAAuBkB,EAAaH,EAAGC,GAC5C,IAAIP,EAAcC,EAAuBK,EAAGC,GAAc,GAC1D,OAAIlC,EAAY2B,IAETW,EAAUX,EAAY3C,IAAIoD,IAIrC,SAASjB,EAAoBiB,EAAaH,EAAGC,GACzC,IAAI/D,EAAS+C,EAAuBkB,EAAaH,EAAGC,GACpD,GAAI/D,EACA,OAAOkD,EAAuBe,EAAaH,EAAGC,GAClD,IAAIp6F,EAASu6F,GAAuBJ,GACpC,OAAK3B,EAAOx4F,QAAZ,EACWq5F,EAAoBiB,EAAat6F,EAAQo6F,GAKxD,SAASb,EAAuBe,EAAaH,EAAGC,GAC5C,IAAIP,EAAcC,EAAuBK,EAAGC,GAAc,GAC1D,IAAIlC,EAAY2B,GAEhB,OAAOA,EAAYrgG,IAAI8gG,GAI3B,SAASvB,EAA0BuB,EAAaG,EAAeN,EAAGC,GAC9D,IAAIP,EAAcC,EAAuBK,EAAGC,GAAc,GAC1DP,EAAYh2F,IAAIy2F,EAAaG,GAIjC,SAAShB,EAAqBU,EAAGC,GAC7B,IAAIM,EAAUf,EAAwBQ,EAAGC,GACrCp6F,EAASu6F,GAAuBJ,GACpC,GAAe,OAAXn6F,EACA,OAAO06F,EACX,IAAIC,EAAalB,EAAqBz5F,EAAQo6F,GAC9C,GAAIO,EAAWngG,QAAU,EACrB,OAAOkgG,EACX,GAAIA,EAAQlgG,QAAU,EAClB,OAAOmgG,EAGX,IAFA,IAAI92F,EAAM,IAAI4zF,EACV7sF,EAAO,GACF2P,EAAK,EAAGqgF,EAAYF,EAASngF,EAAKqgF,EAAUpgG,OAAQ+f,IAAM,CAC/D,IAAIxf,EAAM6/F,EAAUrgF,GAChBsgF,EAASh3F,EAAIqzF,IAAIn8F,GAChB8/F,IACDh3F,EAAI1D,IAAIpF,GACR6P,EAAK7N,KAAKhC,IAGlB,IAAK,IAAIyD,EAAK,EAAGs8F,EAAeH,EAAYn8F,EAAKs8F,EAAatgG,OAAQgE,IAAM,CACpEzD,EAAM+/F,EAAat8F,GACnBq8F,EAASh3F,EAAIqzF,IAAIn8F,GAChB8/F,IACDh3F,EAAI1D,IAAIpF,GACR6P,EAAK7N,KAAKhC,IAGlB,OAAO6P,EAIX,SAAS+uF,EAAwBQ,EAAGC,GAChC,IAAIxvF,EAAO,GACPivF,EAAcC,EAAuBK,EAAGC,GAAc,GAC1D,GAAIlC,EAAY2B,GACZ,OAAOjvF,EACX,IAAImwF,EAAUlB,EAAYjvF,OACtB+rF,EAAWqE,EAAYD,GACvBx/F,EAAI,EACR,MAAO,EAAM,CACT,IAAIm8B,EAAOujE,EAAatE,GACxB,IAAKj/D,EAED,OADA9sB,EAAKpQ,OAASe,EACPqP,EAEX,IAAIswF,EAAYC,EAAczjE,GAC9B,IACI9sB,EAAKrP,GAAK2/F,EAEd,MAAO9vD,GACH,IACIgwD,GAAczE,GAElB,QACI,MAAMvrD,GAGd7vC,KAKR,SAAS8/F,EAAKrrF,GACV,GAAU,OAANA,EACA,OAAO,EACX,cAAeA,GACX,IAAK,YAAa,OAAO,EACzB,IAAK,UAAW,OAAO,EACvB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAO,EACtB,IAAK,SAAU,OAAa,OAANA,EAAa,EAAe,EAClD,QAAS,OAAO,GAKxB,SAASkoF,EAAYloF,GACjB,YAAapT,IAANoT,EAIX,SAASwoF,EAAOxoF,GACZ,OAAa,OAANA,EAIX,SAASsrF,EAAStrF,GACd,MAAoB,kBAANA,EAIlB,SAASuoF,EAASvoF,GACd,MAAoB,kBAANA,EAAuB,OAANA,EAA0B,oBAANA,EAMvD,SAASurF,EAAYC,EAAOC,GACxB,OAAQJ,EAAKG,IACT,KAAK,EAAmB,OAAOA,EAC/B,KAAK,EAAc,OAAOA,EAC1B,KAAK,EAAiB,OAAOA,EAC7B,KAAK,EAAgB,OAAOA,EAC5B,KAAK,EAAgB,OAAOA,EAC5B,KAAK,EAAgB,OAAOA,EAEhC,IAAIE,EAAyB,IAAlBD,EAAmC,SAA6B,IAAlBA,EAAmC,SAAW,UACnGE,EAAeC,EAAUJ,EAAOhF,GACpC,QAAqB55F,IAAjB++F,EAA4B,CAC5B,IAAIh/F,EAASg/F,EAAa/iG,KAAK4iG,EAAOE,GACtC,GAAInD,EAAS57F,GACT,MAAM,IAAIy7F,UACd,OAAOz7F,EAEX,OAAOk/F,EAAoBL,EAAgB,YAATE,EAAqB,SAAWA,GAItE,SAASG,EAAoB1B,EAAGuB,GAC5B,GAAa,WAATA,EAAmB,CACnB,IAAII,EAAa3B,EAAE5rF,SACnB,GAAIwtF,EAAWD,GAAa,CACxB,IAAIn/F,EAASm/F,EAAWljG,KAAKuhG,GAC7B,IAAK5B,EAAS57F,GACV,OAAOA,EAEf,IAAIq/F,EAAU7B,EAAE6B,QAChB,GAAID,EAAWC,GAAU,CACjBr/F,EAASq/F,EAAQpjG,KAAKuhG,GAC1B,IAAK5B,EAAS57F,GACV,OAAOA,OAGd,CACGq/F,EAAU7B,EAAE6B,QAChB,GAAID,EAAWC,GAAU,CACjBr/F,EAASq/F,EAAQpjG,KAAKuhG,GAC1B,IAAK5B,EAAS57F,GACV,OAAOA,EAEf,IAAIs/F,EAAa9B,EAAE5rF,SACnB,GAAIwtF,EAAWE,GAAa,CACpBt/F,EAASs/F,EAAWrjG,KAAKuhG,GAC7B,IAAK5B,EAAS57F,GACV,OAAOA,GAGnB,MAAM,IAAIy7F,UAId,SAASoC,EAAU0B,GACf,QAASA,EAIb,SAASC,EAASD,GACd,MAAO,GAAKA,EAIhB,SAASzD,EAAcyD,GACnB,IAAInhG,EAAMwgG,EAAYW,EAAU,GAChC,OAAIZ,EAASvgG,GACFA,EACJohG,EAASphG,GAMpB,SAASo9F,EAAQ+D,GACb,OAAO5gG,MAAMoC,QACPpC,MAAMoC,QAAQw+F,GACdA,aAAoB9iG,OAChB8iG,aAAoB5gG,MACyB,mBAA7ClC,OAAOS,UAAU0U,SAAS3V,KAAKsjG,GAI7C,SAASH,EAAWG,GAEhB,MAA2B,oBAAbA,EAIlB,SAAS7D,EAAc6D,GAEnB,MAA2B,oBAAbA,EAIlB,SAASpD,EAAcoD,GACnB,OAAQb,EAAKa,IACT,KAAK,EAAgB,OAAO,EAC5B,KAAK,EAAgB,OAAO,EAC5B,QAAS,OAAO,GAOxB,SAASN,EAAUQ,EAAGhC,GAClB,IAAI7iF,EAAO6kF,EAAEhC,GACb,QAAax9F,IAAT2a,GAA+B,OAATA,EAA1B,CAEA,IAAKwkF,EAAWxkF,GACZ,MAAM,IAAI6gF,UACd,OAAO7gF,GAIX,SAASyjF,EAAYx2F,GACjB,IAAI63F,EAAST,EAAUp3F,EAAKkyF,GAC5B,IAAKqF,EAAWM,GACZ,MAAM,IAAIjE,UACd,IAAIzB,EAAW0F,EAAOzjG,KAAK4L,GAC3B,IAAK+zF,EAAS5B,GACV,MAAM,IAAIyB,UACd,OAAOzB,EAIX,SAASwE,EAAcmB,GACnB,OAAOA,EAAWvjG,MAItB,SAASkiG,EAAatE,GAClB,IAAIh6F,EAASg6F,EAASj/D,OACtB,OAAO/6B,EAAO4/F,MAAe5/F,EAIjC,SAASy+F,GAAczE,GACnB,IAAI6F,EAAI7F,EAAS,UACb6F,GACAA,EAAE5jG,KAAK+9F,GAMf,SAAS4D,GAAuBJ,GAC5B,IAAIsC,EAAQrjG,OAAO8gB,eAAeigF,GAClC,GAAiB,oBAANA,GAAoBA,IAAMhD,EACjC,OAAOsF,EAQX,GAAIA,IAAUtF,EACV,OAAOsF,EAEX,IAAI5iG,EAAYsgG,EAAEtgG,UACd6iG,EAAiB7iG,GAAaT,OAAO8gB,eAAergB,GACxD,GAAsB,MAAlB6iG,GAA0BA,IAAmBtjG,OAAOS,UACpD,OAAO4iG,EAEX,IAAI7hG,EAAc8hG,EAAe9hG,YACjC,MAA2B,oBAAhBA,GAGPA,IAAgBu/F,EAFTsC,EAKJ7hG,EAGX,SAAS48F,KACL,IAAImF,EAAgB,GAChBC,EAAgB,GAChBC,EAA6B,WAC7B,SAASA,EAAYjyF,EAAMkgB,EAAQsiC,GAC/Bh1D,KAAK0kG,OAAS,EACd1kG,KAAK2kG,MAAQnyF,EACbxS,KAAK4kG,QAAUlyE,EACf1yB,KAAK6kG,UAAY7vC,EAoCrB,OAlCAyvC,EAAYhjG,UAAU,cAAgB,WAAc,OAAOzB,MAC3DykG,EAAYhjG,UAAU68F,GAAkB,WAAc,OAAOt+F,MAC7DykG,EAAYhjG,UAAU69B,KAAO,WACzB,IAAIztB,EAAQ7R,KAAK0kG,OACjB,GAAI7yF,GAAS,GAAKA,EAAQ7R,KAAK2kG,MAAMviG,OAAQ,CACzC,IAAImC,EAASvE,KAAK6kG,UAAU7kG,KAAK2kG,MAAM9yF,GAAQ7R,KAAK4kG,QAAQ/yF,IAS5D,OARIA,EAAQ,GAAK7R,KAAK2kG,MAAMviG,QACxBpC,KAAK0kG,QAAU,EACf1kG,KAAK2kG,MAAQH,EACbxkG,KAAK4kG,QAAUJ,GAGfxkG,KAAK0kG,SAEF,CAAE/jG,MAAO4D,EAAQ4/F,MAAM,GAElC,MAAO,CAAExjG,WAAO6D,EAAW2/F,MAAM,IAErCM,EAAYhjG,UAAUqjG,MAAQ,SAAUpvF,GAMpC,MALI1V,KAAK0kG,QAAU,IACf1kG,KAAK0kG,QAAU,EACf1kG,KAAK2kG,MAAQH,EACbxkG,KAAK4kG,QAAUJ,GAEb9uF,GAEV+uF,EAAYhjG,UAAUsjG,OAAS,SAAUpkG,GAMrC,OALIX,KAAK0kG,QAAU,IACf1kG,KAAK0kG,QAAU,EACf1kG,KAAK2kG,MAAQH,EACbxkG,KAAK4kG,QAAUJ,GAEZ,CAAE7jG,MAAOA,EAAOwjG,MAAM,IAE1BM,EAzCqB,GA2ChC,OAAsB,WAClB,SAASvF,IACLl/F,KAAK2kG,MAAQ,GACb3kG,KAAK4kG,QAAU,GACf5kG,KAAKglG,UAAYT,EACjBvkG,KAAKilG,aAAe,EAyDxB,OAvDAjkG,OAAOC,eAAei+F,EAAIz9F,UAAW,OAAQ,CACzCL,IAAK,WAAc,OAAOpB,KAAK2kG,MAAMviG,QACrCjB,YAAY,EACZD,cAAc,IAElBg+F,EAAIz9F,UAAUq9F,IAAM,SAAUn8F,GAAO,OAAO3C,KAAKklG,MAAMviG,GAAgB,IAAU,GACjFu8F,EAAIz9F,UAAUL,IAAM,SAAUuB,GAC1B,IAAIkP,EAAQ7R,KAAKklG,MAAMviG,GAAgB,GACvC,OAAOkP,GAAS,EAAI7R,KAAK4kG,QAAQ/yF,QAASrN,GAE9C06F,EAAIz9F,UAAUgK,IAAM,SAAU9I,EAAKhC,GAC/B,IAAIkR,EAAQ7R,KAAKklG,MAAMviG,GAAgB,GAEvC,OADA3C,KAAK4kG,QAAQ/yF,GAASlR,EACfX,MAEXk/F,EAAIz9F,UAAU2kB,OAAS,SAAUzjB,GAC7B,IAAIkP,EAAQ7R,KAAKklG,MAAMviG,GAAgB,GACvC,GAAIkP,GAAS,EAAG,CAEZ,IADA,IAAI8vF,EAAO3hG,KAAK2kG,MAAMviG,OACb9B,EAAIuR,EAAQ,EAAGvR,EAAIqhG,EAAMrhG,IAC9BN,KAAK2kG,MAAMrkG,EAAI,GAAKN,KAAK2kG,MAAMrkG,GAC/BN,KAAK4kG,QAAQtkG,EAAI,GAAKN,KAAK4kG,QAAQtkG,GAQvC,OANAN,KAAK2kG,MAAMviG,SACXpC,KAAK4kG,QAAQxiG,SACTO,IAAQ3C,KAAKglG,YACbhlG,KAAKglG,UAAYT,EACjBvkG,KAAKilG,aAAe,IAEjB,EAEX,OAAO,GAEX/F,EAAIz9F,UAAU+Z,MAAQ,WAClBxb,KAAK2kG,MAAMviG,OAAS,EACpBpC,KAAK4kG,QAAQxiG,OAAS,EACtBpC,KAAKglG,UAAYT,EACjBvkG,KAAKilG,aAAe,GAExB/F,EAAIz9F,UAAU+Q,KAAO,WAAc,OAAO,IAAIiyF,EAAYzkG,KAAK2kG,MAAO3kG,KAAK4kG,QAASO,IACpFjG,EAAIz9F,UAAUixB,OAAS,WAAc,OAAO,IAAI+xE,EAAYzkG,KAAK2kG,MAAO3kG,KAAK4kG,QAASz4F,IACtF+yF,EAAIz9F,UAAU09F,QAAU,WAAc,OAAO,IAAIsF,EAAYzkG,KAAK2kG,MAAO3kG,KAAK4kG,QAASQ,IACvFlG,EAAIz9F,UAAU,cAAgB,WAAc,OAAOzB,KAAKm/F,WACxDD,EAAIz9F,UAAU68F,GAAkB,WAAc,OAAOt+F,KAAKm/F,WAC1DD,EAAIz9F,UAAUyjG,MAAQ,SAAUviG,EAAK0iG,GASjC,OARIrlG,KAAKglG,YAAcriG,IACnB3C,KAAKilG,YAAcjlG,KAAK2kG,MAAMj5F,QAAQ1L,KAAKglG,UAAYriG,IAEvD3C,KAAKilG,YAAc,GAAKI,IACxBrlG,KAAKilG,YAAcjlG,KAAK2kG,MAAMviG,OAC9BpC,KAAK2kG,MAAMhgG,KAAKhC,GAChB3C,KAAK4kG,QAAQjgG,UAAKH,IAEfxE,KAAKilG,aAET/F,EA9DU,GAgErB,SAASiG,EAAOxiG,EAAK2iG,GACjB,OAAO3iG,EAEX,SAASwJ,EAASm5F,EAAG3kG,GACjB,OAAOA,EAEX,SAASykG,EAASziG,EAAKhC,GACnB,MAAO,CAACgC,EAAKhC,IAIrB,SAAS4+F,KACL,OAAsB,WAClB,SAASD,IACLt/F,KAAKulG,KAAO,IAAItG,EAgBpB,OAdAj+F,OAAOC,eAAeq+F,EAAI79F,UAAW,OAAQ,CACzCL,IAAK,WAAc,OAAOpB,KAAKulG,KAAK5D,MACpCxgG,YAAY,EACZD,cAAc,IAElBo+F,EAAI79F,UAAUq9F,IAAM,SAAUn+F,GAAS,OAAOX,KAAKulG,KAAKzG,IAAIn+F,IAC5D2+F,EAAI79F,UAAUsG,IAAM,SAAUpH,GAAS,OAAOX,KAAKulG,KAAK95F,IAAI9K,EAAOA,GAAQX,MAC3Es/F,EAAI79F,UAAU2kB,OAAS,SAAUzlB,GAAS,OAAOX,KAAKulG,KAAKn/E,OAAOzlB,IAClE2+F,EAAI79F,UAAU+Z,MAAQ,WAAcxb,KAAKulG,KAAK/pF,SAC9C8jF,EAAI79F,UAAU+Q,KAAO,WAAc,OAAOxS,KAAKulG,KAAK/yF,QACpD8sF,EAAI79F,UAAUixB,OAAS,WAAc,OAAO1yB,KAAKulG,KAAK7yE,UACtD4sE,EAAI79F,UAAU09F,QAAU,WAAc,OAAOn/F,KAAKulG,KAAKpG,WACvDG,EAAI79F,UAAU,cAAgB,WAAc,OAAOzB,KAAKwS,QACxD8sF,EAAI79F,UAAU68F,GAAkB,WAAc,OAAOt+F,KAAKwS,QACnD8sF,EAlBU,GAsBzB,SAASI,KACL,IAAI8F,EAAY,GACZhzF,EAAOosF,EAAQn8F,SACfgjG,EAAUC,IACd,OAAsB,WAClB,SAASjG,IACLz/F,KAAK2lG,KAAOD,IAuBhB,OArBAjG,EAAQh+F,UAAUq9F,IAAM,SAAU58F,GAC9B,IAAI0jG,EAAQC,EAAwB3jG,GAAmB,GACvD,YAAiBsC,IAAVohG,GAAsBhH,EAAQE,IAAI8G,EAAO5lG,KAAK2lG,OAEzDlG,EAAQh+F,UAAUL,IAAM,SAAUc,GAC9B,IAAI0jG,EAAQC,EAAwB3jG,GAAmB,GACvD,YAAiBsC,IAAVohG,EAAsBhH,EAAQx9F,IAAIwkG,EAAO5lG,KAAK2lG,WAAQnhG,GAEjEi7F,EAAQh+F,UAAUgK,IAAM,SAAUvJ,EAAQvB,GACtC,IAAIilG,EAAQC,EAAwB3jG,GAAmB,GAEvD,OADA0jG,EAAM5lG,KAAK2lG,MAAQhlG,EACZX,MAEXy/F,EAAQh+F,UAAU2kB,OAAS,SAAUlkB,GACjC,IAAI0jG,EAAQC,EAAwB3jG,GAAmB,GACvD,YAAiBsC,IAAVohG,UAA6BA,EAAM5lG,KAAK2lG,OAEnDlG,EAAQh+F,UAAU+Z,MAAQ,WAEtBxb,KAAK2lG,KAAOD,KAETjG,EAzBU,GA2BrB,SAASiG,IACL,IAAI/iG,EACJ,GACIA,EAAM,cAAgBmjG,UACnBlH,EAAQE,IAAItsF,EAAM7P,IAEzB,OADA6P,EAAK7P,IAAO,EACLA,EAEX,SAASkjG,EAAwB3jG,EAAQO,GACrC,IAAKw7F,EAAOz9F,KAAK0B,EAAQujG,GAAU,CAC/B,IAAKhjG,EACD,OACJzB,OAAOC,eAAeiB,EAAQujG,EAAS,CAAE9kG,MAAOi+F,EAAQn8F,WAE5D,OAAOP,EAAOujG,GAElB,SAASM,EAAgBC,EAAQrE,GAC7B,IAAK,IAAIrhG,EAAI,EAAGA,EAAIqhG,IAAQrhG,EACxB0lG,EAAO1lG,GAAqB,IAAhBoY,KAAKE,SAAkB,EACvC,OAAOotF,EAEX,SAASC,EAAetE,GACpB,MAA0B,oBAAfjwB,WACe,qBAAXw0B,OACAA,OAAOC,gBAAgB,IAAIz0B,WAAWiwB,IACzB,qBAAbyE,SACAA,SAASD,gBAAgB,IAAIz0B,WAAWiwB,IAC5CoE,EAAgB,IAAIr0B,WAAWiwB,GAAOA,GAE1CoE,EAAgB,IAAI7iG,MAAMy+F,GAAOA,GAE5C,SAASmE,IACL,IAAIrhF,EAAOwhF,EAAeT,GAE1B/gF,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,IAAVA,EAAK,GAAY,IAE3B,IADA,IAAIlgB,EAAS,GACJqjF,EAAS,EAAGA,EAAS4d,IAAa5d,EAAQ,CAC/C,IAAIye,EAAO5hF,EAAKmjE,GACD,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,IAChCrjF,GAAU,KACV8hG,EAAO,KACP9hG,GAAU,KACdA,GAAU8hG,EAAKlwF,SAAS,IAAItJ,cAEhC,OAAOtI,GAIf,SAASs6F,GAAezyF,GAGpB,OAFAA,EAAI7J,QAAKiC,SACF4H,EAAI7J,GACJ6J,EAn+BXyxF,EAAS,WAAY76F,GAqDrB66F,EAAS,WAAY/3F,GA+CrB+3F,EAAS,iBAAkB+C,GA0C3B/C,EAAS,cAAegD,GA0CxBhD,EAAS,iBAAkBkD,GA0C3BlD,EAAS,cAAe93F,GA0CxB83F,EAAS,iBAAkBqD,GAyC3BrD,EAAS,kBAAmBuD,GAyC5BvD,EAAS,qBAAsByD,GAsD/BzD,EAAS,iBAAkB2D,OAzgBnC,CA2lCGz+F,IAAYA,EAAU,OAEIvC,KAAKT,EAASK,EAAoB,IAAKA,EAAoB,OAIlF,SAAUN,EAAQ+B,EAAqBzB,GAE7C;;;;;;;;;;;;;;;;;GAmBA,SAASkmG,EAAM1uF,EAAGC,EAAG0uF,GACnBvmG,KAAK4X,EAAIA,EACT5X,KAAK6X,EAAIA,EACT7X,KAAKumG,KAAOA,IAAQ,IAAIrkD,MAAOK,UAejC,SAASikD,EAAOC,EAAYC,EAAUC,EAAUC,GAC9C5mG,KAAKymG,WAAaA,EAClBzmG,KAAK0mG,SAAWA,EAChB1mG,KAAK2mG,SAAWA,EAChB3mG,KAAK4mG,SAAWA,EAkClB,SAASC,EAAS1nF,EAAM2nF,EAAMlhG,GAC5B,IAAI6B,EAASgT,EAAMlW,EACf2wE,EAAU,KACV6oB,EAAW,EACVn4F,IAASA,EAAU,IACxB,IAAImhG,EAAQ,WACVhJ,GAA+B,IAApBn4F,EAAQohG,QAAoB,EAAI9kD,KAAKI,MAChD4yB,EAAU,KACV3wE,EAAS4a,EAAK/C,MAAM3U,EAASgT,GACxBy6D,IAASztE,EAAUgT,EAAO,OAEjC,OAAO,WACL,IAAI6nC,EAAMJ,KAAKI,MACVy7C,IAAgC,IAApBn4F,EAAQohG,UAAmBjJ,EAAWz7C,GACvD,IAAI2kD,EAAYH,GAAQxkD,EAAMy7C,GAc9B,OAbAt2F,EAAUzH,KACVya,EAAOtY,UACH8kG,GAAa,GAAKA,EAAYH,GAC5B5xB,IACFP,aAAaO,GACbA,EAAU,MAEZ6oB,EAAWz7C,EACX/9C,EAAS4a,EAAK/C,MAAM3U,EAASgT,GACxBy6D,IAASztE,EAAUgT,EAAO,OACrBy6D,IAAgC,IAArBtvE,EAAQshG,WAC7BhyB,EAAU5E,WAAWy2B,EAAOE,IAEvB1iG,GAIX,SAASu9E,EAAaqlB,EAAQvhG,GAC5B,IAAI0b,EAAOthB,KACPonG,EAAOxhG,GAAW,GAEtB5F,KAAKqnG,qBAAuBD,EAAKC,sBAAwB,GACzDrnG,KAAKwoB,SAAW4+E,EAAK5+E,UAAY,GACjCxoB,KAAKyoB,SAAW2+E,EAAK3+E,UAAY,IACjCzoB,KAAK6mG,SAAW,aAAcO,EAAOA,EAAKP,SAAW,GACrD7mG,KAAKsnG,YAAc,gBAAiBF,EAAOA,EAAKE,YAAc,EAE1DtnG,KAAK6mG,SACP7mG,KAAKunG,kBAAoBV,EAAS/kB,EAAargF,UAAU+lG,cAAexnG,KAAK6mG,UAE7E7mG,KAAKunG,kBAAoBzlB,EAAargF,UAAU+lG,cAGlDxnG,KAAKynG,QAAUL,EAAKK,SAAW,WAC7B,OAAQznG,KAAKwoB,SAAWxoB,KAAKyoB,UAAY,GAE3CzoB,KAAK0nG,SAAWN,EAAKM,UAAY,QACjC1nG,KAAK2nG,gBAAkBP,EAAKO,iBAAmB,gBAC/C3nG,KAAK4nG,QAAUR,EAAKQ,QACpB5nG,KAAK6nG,MAAQT,EAAKS,MAElB7nG,KAAK8nG,QAAUX,EACfnnG,KAAK+nG,KAAOZ,EAAOa,WAAW,MAC9BhoG,KAAKwb,QAILxb,KAAKioG,iBAAmB,SAAUziG,GACZ,IAAhBA,EAAM0iG,QACR5mF,EAAK6mF,kBAAmB,EACxB7mF,EAAK8mF,aAAa5iG,KAItBxF,KAAKqoG,iBAAmB,SAAU7iG,GAC5B8b,EAAK6mF,kBACP7mF,EAAKimF,kBAAkB/hG,IAI3BxF,KAAKsoG,eAAiB,SAAU9iG,GACV,IAAhBA,EAAM0iG,OAAe5mF,EAAK6mF,mBAC5B7mF,EAAK6mF,kBAAmB,EACxB7mF,EAAKinF,WAAW/iG,KAIpBxF,KAAKwoG,kBAAoB,SAAUhjG,GACjC,GAAmC,IAA/BA,EAAMijG,cAAcrmG,OAAc,CACpC,IAAIsmG,EAAQljG,EAAMmjG,eAAe,GACjCrnF,EAAK8mF,aAAaM,KAItB1oG,KAAK4oG,iBAAmB,SAAUpjG,GAEhCA,EAAM0xE,iBAEN,IAAIwxB,EAAQljG,EAAMijG,cAAc,GAChCnnF,EAAKimF,kBAAkBmB,IAGzB1oG,KAAK6oG,gBAAkB,SAAUrjG,GAC/B,IAAIsjG,EAAmBtjG,EAAMtD,SAAWof,EAAKwmF,QACzCgB,IACFtjG,EAAM0xE,iBACN51D,EAAKinF,WAAW/iG,KAKpBxF,KAAK41E,KA5JP0wB,EAAM7kG,UAAUsnG,aAAe,SAAUxxF,GACvC,OAAOvX,KAAKumG,OAAShvF,EAAMgvF,KAAOvmG,KAAKgpG,WAAWzxF,IAAUvX,KAAKumG,KAAOhvF,EAAMgvF,MAAQ,GAGxFD,EAAM7kG,UAAUunG,WAAa,SAAUzxF,GACrC,OAAOmB,KAAKuwF,KAAKvwF,KAAKylB,IAAIn+B,KAAK4X,EAAIL,EAAMK,EAAG,GAAKc,KAAKylB,IAAIn+B,KAAK6X,EAAIN,EAAMM,EAAG,KAG9EyuF,EAAM7kG,UAAU6W,OAAS,SAAU+oB,GACjC,OAAOrhC,KAAK4X,IAAMypB,EAAMzpB,GAAK5X,KAAK6X,IAAMwpB,EAAMxpB,GAAK7X,KAAKumG,OAASllE,EAAMklE,MAWzEC,EAAO/kG,UAAUW,OAAS,WAMxB,IALA,IAAI8mG,EAAQ,GACR9mG,EAAS,EACT+mG,OAAK,EACLC,OAAK,EAEA9oG,EAAI,EAAGA,GAAK4oG,EAAO5oG,GAAK,EAAG,CAClC,IAAI+oG,EAAI/oG,EAAI4oG,EACRI,EAAKtpG,KAAKupG,OAAOF,EAAGrpG,KAAKymG,WAAW7uF,EAAG5X,KAAK0mG,SAAS9uF,EAAG5X,KAAK2mG,SAAS/uF,EAAG5X,KAAK4mG,SAAShvF,GACvF4xF,EAAKxpG,KAAKupG,OAAOF,EAAGrpG,KAAKymG,WAAW5uF,EAAG7X,KAAK0mG,SAAS7uF,EAAG7X,KAAK2mG,SAAS9uF,EAAG7X,KAAK4mG,SAAS/uF,GAC3F,GAAIvX,EAAI,EAAG,CACT,IAAImpG,EAAQH,EAAKH,EACbO,EAAQF,EAAKJ,EACjBhnG,GAAUsW,KAAKuwF,KAAKQ,EAAQA,EAAQC,EAAQA,GAE9CP,EAAKG,EACLF,EAAKI,EAGP,OAAOpnG,GAITokG,EAAO/kG,UAAU8nG,OAAS,SAAUF,EAAG9xF,EAAOoyF,EAAIC,EAAI3tD,GACpD,OAAO1kC,GAAS,EAAM8xF,IAAM,EAAMA,IAAM,EAAMA,GAAK,EAAMM,GAAM,EAAMN,IAAM,EAAMA,GAAKA,EAAI,EAAMO,GAAM,EAAMP,GAAKA,EAAIA,EAAIptD,EAAMotD,EAAIA,EAAIA,GAoHzIvnB,EAAargF,UAAU+Z,MAAQ,WAC7B,IAAIquF,EAAM7pG,KAAK+nG,KACXZ,EAASnnG,KAAK8nG,QAElB+B,EAAIC,UAAY9pG,KAAK2nG,gBACrBkC,EAAIE,UAAU,EAAG,EAAG5C,EAAOn4E,MAAOm4E,EAAO6C,QACzCH,EAAII,SAAS,EAAG,EAAG9C,EAAOn4E,MAAOm4E,EAAO6C,QAExChqG,KAAKkqG,MAAQ,GACblqG,KAAKmqG,SACLnqG,KAAKoqG,UAAW,GAGlBtoB,EAAargF,UAAU4oG,YAAc,SAAUC,GAC7C,IAAIv1F,EAAQ/U,KAER4F,EAAUzD,UAAUC,OAAS,QAAsBoC,IAAjBrC,UAAU,GAAmBA,UAAU,GAAK,GAE9Es/B,EAAQ,IAAIg8C,MACZ8sB,EAAQ3kG,EAAQ2kG,OAAS/lE,OAAOgmE,kBAAoB,EACpDx7E,EAAQppB,EAAQopB,OAAShvB,KAAK8nG,QAAQ94E,MAAQu7E,EAC9CP,EAASpkG,EAAQokG,QAAUhqG,KAAK8nG,QAAQkC,OAASO,EAErDvqG,KAAKmqG,SACL1oE,EAAMpf,IAAMioF,EACZ7oE,EAAMqkD,OAAS,WACb/wE,EAAMgzF,KAAK0C,UAAUhpE,EAAO,EAAG,EAAGzS,EAAOg7E,IAE3ChqG,KAAKoqG,UAAW,GAGlBtoB,EAAargF,UAAUipG,UAAY,SAAU7kG,GAC3C,IAAIiiG,EAEJ,OAAQjiG,GACN,IAAK,gBACH,OAAO7F,KAAK2qG,SACd,QACE,IAAK,IAAIC,EAAOzoG,UAAUC,OAAQwD,EAAU1C,MAAM0nG,EAAO,EAAIA,EAAO,EAAI,GAAIjF,EAAO,EAAGA,EAAOiF,EAAMjF,IACjG//F,EAAQ+/F,EAAO,GAAKxjG,UAAUwjG,GAGhC,OAAQmC,EAAU9nG,KAAK8nG,SAAS4C,UAAUtuF,MAAM0rF,EAAS,CAACjiG,GAAM4C,OAAO7C,MAI7Ek8E,EAAargF,UAAUm0E,GAAK,WAC1B51E,KAAK6qG,qBACL7qG,KAAK8qG,sBAGPhpB,EAAargF,UAAUs0E,IAAM,WAC3B/1E,KAAK8nG,QAAQiD,oBAAoB,YAAa/qG,KAAKioG,kBACnDjoG,KAAK8nG,QAAQiD,oBAAoB,YAAa/qG,KAAKqoG,kBACnDvkF,SAASinF,oBAAoB,UAAW/qG,KAAKsoG,gBAE7CtoG,KAAK8nG,QAAQiD,oBAAoB,aAAc/qG,KAAKwoG,mBACpDxoG,KAAK8nG,QAAQiD,oBAAoB,YAAa/qG,KAAK4oG,kBACnD5oG,KAAK8nG,QAAQiD,oBAAoB,WAAY/qG,KAAK6oG,kBAGpD/mB,EAAargF,UAAUmqB,QAAU,WAC/B,OAAO5rB,KAAKoqG,UAIdtoB,EAAargF,UAAU2mG,aAAe,SAAU5iG,GAC9CxF,KAAKkqG,MAAMvlG,KAAK,IAChB3E,KAAKmqG,SACLnqG,KAAKwnG,cAAchiG,GAES,oBAAjBxF,KAAK4nG,SACd5nG,KAAK4nG,QAAQpiG,IAIjBs8E,EAAargF,UAAU+lG,cAAgB,SAAUhiG,GAC/C,IAAIoS,EAAIpS,EAAMwlG,QACVnzF,EAAIrS,EAAMylG,QAEVC,EAAQlrG,KAAKmrG,aAAavzF,EAAGC,GAC7BuzF,EAAiBprG,KAAKkqG,MAAMlqG,KAAKkqG,MAAM9nG,OAAS,GAChDipG,EAAYD,GAAkBA,EAAeA,EAAehpG,OAAS,GACrEkpG,EAAsBD,GAAaH,EAAMlC,WAAWqC,GAAarrG,KAAKsnG,YAG1E,IAAM+D,IAAaC,EAAsB,CACvC,IAAIC,EAAYvrG,KAAKurG,UAAUL,GAC3BM,EAAQD,EAAUC,MAClBC,EAASF,EAAUE,OAEnBD,GAASC,GACXzrG,KAAK0rG,WAAWF,EAAOC,EAAOl0F,MAAOk0F,EAAOxvD,KAG9Cj8C,KAAKkqG,MAAMlqG,KAAKkqG,MAAM9nG,OAAS,GAAGuC,KAAK,CACrCiT,EAAGszF,EAAMtzF,EACTC,EAAGqzF,EAAMrzF,EACT0uF,KAAM2E,EAAM3E,KACZoF,MAAO3rG,KAAK0nG,aAKlB5lB,EAAargF,UAAU8mG,WAAa,SAAU/iG,GAC5C,IAAIomG,EAAe5rG,KAAK6rG,OAAOzpG,OAAS,EACpC8oG,EAAQlrG,KAAK6rG,OAAO,GAMxB,IAJKD,GAAgBV,GACnBlrG,KAAK8rG,SAASZ,GAGZA,EAAO,CACT,IAAIE,EAAiBprG,KAAKkqG,MAAMlqG,KAAKkqG,MAAM9nG,OAAS,GAChDipG,EAAYD,EAAeA,EAAehpG,OAAS,GAIlD8oG,EAAM5yF,OAAO+yF,IAChBD,EAAezmG,KAAK,CAClBiT,EAAGszF,EAAMtzF,EACTC,EAAGqzF,EAAMrzF,EACT0uF,KAAM2E,EAAM3E,KACZoF,MAAO3rG,KAAK0nG,WAKQ,oBAAf1nG,KAAK6nG,OACd7nG,KAAK6nG,MAAMriG,IAIfs8E,EAAargF,UAAUopG,mBAAqB,WAC1C7qG,KAAKmoG,kBAAmB,EAExBnoG,KAAK8nG,QAAQiE,iBAAiB,YAAa/rG,KAAKioG,kBAChDjoG,KAAK8nG,QAAQiE,iBAAiB,YAAa/rG,KAAKqoG,kBAChDvkF,SAASioF,iBAAiB,UAAW/rG,KAAKsoG,iBAG5CxmB,EAAargF,UAAUqpG,mBAAqB,WAE1C9qG,KAAK8nG,QAAQzzC,MAAM23C,cAAgB,OACnChsG,KAAK8nG,QAAQzzC,MAAM43C,YAAc,OAEjCjsG,KAAK8nG,QAAQiE,iBAAiB,aAAc/rG,KAAKwoG,mBACjDxoG,KAAK8nG,QAAQiE,iBAAiB,YAAa/rG,KAAK4oG,kBAChD5oG,KAAK8nG,QAAQiE,iBAAiB,WAAY/rG,KAAK6oG,kBAGjD/mB,EAAargF,UAAU0oG,OAAS,WAC9BnqG,KAAK6rG,OAAS,GACd7rG,KAAKksG,cAAgB,EACrBlsG,KAAKmsG,YAAcnsG,KAAKwoB,SAAWxoB,KAAKyoB,UAAY,EACpDzoB,KAAK+nG,KAAK+B,UAAY9pG,KAAK0nG,UAG7B5lB,EAAargF,UAAU0pG,aAAe,SAAUvzF,EAAGC,EAAG0uF,GACpD,IAAI6F,EAAOpsG,KAAK8nG,QAAQ5jF,wBAExB,OAAO,IAAIoiF,EAAM1uF,EAAIw0F,EAAKrvD,KAAMllC,EAAIu0F,EAAKjoF,IAAKoiF,IAAQ,IAAIrkD,MAAOK,YAGnEu/B,EAAargF,UAAU8pG,UAAY,SAAUL,GAC3C,IAAIW,EAAS7rG,KAAK6rG,OACdQ,OAAM,EAIV,GAFAR,EAAOlnG,KAAKumG,GAERW,EAAOzpG,OAAS,EAAG,CAGC,IAAlBypG,EAAOzpG,QAAcypG,EAAO7pF,QAAQ6pF,EAAO,IAE/CQ,EAAMrsG,KAAKssG,6BAA6BT,EAAO,GAAIA,EAAO,GAAIA,EAAO,IACrE,IAAIjC,EAAKyC,EAAIzC,GACbyC,EAAMrsG,KAAKssG,6BAA6BT,EAAO,GAAIA,EAAO,GAAIA,EAAO,IACrE,IAAIU,EAAKF,EAAI1C,GACT6B,EAAQ,IAAIhF,EAAOqF,EAAO,GAAIjC,EAAI2C,EAAIV,EAAO,IAC7CJ,EAASzrG,KAAKwsG,sBAAsBhB,GAMxC,OAFAK,EAAOY,QAEA,CAAEjB,MAAOA,EAAOC,OAAQA,GAGjC,MAAO,IAGT3pB,EAAargF,UAAU6qG,6BAA+B,SAAUI,EAAIC,EAAIC,GACtE,IAAIC,EAAMH,EAAG90F,EAAI+0F,EAAG/0F,EAChBk1F,EAAMJ,EAAG70F,EAAI80F,EAAG90F,EAChBk1F,EAAMJ,EAAG/0F,EAAIg1F,EAAGh1F,EAChBo1F,EAAML,EAAG90F,EAAI+0F,EAAG/0F,EAEhBo1F,EAAK,CAAEr1F,GAAI80F,EAAG90F,EAAI+0F,EAAG/0F,GAAK,EAAKC,GAAI60F,EAAG70F,EAAI80F,EAAG90F,GAAK,GAClDq1F,EAAK,CAAEt1F,GAAI+0F,EAAG/0F,EAAIg1F,EAAGh1F,GAAK,EAAKC,GAAI80F,EAAG90F,EAAI+0F,EAAG/0F,GAAK,GAElDs1F,EAAKz0F,KAAKuwF,KAAK4D,EAAMA,EAAMC,EAAMA,GACjCM,EAAK10F,KAAKuwF,KAAK8D,EAAMA,EAAMC,EAAMA,GAEjCK,EAAMJ,EAAGr1F,EAAIs1F,EAAGt1F,EAChB01F,EAAML,EAAGp1F,EAAIq1F,EAAGr1F,EAEhB1U,EAAIiqG,GAAMD,EAAKC,GACfG,EAAK,CAAE31F,EAAGs1F,EAAGt1F,EAAIy1F,EAAMlqG,EAAG0U,EAAGq1F,EAAGr1F,EAAIy1F,EAAMnqG,GAE1CqqG,EAAKb,EAAG/0F,EAAI21F,EAAG31F,EACf61F,EAAKd,EAAG90F,EAAI01F,EAAG11F,EAEnB,MAAO,CACL8xF,GAAI,IAAIrD,EAAM2G,EAAGr1F,EAAI41F,EAAIP,EAAGp1F,EAAI41F,GAChC7D,GAAI,IAAItD,EAAM4G,EAAGt1F,EAAI41F,EAAIN,EAAGr1F,EAAI41F,KAIpC3rB,EAAargF,UAAU+qG,sBAAwB,SAAUhB,GACvD,IAAI/E,EAAa+E,EAAM/E,WACnBG,EAAW4E,EAAM5E,SACjB6E,EAAS,CAAEl0F,MAAO,KAAM0kC,IAAK,MAE7ByxD,EAAW1tG,KAAKqnG,qBAAuBT,EAASmC,aAAatC,IAAe,EAAIzmG,KAAKqnG,sBAAwBrnG,KAAKksG,cAElHyB,EAAW3tG,KAAK4tG,aAAaF,GAQjC,OANAjC,EAAOl0F,MAAQvX,KAAKmsG,WACpBV,EAAOxvD,IAAM0xD,EAEb3tG,KAAKksG,cAAgBwB,EACrB1tG,KAAKmsG,WAAawB,EAEXlC,GAGT3pB,EAAargF,UAAUmsG,aAAe,SAAUF,GAC9C,OAAOh1F,KAAK4oC,IAAIthD,KAAKyoB,UAAYilF,EAAW,GAAI1tG,KAAKwoB,WAGvDs5D,EAAargF,UAAUosG,WAAa,SAAUj2F,EAAGC,EAAG8pF,GAClD,IAAIkI,EAAM7pG,KAAK+nG,KAEf8B,EAAIh+E,OAAOjU,EAAGC,GACdgyF,EAAIiE,IAAIl2F,EAAGC,EAAG8pF,EAAM,EAAG,EAAIjpF,KAAKq1F,IAAI,GACpC/tG,KAAKoqG,UAAW,GAGlBtoB,EAAargF,UAAUiqG,WAAa,SAAUF,EAAOwC,EAAYC,GAC/D,IAAIpE,EAAM7pG,KAAK+nG,KACXmG,EAAaD,EAAWD,EACxBG,EAAYz1F,KAAKC,MAAM6yF,EAAMppG,UAEjCynG,EAAIuE,YAEJ,IAAK,IAAI9tG,EAAI,EAAGA,EAAI6tG,EAAW7tG,GAAK,EAAG,CAErC,IAAI+oG,EAAI/oG,EAAI6tG,EACRE,EAAKhF,EAAIA,EACTiF,EAAMD,EAAKhF,EACXkF,EAAI,EAAIlF,EACRmF,EAAKD,EAAIA,EACTE,EAAMD,EAAKD,EAEX32F,EAAI62F,EAAMjD,EAAM/E,WAAW7uF,EAC/BA,GAAK,EAAI42F,EAAKnF,EAAImC,EAAM9E,SAAS9uF,EACjCA,GAAK,EAAI22F,EAAIF,EAAK7C,EAAM7E,SAAS/uF,EACjCA,GAAK02F,EAAM9C,EAAM5E,SAAShvF,EAE1B,IAAIC,EAAI42F,EAAMjD,EAAM/E,WAAW5uF,EAC/BA,GAAK,EAAI22F,EAAKnF,EAAImC,EAAM9E,SAAS7uF,EACjCA,GAAK,EAAI02F,EAAIF,EAAK7C,EAAM7E,SAAS9uF,EACjCA,GAAKy2F,EAAM9C,EAAM5E,SAAS/uF,EAE1B,IAAImX,EAAQg/E,EAAaM,EAAMJ,EAC/BluG,KAAK6tG,WAAWj2F,EAAGC,EAAGmX,GAGxB66E,EAAI6E,YACJ7E,EAAI8E,QAGN7sB,EAAargF,UAAUqqG,SAAW,SAAUZ,GAC1C,IAAIrB,EAAM7pG,KAAK+nG,KACX/4E,EAAgC,oBAAjBhvB,KAAKynG,QAAyBznG,KAAKynG,UAAYznG,KAAKynG,QAEvEoC,EAAIuE,YACJpuG,KAAK6tG,WAAW3C,EAAMtzF,EAAGszF,EAAMrzF,EAAGmX,GAClC66E,EAAI6E,YACJ7E,EAAI8E,QAGN7sB,EAAargF,UAAUmtG,UAAY,SAAUC,EAAaC,EAAWC,GACnE,IAAK,IAAIzuG,EAAI,EAAGA,EAAIuuG,EAAYzsG,OAAQ9B,GAAK,EAAG,CAC9C,IAAI0uG,EAAQH,EAAYvuG,GAExB,GAAI0uG,EAAM5sG,OAAS,EACjB,IAAK,IAAIiB,EAAI,EAAGA,EAAI2rG,EAAM5sG,OAAQiB,GAAK,EAAG,CACxC,IAAI4rG,EAAWD,EAAM3rG,GACjB6nG,EAAQ,IAAI5E,EAAM2I,EAASr3F,EAAGq3F,EAASp3F,EAAGo3F,EAAS1I,MACnDoF,EAAQsD,EAAStD,MAErB,GAAU,IAANtoG,EAKFrD,KAAK0nG,SAAWiE,EAChB3rG,KAAKmqG,SAELnqG,KAAKurG,UAAUL,QACV,GAAI7nG,IAAM2rG,EAAM5sG,OAAS,EAAG,CAEjC,IAAI8sG,EAAalvG,KAAKurG,UAAUL,GAC5BM,EAAQ0D,EAAW1D,MACnBC,EAASyD,EAAWzD,OAEpBD,GAASC,GACXqD,EAAUtD,EAAOC,EAAQE,QAM1B,CACL3rG,KAAKmqG,SACL,IAAIgF,EAAYH,EAAM,GACtBD,EAAQI,MAKdrtB,EAAargF,UAAUkpG,OAAS,WAC9B,IAAIyE,EAASpvG,KAET6uG,EAAc7uG,KAAKkqG,MACnB/C,EAASnnG,KAAK8nG,QACdyC,EAAQ7xF,KAAK4oC,IAAI9c,OAAOgmE,kBAAoB,EAAG,GAC/C6E,EAAO,EACPC,EAAO,EACPC,EAAOpI,EAAOn4E,MAAQu7E,EACtBiF,EAAOrI,EAAO6C,OAASO,EACvBkF,EAAM3rF,SAAS4rF,gBAAgB,6BAA8B,OAEjED,EAAIE,eAAe,KAAM,QAASxI,EAAOn4E,OACzCygF,EAAIE,eAAe,KAAM,SAAUxI,EAAO6C,QAE1ChqG,KAAK4uG,UAAUC,GAAa,SAAUrD,EAAOC,EAAQE,GACnD,IAAIxlG,EAAO2d,SAAS/H,cAAc,QAKlC,IAAK5C,MAAMqyF,EAAM9E,SAAS9uF,KAAOuB,MAAMqyF,EAAM9E,SAAS7uF,KAAOsB,MAAMqyF,EAAM7E,SAAS/uF,KAAOuB,MAAMqyF,EAAM7E,SAAS9uF,GAAI,CAChH,IAAI+3F,EAAO,KAAOpE,EAAM/E,WAAW7uF,EAAEwmB,QAAQ,GAAK,IAAMotE,EAAM/E,WAAW5uF,EAAEumB,QAAQ,GAAxE,MAA2FotE,EAAM9E,SAAS9uF,EAAEwmB,QAAQ,GAAK,IAAMotE,EAAM9E,SAAS7uF,EAAEumB,QAAQ,GAAK,IAAQotE,EAAM7E,SAAS/uF,EAAEwmB,QAAQ,GAAK,IAAMotE,EAAM7E,SAAS9uF,EAAEumB,QAAQ,GAAK,IAAQotE,EAAM5E,SAAShvF,EAAEwmB,QAAQ,GAAK,IAAMotE,EAAM5E,SAAS/uF,EAAEumB,QAAQ,GAEvTj4B,EAAK0pG,aAAa,IAAKD,GACvBzpG,EAAK0pG,aAAa,gBAA8B,KAAbpE,EAAOxvD,KAAY7d,QAAQ,IAC9Dj4B,EAAK0pG,aAAa,SAAUlE,GAC5BxlG,EAAK0pG,aAAa,OAAQ,QAC1B1pG,EAAK0pG,aAAa,iBAAkB,SAEpCJ,EAAIn7C,YAAYnuD,OAEjB,SAAU8oG,GACX,IAAIa,EAAShsF,SAAS/H,cAAc,UAChC0rF,EAAoC,oBAAnB2H,EAAO3H,QAAyB2H,EAAO3H,UAAY2H,EAAO3H,QAC/EqI,EAAOD,aAAa,IAAKpI,GACzBqI,EAAOD,aAAa,KAAMZ,EAASr3F,GACnCk4F,EAAOD,aAAa,KAAMZ,EAASp3F,GACnCi4F,EAAOD,aAAa,OAAQZ,EAAStD,OAErC8D,EAAIn7C,YAAYw7C,MAGlB,IAAIn2F,EAAS,6BACTwV,EAAS,+FAAiHkgF,EAAO,IAAMC,EAAO,IAAMC,EAAO,IAAMC,EAAxJ,YAAoLD,EAApL,aAAiNC,EAAjN,KACT7wE,EAAO8wE,EAAIM,UAGf,QAAavrG,IAATm6B,EAAoB,CACtB,IAAIqxE,EAAQlsF,SAAS/H,cAAc,SAC/B2gE,EAAQ+yB,EAAIpzB,WAChB2zB,EAAMD,UAAY,GAElB,IAAK,IAAIzvG,EAAI,EAAGA,EAAIo8E,EAAMt6E,OAAQ9B,GAAK,EACrC0vG,EAAM17C,YAAYooB,EAAMp8E,GAAG2vG,WAAU,IAGvCtxE,EAAOqxE,EAAMD,UAGf,IAAIlxE,EAAS,SACTpa,EAAO0K,EAASwP,EAAOE,EAE3B,OAAOllB,EAASu2F,KAAKzrF,IAGvBq9D,EAAargF,UAAU0uG,SAAW,SAAUtB,GAC1C,IAAIuB,EAASpwG,KAEbA,KAAKwb,QAELxb,KAAK4uG,UAAUC,GAAa,SAAUrD,EAAOC,GAC3C,OAAO2E,EAAO1E,WAAWF,EAAOC,EAAOl0F,MAAOk0F,EAAOxvD,QACpD,SAAUgzD,GACX,OAAOmB,EAAOtE,SAASmD,MAGzBjvG,KAAKkqG,MAAQ2E,GAGf/sB,EAAargF,UAAU4uG,OAAS,WAC9B,OAAOrwG,KAAKkqG,OAGeroG,EAAoB,KAAOigF,GAKlD,SAAUhiF,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DuI,EAAyCvI,EAAoB,GAC7D48B,EAAsC58B,EAAoB,GAC1DkwG,EAA4ClwG,EAAoB,IAChE8xE,EAA4C9xE,EAAoB,GAC1DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO0uG,KAanG,IAAIA,EAAiC,SAAUz7F,GAE3C,SAASy7F,EAAgB1vG,EAAMiyB,QACd,IAATjyB,IAAmBA,EAAO,WACX,IAAfiyB,IAAyBA,EAAa,MAC1C,IAAI/d,EAAQD,EAAOtU,KAAKR,OAASA,KASjC,OARA+U,EAAM+8E,qBAAsB,EAC5B/8E,EAAMy7F,cAAe,EACf3vG,IACFkU,EAAMlU,KAAOA,GAEXiyB,IACF/d,EAAM+d,WAAaA,GAEhB/d,EAoIX,OAjJA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFmwG,EAAiBz7F,GAejGy7F,EAAgB9uG,UAAUy6D,SAAW,SAAUz3C,GAC3CzkB,KAAKykB,KAAOA,EACZzkB,KAAKywG,mBAETF,EAAgB9uG,UAAUmN,QAAU,WAChC,MAAO,mBAEX5N,OAAOC,eAAesvG,EAAgB9uG,UAAW,OAAQ,CAIrDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,OAAQ,KAEzCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAesvG,EAAgB9uG,UAAW,oBAAqB,CAIlEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,qBAAqB,IAEtDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,oBAAqB5L,IAE/C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAesvG,EAAgB9uG,UAAW,aAAc,CAK3DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAAc,KAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,GACpC/D,KAAKywG,mBAETtvG,YAAY,EACZD,cAAc,IAElBqvG,EAAgB9uG,UAAUklD,eAAiB,WACvC3mD,KAAK8xF,qBAAsB,GAE/Bye,EAAgB9uG,UAAU8lD,iBAAmB,WACzCvnD,KAAK8xF,qBAAsB,GAE/Bye,EAAgB9uG,UAAUkqE,iBAAmB,WACzC3rE,KAAKwwG,cAAe,GAExBD,EAAgB9uG,UAAUmqE,cAAgB,SAAU1M,EAAkBxsC,EAAQvkB,GACtEnO,KAAKwwG,eAETxwG,KAAK0wG,kBAAkBxxC,EAAkBxsC,EAAQvkB,GACjDnO,KAAKwwG,cAAe,IAExBD,EAAgB9uG,UAAUo8D,cAAgB,SAAUnrC,EAAQvkB,GACxDnO,KAAK0wG,kBAAkB,KAAMh+E,EAAQvkB,IAEzCnN,OAAOC,eAAesvG,EAAgB9uG,UAAW,QAAS,CACtDL,IAAK,WACD,GAAKpB,KAAKykB,KAEV,OAAOzkB,KAAKykB,KAAKmkC,YAAY5oD,KAAKa,OAEtCM,YAAY,EACZD,cAAc,IAElBqvG,EAAgB9uG,UAAUgL,SAAW,SAAU1I,GACtC/D,KAAKykB,MAEVzkB,KAAKykB,KAAKokC,YAAY7oD,KAAKa,KAAMkD,IAErC/C,OAAOC,eAAesvG,EAAgB9uG,UAAW,mBAAoB,CACjEL,IAAK,WACD,QAAUpB,KAAKykB,OACVzkB,KAAKge,qBACJhe,KAAK8yB,aACN9yB,KAAK8xF,uBACJ9xF,KAAKa,MAEfM,YAAY,EACZD,cAAc,IAElBqvG,EAAgB9uG,UAAUgvG,gBAAkB,WACnCzwG,KAAK2wG,kBAEV3wG,KAAK69D,cAAc79D,KAAKykB,KAAKyH,oBAAqBlsB,KAAKykB,KAAK0H,0BAEhEokF,EAAgB9uG,UAAUivG,kBAAoB,SAAUxxC,EAAkBxsC,EAAQvkB,GACzEnO,KAAK2wG,mBAEV3wG,KAAK4wG,iBAAiBl+E,GACtB1yB,KAAK2mD,iBACCuY,GACFl/D,KAAK6wG,wBAAwB3xC,EAAkBxsC,EAAQvkB,GAE3DnO,KAAK6xF,iBAAiB7+D,IAAIN,EAAQvkB,KAEtCoiG,EAAgB9uG,UAAUovG,wBAA0B,SAAU3xC,EAAkBxsC,EAAQvkB,GACpF,IAAI+tB,EAAYl8B,KAAK6xF,iBAAiB51D,eACtC,GAAKC,EAEL,IAAK,IAAI57B,EAAI,EAAGA,EAAI4+D,EAAiB98D,OAAQ9B,IAAK,CAC9C,IAAIwwG,EAAW5xC,EAAiB5+D,GAC5BwwG,IAAa9wG,MAAQk8B,EAAUxwB,QAAQolG,EAASjwG,MAAQ,IAE5DiwG,EAASllC,cAAc1M,EAAkBxsC,EAAQvkB,GACjDukB,EAAOo+E,EAASjwG,MAAQiwG,EAASnwG,SAGzC4vG,EAAgB9uG,UAAUmvG,iBAAmB,SAAUl+E,GACnD,IAAI3d,EAAQ/U,KACNA,KAAK6xF,mBAEX7xF,KAAK6xF,iBAAmB,IAAIye,EAA0C,KAA4BtwG,KAAK8yB,YACvG9yB,KAAK6xF,iBAAiB9+D,cAAgB,SAAUhnB,GACvCpD,EAAuC,KAAmBmP,iBAAiB/L,EAAUgJ,EAAMpU,QAC5FoU,EAAMtI,SAASV,GAEnBgJ,EAAMwyC,sBAGPgpD,EAlJyB,CAmJlCvzE,EAAoC,MAEtCk1C,EAA0C,KAAsB3jE,SAAS,kBAAmB,CAAC,QAAS,wBAAyB,8BAA8B,WACzJ,OAAO,IAAIgiG,IACZ,SAKG,SAAUzwG,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE48B,EAAsC58B,EAAoB,GAC1DkwG,EAA4ClwG,EAAoB,IAE1DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOkvG,KACpE3wG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmvG,KAKnG,IAAIC,EAAgC,SAAUn8F,GAE1C,SAASm8F,EAAen+E,QACD,IAAfA,IAAyBA,EAAa,MAC1C,IAAI/d,EAAQD,EAAOtU,KAAKR,OAASA,KAGjC,OAFA+U,EAAM8L,wBAAwB,OAAQ9L,GACtCA,EAAM+d,WAAaA,EACZ/d,EAuCX,OA7CA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF6wG,EAAgBn8F,GAQhGm8F,EAAexvG,UAAUmN,QAAU,WAC/B,MAAO,kBAEXqiG,EAAexvG,UAAUqqB,aAAe,SAAU4G,EAAQvkB,GACtD,QAAKnO,KAAK8yB,YAEH,IAAIw9E,EAA0C,KAA2BtwG,KAAK8yB,YAAYE,IAAIN,EAAQvkB,IAEjHnN,OAAOC,eAAegwG,EAAexvG,UAAW,aAAc,CAI1DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAAc,KAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegwG,EAAexvG,UAAW,UAAW,CACvDL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,SAErChO,YAAY,EACZD,cAAc,IAElB+vG,EAAexvG,UAAUmf,UAAY,WACjC,OAAS5gB,KAAKyP,SAAWzP,KAAKyP,SAASmR,YAAc,IAEzDqwF,EAAexvG,UAAU84B,gBAAkB,SAAU/tB,GACjD,OAASxM,KAAKyP,SAAWzP,KAAKyP,SAAS8qB,gBAAgB/tB,GAAQ,MAEnEykG,EAAexvG,UAAUg5B,iBAAmB,SAAUjuB,GAClD,OAAOxM,KAAKyP,SAAWzP,KAAKyP,SAASgrB,iBAAiBjuB,GAAQA,GAE3DykG,EA9CwB,CA+CjCj0E,EAAoC,MAQlC+zE,EAAmC,SAAUj8F,GAE7C,SAASi8F,EAAkBj+E,EAAYvM,QAChB,IAAfuM,IAAyBA,EAAa,WAC7B,IAATvM,IAAmBA,EAAO,MAC9B,IAAIxR,EAAQD,EAAOtU,KAAKR,KAAM8yB,IAAe9yB,KAG7C,OAFA+U,EAAM8L,wBAAwB,OAAQ9L,GACtCA,EAAMwR,KAAOA,EACNxR,EA0BX,OAjCA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF2wG,EAAmBj8F,GASnGi8F,EAAkBtvG,UAAUmN,QAAU,WAClC,MAAO,qBAEX5N,OAAOC,eAAe8vG,EAAkBtvG,UAAW,OAAQ,CAKvDL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,SAEzC3D,IAAK,SAAU9K,GACXX,KAAKsP,yBAAyB,OAAQ3O,IAE1CQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe8vG,EAAkBtvG,UAAW,UAAW,CAC1DL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,SAErChO,YAAY,EACZD,cAAc,IAEX6vG,EAlC2B,CAmCpCE,GAOED,EAAkC,SAAUl8F,GAE5C,SAASk8F,EAAiBl+E,EAAYkqC,QACf,IAAflqC,IAAyBA,EAAa,WAC9B,IAARkqC,IAAkBA,EAAM,MAC5B,IAAIjoD,EAAQD,EAAOtU,KAAKR,KAAM8yB,IAAe9yB,KAG7C,OAFA+U,EAAM8L,wBAAwB,MAAO9L,GACrCA,EAAMioD,IAAMA,EACLjoD,EA0BX,OAjCA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF4wG,EAAkBl8F,GASlGk8F,EAAiBvvG,UAAUmN,QAAU,WACjC,MAAO,oBAEX5N,OAAOC,eAAe+vG,EAAiBvvG,UAAW,MAAO,CAKrDL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,QAEzC3D,IAAK,SAAU9K,GACXX,KAAKsP,yBAAyB,MAAO3O,IAEzCQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+vG,EAAiBvvG,UAAW,SAAU,CACxDL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,QAErChO,YAAY,EACZD,cAAc,IAEX8vG,EAlC0B,CAmCnCC,GAEFp2F,EAA0C,KAAsBtM,SAAS,iBAAkB,CAAC,yBAAyB,WACjH,OAAO,IAAI0iG,IACZ,QACHp2F,EAA0C,KAAsBtM,SAAS,oBAAqB,CAAC,CAAE1N,KAAM,YAAa+J,sBAAuB,aAAc,WACrJ,OAAO,IAAImmG,IACZ,kBACHl2F,EAA0C,KAAsBtM,SAAS,mBAAoB,CAAC,CAAE1N,KAAM,aAAc+J,sBAAuB,YAAa,WACpJ,OAAO,IAAIomG,IACZ,mBAKG,SAAUlxG,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D8wG,EAA6C9wG,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOsvG,KACpE/wG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmX,KAenG,IAAIm4F,EAA6B,SAAUr8F,GAEvC,SAASq8F,EAAYz8F,EAAS08F,EAAU/wD,EAAO3zB,GAC3C,IAAI3X,EAAQD,EAAOtU,KAAKR,OAASA,KASjC,OARA+U,EAAML,QAAUA,EAChBK,EAAMq8F,SAAWA,EACjBr8F,EAAMsrC,MAAQA,EACdtrC,EAAM2X,SAAWA,EACjB3X,EAAMlU,KAAO,cAC0B,oBAA5B29C,MAAM6yD,mBACb7yD,MAAM6yD,kBAAkBt8F,EAAOo8F,GAE5Bp8F,EA+EX,OA1FA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF+wG,EAAar8F,GAa7Fq8F,EAAYG,aAAe,SAAUF,EAAU/wD,GAC3C,SAASkxD,EAAIh3F,GACT,OAAOA,EAAGD,WAAW,GAAGnE,SAAS,IAAIqE,cAEzC,SAASg3F,EAAc5vG,GACnB,OAAOA,EACFoL,QAAQ,MAAO,QACfA,QAAQ,KAAM,OACdA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,gBAAgB,SAAUuN,GAAM,MAAO,OAASg3F,EAAIh3F,MAC5DvN,QAAQ,yBAAyB,SAAUuN,GAAM,MAAO,MAAQg3F,EAAIh3F,MAE7E,SAASk3F,EAAY7vG,GACjB,OAAOA,EACFoL,QAAQ,MAAO,QACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,KAAM,OACdA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,MAAO,OACfA,QAAQ,gBAAgB,SAAUuN,GAAM,MAAO,OAASg3F,EAAIh3F,MAC5DvN,QAAQ,yBAAyB,SAAUuN,GAAM,MAAO,MAAQg3F,EAAIh3F,MAE7E,SAASm3F,EAAoBC,GACzB,OAAQA,EAAY9rG,MAChB,IAAK,UACD,MAAO,IAAO2rG,EAAcG,EAAYnlG,MAAQ,IACpD,IAAK,QACD,IAAIolG,EAAeD,EAAYE,MAAMp/F,KAAI,SAAUq/F,GAC/C,OAAO5uG,MAAMoC,QAAQwsG,GACfL,EAAYK,EAAK,IAAM,IAAML,EAAYK,EAAK,IAC9CL,EAAYK,MAEtB,MAAO,KAAOH,EAAYI,SAAW,IAAM,IAAMH,EAAe,IACpE,IAAK,MACD,MAAO,gBACX,IAAK,MACD,MAAO,eACX,IAAK,QACD,OAAOD,EAAYh9F,aAG/B,SAASq9F,EAAiBC,GACtB,IACI3xG,EACA+C,EAFA6uG,EAAeD,EAAUx/F,IAAIi/F,GAIjC,GADAQ,EAAattG,OACTstG,EAAa9vG,OAAS,EAAG,CACzB,IAAK9B,EAAI,EAAG+C,EAAI,EAAG/C,EAAI4xG,EAAa9vG,OAAQ9B,IACpC4xG,EAAa5xG,EAAI,KAAO4xG,EAAa5xG,KACrC4xG,EAAa7uG,GAAK6uG,EAAa5xG,GAC/B+C,KAGR6uG,EAAa9vG,OAASiB,EAE1B,OAAQ6uG,EAAa9vG,QACjB,KAAK,EACD,OAAO8vG,EAAa,GACxB,KAAK,EACD,OAAOA,EAAa,GAAK,OAASA,EAAa,GACnD,QACI,OAAOA,EAAahhG,MAAM,GAAI,GAAGysC,KAAK,MAChC,QACAu0D,EAAaA,EAAa9vG,OAAS,IAGrD,SAAS+vG,EAAcC,GACnB,OAAOA,EAAS,IAAOZ,EAAcY,GAAU,IAAO,eAE1D,MAAO,YAAcJ,EAAiBZ,GAAY,QAAUe,EAAc9xD,GAAS,WAEhF8wD,EA3FqB,CA4F9B3yD,OAEF,SAAS6zD,EAAUjP,EAAOx9F,GACtBA,OAAsBpB,IAAZoB,EAAwBA,EAAU,GAC5C,IA2LI0sG,EA3LAC,EAAa,GACbC,EAAyB,CAAEr4B,WAAYs4B,IACvCC,EAAwBD,GACxBE,EAAS,SAAUn+C,EAAMo+C,GACzB,OAAOC,GAAmBr+C,EAAMo+C,GAAM,IAEtCE,EAAS,KACTC,EAASC,GAAuB,MAAM,GACtCC,EAAS,KACTC,EAASF,GAAuB,MAAM,GACtCG,EAAS,WAAc,MAAO,MAC9BC,EAAS,KACTC,EAASL,GAAuB,MAAM,GACtCM,EAAS,MACTC,EAASP,GAAuB,OAAO,GACvCQ,EAAU,WAAc,MAAO,OAC/BC,EAAU,SAAUj/C,EAAMo+C,GAC1B,OAAOC,GAAmBr+C,EAAMo+C,IAEhCc,EAAU,KACVC,EAAUX,GAAuB,MAAM,GACvCY,EAAU,cACVC,EAAUb,GAAuB,eAAe,GAChDc,EAAU,WAAc,MAAO,eAC/BC,EAAU,KACVC,EAAUhB,GAAuB,MAAM,GACvCiB,EAAU,iBACVC,EAAUlB,GAAuB,kBAAkB,GACnDmB,EAAU,WAAc,MAAO,kBAC/BC,EAAU,IACVC,EAAUrB,GAAuB,KAAK,GACtCsB,EAAU,QACVC,EAAUvB,GAAuB,SAAS,GAC1CwB,EAAU,WAAc,MAAO,SAC/BC,EAAU,KACVC,EAAU1B,GAAuB,MAAM,GACvC2B,EAAU,WACVC,EAAU5B,GAAuB,YAAY,GAC7C6B,EAAU,WAAc,MAAO,YAC/BC,EAAU,IACVC,EAAU/B,GAAuB,KAAK,GACtCgC,EAAU,OACVC,EAAUjC,GAAuB,QAAQ,GACzCkC,EAAU,WAAc,MAAO,QAC/BC,EAAU,IACVC,EAAUpC,GAAuB,KAAK,GACtCqC,EAAU,UACVC,EAAUtC,GAAuB,WAAW,GAC5CuC,EAAU,WAAc,MAAO,WAC/BC,EAAU,IACVC,EAAUzC,GAAuB,KAAK,GACtC0C,EAAU,WAAc,MAAO,QAC/BC,EAAU,IACVC,GAAU5C,GAAuB,KAAK,GACtC6C,GAAU,WAAc,MAAO,SAC/BC,GAAU,IACVC,GAAU/C,GAAuB,KAAK,GACtCgD,GAAU,WAAc,MAAO,OAC/BC,GAAU,IACVC,GAAUlD,GAAuB,KAAK,GACtCmD,GAAU,WAAc,MAAO,OAC/BC,GAAU,IACVC,GAAUrD,GAAuB,KAAK,GACtCsD,GAAU,WAAc,MAAO,OAC/BC,GAAU,IACVC,GAAUxD,GAAuB,KAAK,GACtCyD,GAAU,QACVC,GAAU1D,GAAuB,SAAS,GAC1C2D,GAAU,WAAc,MAAO,SAC/BC,GAAU,KACVC,GAAU7D,GAAuB,MAAM,GACvC8D,GAAU,WACVC,GAAU/D,GAAuB,YAAY,GAC7CgE,GAAU,UACVC,GAAUjE,GAAuB,WAAW,GAC5CkE,GAAU,WAAc,MAAO,YAC/BC,GAAU,cACVC,GAAUpE,GAAuB,eAAe,GAChDqE,GAAU,aACVC,GAAUtE,GAAuB,cAAc,GAC/CuE,GAAU,WAAc,MAAO,eAC/BC,GAAU,QACVC,GAAUzE,GAAuB,SAAS,GAC1C0E,GAAU,WAAc,MAAO,SAC/BC,GAAU,QACVC,GAAU5E,GAAuB,SAAS,GAC1C6E,GAAU,WAAc,MAAO,SAC/BC,GAAU,IACVC,GAAU/E,GAAuB,KAAK,GACtCgF,GAAU,IACVC,GAAUjF,GAAuB,KAAK,GACtCkF,GAAU,SAAUC,GAAQ,OAAOA,GACnCC,GAAU,SAAUv3G,EAAMkgD,GAAU,OAAO,IAAImwD,EAA2C,KAA2BrwG,EAAMkgD,IAC3Hs3D,GAAU,IACVC,GAAUtF,GAAuB,KAAK,GACtCuF,GAAU,SACVC,GAAUxF,GAAuB,UAAU,GAC3CyF,GAAU,SAAUN,GAAQ,OAAO,IAAIjH,EAA2C,KAAwBiH,EAAM,WAChHO,GAAU,SAAUP,EAAM55D,GAAM,OAAO,IAAI2yD,EAA2C,KAAwBiH,EAAM55D,IACpHo6D,GAAU,QACVC,GAAU5F,GAAuB,SAAS,GAC1C6F,GAAU,WAAc,MAAO,SAC/BC,GAAU,WACVC,GAAU/F,GAAuB,YAAY,GAC7CgG,GAAU,WAAc,MAAO,YAC/BC,GAAU,YACVC,GAAUlG,GAAuB,aAAa,GAC9CmG,GAAW,OACXC,GAAWpG,GAAuB,QAAQ,GAC1CqG,GAAW,WAAc,OAAO,MAChCC,GAAW,SAAU34G,GAAS,OAAO,IAAIuwG,EAA2C,KAAiBvwG,IACrG44G,GAAW,IACXC,GAAWxG,GAAuB,KAAK,GACvCyG,GAAW,IACXC,GAAW1G,GAAuB,KAAK,GACvC2G,GAAW,SAAUh5G,GAAS,OAAO,IAAIuwG,EAA2C,KAAoBvwG,IACxGi5G,GAAW,IACXC,GAAW7G,GAAuB,KAAK,GACvC8G,GAAW,SAAUn5G,GAAS,OAAOA,GACrCo5G,GAAW,IACXC,GAAWhH,GAAuB,KAAM,GACxCiH,GAAW,IACXC,GAAWlH,GAAuB,KAAK,GACvCmH,GAAW,IACXC,GAAWpH,GAAuB,KAAK,GACvCqH,GAAW,SAAUC,GAAY,OAAOA,GACxCC,GAAW,IACXC,GAAWxH,GAAuB,KAAK,GACvCyH,GAAW,SAAUtC,EAAMvF,GAC3B,GAAY,MAARuF,EACA,OAAO,IAAIjH,EAA2C,KAAwB,IAClF,IAAIz4F,EAAQ,CAAC0/F,GACb,GAAIj1G,MAAMoC,QAAQstG,GAEd,IADA,IAAI8H,EAAUC,GAAa/H,GAClBtyG,EAAI,EAAGA,EAAIo6G,EAAQt4G,OAAQ9B,GAAK,EACrCmY,EAAM9T,KAAK+1G,EAAQp6G,IAG3B,OAAO,IAAI4wG,EAA2C,KAAwBz4F,IAE9EmiG,GAAW,OACXC,GAAW7H,GAAuB,QAAQ,GAC1C8H,GAAW,WAAc,OAAO,GAChCC,GAAW,QACXC,GAAWhI,GAAuB,SAAS,GAC3CiI,GAAW,WAAc,OAAO,GAChCC,GAAW,KACXC,GAAWnI,GAAuB,MAAM,GACxCoI,GAAW,WAAc,OAAOxuG,SAASJ,KAAQ,KACjD6uG,GAAW,QACXC,GAAWC,GAAqB,CAAC,MAAM,GAAO,GAC9CC,GAAW,SAAUC,EAAMx9C,GAAO,OAAe,MAARw9C,EAAex9C,GAAOA,GAC/Dy9C,GAAW,IACXC,GAAW3I,GAAuB,KAAK,GACvC4I,GAAW,WAAc,OAAOxjG,WAAW5L,OAC3CqvG,GAAW,WAAc,OAAOjvG,SAASJ,KAAQ,KACjDsvG,GAAW,IACXC,GAAW/I,GAAuB,KAAK,GACvCgJ,GAAW,WAAc,OAAO,GAChCC,GAAW,SAAUC,GAAS,OAAOA,EAAMv+D,KAAK,KAChDw+D,GAAW,MACXC,GAAWpJ,GAAuB,OAAO,GACzCqJ,GAAW,WAAc,MAAO,KAChCC,GAAW,MACXC,GAAWvJ,GAAuB,OAAQ,GAC1CwJ,GAAW,WAAc,MAAO,KAChCC,GAAW,WACXC,GAAWnB,GAAqB,CAAC,IAAM,IAAK,IAAK,MAAM,GAAM,GAC7DoB,GAAW,WAAc,OAAOnwG,MAChCowG,GAAW,SACXC,GAAWtB,GAAqB,CAAC,IAAK,MAAM,GAAM,GAClDuB,GAAW,SACXC,GAAWxB,GAAqB,CAAC,CAAC,IAAK,OAAO,GAAO,GACrDyB,GAAW,SACXC,GAAW1B,GAAqB,CAAC,CAAC,IAAK,OAAO,GAAO,GACrD2B,GAAW,YACXC,GAAW5B,GAAqB,CAAC,CAAC,IAAK,KAAM,CAAC,IAAK,OAAO,GAAO,GACjE6B,GAAWC,GAAqB,cAChCC,GAAW,aACXC,GAAWhC,GAAqB,CAAC,IAAK,KAAM,KAAM,OAAO,GAAO,GAChEiC,GAAc,EACdC,GAAe,EACfC,GAAsB,CAAC,CAAEC,KAAM,EAAGr8E,OAAQ,IAC1Cs8E,GAAiB,EACjBC,GAAsB,GACtBC,GAAkB,EAClBC,GAAmB,GAEvB,QAA0Bv5G,IAAtBoB,EAAQo4G,UAAyB,CACjC,KAAMp4G,EAAQo4G,aAAaxL,GACvB,MAAM,IAAIh0D,MAAM,mCAAqC54C,EAAQo4G,UAAY,MAE7EtL,EAAwBF,EAAuB5sG,EAAQo4G,WAE3D,SAASxxG,KACL,OAAO42F,EAAMhzF,UAAUqtG,GAAcD,IAiBzC,SAASxK,GAAuBiL,EAAOC,GACnC,MAAO,CAAEr4G,KAAM,UAAW2G,KAAMyxG,EAAOC,WAAYA,GAEvD,SAAS3C,GAAqB1J,EAAOE,EAAUmM,GAC3C,MAAO,CAAEr4G,KAAM,QAASgsG,MAAOA,EAAOE,SAAUA,EAAUmM,WAAYA,GAK1E,SAASC,KACL,MAAO,CAAEt4G,KAAM,OAEnB,SAASw3G,GAAqB1oG,GAC1B,MAAO,CAAE9O,KAAM,QAAS8O,YAAaA,GAEzC,SAASypG,GAAsBh6C,GAC3B,IACIziE,EADA08G,EAAUX,GAAoBt5C,GAElC,GAAIi6C,EACA,OAAOA,EAGP18G,EAAIyiE,EAAM,EACV,OAAQs5C,GAAoB/7G,GACxBA,IAEJ08G,EAAUX,GAAoB/7G,GAC9B08G,EAAU,CACNV,KAAMU,EAAQV,KACdr8E,OAAQ+8E,EAAQ/8E,QAEpB,MAAO3/B,EAAIyiE,EACqB,KAAxBg/B,EAAM9oF,WAAW3Y,IACjB08G,EAAQV,OACRU,EAAQ/8E,OAAS,GAGjB+8E,EAAQ/8E,SAEZ3/B,IAGJ,OADA+7G,GAAoBt5C,GAAOi6C,EACpBA,EAGf,SAASC,GAAoBC,EAAUC,GACnC,IAAIC,EAAkBL,GAAsBG,GACxCG,EAAgBN,GAAsBI,GAC1C,MAAO,CACHjnG,MAAO,CACHqwE,OAAQ22B,EACRZ,KAAMc,EAAgBd,KACtBr8E,OAAQm9E,EAAgBn9E,QAE5B2a,IAAK,CACD2rC,OAAQ42B,EACRb,KAAMe,EAAcf,KACpBr8E,OAAQo9E,EAAcp9E,SAIlC,SAASq9E,GAAS1M,GACVuL,GAAcI,KAGdJ,GAAcI,KACdA,GAAiBJ,GACjBK,GAAsB,IAE1BA,GAAoBl5G,KAAKstG,IAK7B,SAAS2M,GAAyB3M,EAAW5xD,EAAOw+D,GAChD,OAAO,IAAI1N,EAAYA,EAAYG,aAAaW,EAAW5xD,GAAQ4xD,EAAW5xD,EAAOw+D,GAEzF,SAASpM,KACL,IAAIqM,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAAIC,EAChCx8G,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAK4S,KACD5S,IAAO6F,EAEP,GADA5F,EAAK4S,KACD5S,IAAO4F,EAAY,CACnB3F,EAAK,GACLmS,EAAKvB,GACLwB,EAAKM,KACDN,IAAOzM,GACP0M,EAAKO,KACDP,IAAO1M,GACP2M,EAAKI,KACDJ,IAAO3M,GACP4M,EAAKI,KACDJ,IAAO5M,GACPyM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBJ,EAAKC,IAGLxB,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,GAET,MAAOwM,IAAOxM,EACV3F,EAAGjoG,KAAKo6G,GACRA,EAAKvB,GACLwB,EAAKM,KACDN,IAAOzM,GACP0M,EAAKO,KACDP,IAAO1M,GACP2M,EAAKI,KACDJ,IAAO3M,GACP4M,EAAKI,KACDJ,IAAO5M,GACPyM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBJ,EAAKC,IAGLxB,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,KAITiL,GAAcuB,EACdA,EAAKxM,GAGT3F,IAAO2F,GACPwM,EAAKO,KACDP,IAAOxM,GACPkL,GAAeqB,EACfpS,EAAKiG,EAAOhG,EAAIC,GAChBkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,OAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASU,KACL,IAAIV,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAO1K,GACjCpG,EAAKoG,EACL0K,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5L,IAGbrG,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBomG,GAC/CvG,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASzL,KAIjBxG,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKyG,KAET2L,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASS,KACL,IAAIT,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAK+S,KACD/S,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKU,KACDV,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKO,KACDP,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKU,KACDV,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKO,KACDP,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKiG,EAAOjG,EAAIC,GAChBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASY,KACL,IAAIZ,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAOpK,GACjC1G,EAAK0G,EACLoK,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAStL,IAGb3G,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBymG,GAC/C5G,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASpL,KAIjB7G,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK8G,KAETsL,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASW,KACL,IAAIX,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAKiT,KACDjT,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKY,KACDZ,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKS,KACDT,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKY,KACDZ,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKS,KACDT,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK+G,EAAQ/G,EAAIC,GACjBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASc,KACL,IAAId,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAO9J,GACjChH,EAAKgH,EACL8J,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAShL,IAGbjH,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,IAAI3wG,gBAAkB+mG,GAChDlH,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,IAC/BA,IAAe,KAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS9K,KAIjBnH,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKoH,KAETgL,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAOzJ,GACjCrH,EAAKqH,EACLyJ,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS3K,IAGbtH,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,IAAI3wG,gBAAkBonG,GAChDvH,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,IAC/BA,IAAe,KAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASzK,KAIjBxH,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKyH,KAET2K,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAK0H,EACLoJ,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAStK,IAGb3H,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBynG,GAC/C5H,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASpK,KAIjB7H,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK8H,KAETsK,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAO/I,GACjC/H,EAAK+H,EACL+I,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASjK,IAGbhI,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB8nG,GAC/CjI,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS/J,KAIjBlI,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKmI,KAETiK,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKoI,EACL0I,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5J,IAGbrI,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBmoG,GAC/CtI,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS1J,KAIjBvI,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKwI,KAET4J,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKyI,EACLqI,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASvJ,IAGb1I,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBwoG,GAC/C3I,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASrJ,KAIjB5I,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK6I,KAETuJ,EAAKpS,OAMzBqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASa,KACL,IAAIb,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAKmT,KACDnT,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKc,KACDd,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKW,KACDX,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKc,KACDd,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKW,KACDX,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKiG,EAAOjG,EAAIC,GAChBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASgB,KACL,IAAIhB,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAK8I,EACLgI,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASlJ,IAGb/I,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKgJ,KAEToJ,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKiJ,EACL6H,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS/I,KAGblJ,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKmJ,MAETiJ,EAAKpS,GAETqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASe,KACL,IAAIf,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAKqT,KACDrT,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKgB,KACDhB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKa,KACDb,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKgB,KACDhB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKa,KACDb,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKiG,EAAOjG,EAAIC,GAChBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASkB,KACL,IAAIlB,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,EACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKoJ,GACL0H,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5I,KAGbrJ,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKsJ,MAET8I,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKuJ,GACLuH,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASzI,KAGbxJ,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKyJ,MAET2I,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAK0J,GACLoH,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAStI,KAGb3J,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK4J,MAETwI,EAAKpS,IAGbqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASiB,KACL,IAAIjB,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAKuT,KACDvT,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKkB,KACDlB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKe,KACDf,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKkB,KACDlB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKe,KACDf,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKiG,EAAOjG,EAAIC,GAChBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASoB,KACL,IAAIpB,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAK6J,GACLiH,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASnI,KAGb9J,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB4pG,IAC/C/J,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASjI,MAIjBhK,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKiK,MAETmI,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASmB,KACL,IAAInB,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAKyT,KACDzT,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKoB,KACDpB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKiB,KACDjB,IAAO3M,IACP2M,EAAK,MAELA,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GACPyM,EAAKoB,KACDpB,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKiB,KACDjB,IAAO3M,IACP2M,EAAK,MAELA,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK+G,EAAQ/G,EAAIC,GACjBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASsB,KACL,IAAItB,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAO5G,IACjClK,EAAKkK,GACL4G,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS9H,KAGbnK,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBiqG,IAC/CpK,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5H,KAGbrK,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBmqG,IAC/CtK,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS1H,OAKrBvK,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKwK,MAET4H,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,IAAI3wG,gBAAkBsqG,IAChDzK,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,IAC/BA,IAAe,KAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASvH,KAGb1K,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,IAAI3wG,gBAAkBwqG,IAChD3K,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,IAC/BA,IAAe,KAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASrH,MAIjB5K,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK6K,MAETuH,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB2qG,IAC/C9K,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASlH,KAGb/K,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKgL,MAEToH,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB8qG,IAC/CjL,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS/G,KAGblL,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKmL,MAETiH,EAAKpS,KAIjBqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASqB,KACL,IAAIrB,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EACpBr8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKoL,GACL0F,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5G,KAGbrL,IAAO6F,GACP5F,EAAK2S,KACD3S,IAAO4F,GACP3F,EAAK6F,KACD7F,IAAO2F,GACPwM,EAAKO,KACDP,IAAOxM,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjBwB,EAAKhH,GACLwF,OAGAwB,EAAKzM,EACmB,IAApBuL,IACAa,GAAS1G,KAGb+G,IAAOzM,IACPyM,EAAK,MAELA,IAAOzM,GACPkL,GAAeqB,EACfpS,EAAKwL,GAAQtL,GACbkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKuB,KACDvB,IAAOvM,IACPuM,EAAKwB,KACDxB,IAAOvM,IACPuM,EAAKyB,KACDzB,IAAOvM,IACPuM,EAAK0B,SAKrBzC,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASuB,KACL,IAAIvB,EAAIpS,EAAIC,EAAIC,EAAImS,EAChBp8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACL9Q,EAAK+T,KACD/T,IAAO6F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjB7Q,EAAKmL,GACL0F,OAGA7Q,EAAK4F,EACmB,IAApBuL,IACAa,GAAS5G,KAGbpL,IAAO4F,GACP3F,EAAK8T,KACD9T,IAAO2F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjBuB,EAAK/G,GACLwF,OAGAuB,EAAKxM,EACmB,IAApBuL,IACAa,GAAS1G,KAGb8G,IAAOxM,IACPwM,EAAK,MAELA,IAAOxM,GACPkL,GAAeqB,EACfpS,EAAK0L,GAAQ1L,EAAIE,GACjBkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAETwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASwB,KACL,IAAIxB,EAAIpS,EAAIC,EAAIC,EACZjqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAK2L,GACLmF,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASrG,KAGb5L,IAAO6F,IACHnP,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB0rG,IAC/C7L,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASnG,MAIjB9L,IAAO6F,GACP5F,EAAK2S,KACD3S,IAAO4F,GACP3F,EAAK6F,KACD7F,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAK+L,GAAQ7L,GACbkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACL9Q,EAAK6T,KACD7T,IAAO6F,GACP5F,EAAK2S,KACD3S,IAAO4F,GACP3F,EAAK+T,KACD/T,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAKgM,GAAQhM,EAAIE,GACjBkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,IAGbwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS6B,KACL,IAAI7B,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB8rG,IAC/CjM,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS/F,KAGblM,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKmM,MAETiG,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBisG,IAC/CpM,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5F,KAGbrM,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKsM,MAET8F,EAAKpS,GAETqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASyB,KACL,IAAIzB,EAAIpS,EAAIC,EAAIC,EAAImS,EAChBp8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACL9Q,EAAK4S,KACD5S,IAAO6F,GACHnP,EAAMz3F,OAAO6xG,GAAa,KAAOvE,IACjCtM,EAAKsM,GACLuE,IAAe,IAGf7Q,EAAK4F,EACmB,IAApBuL,IACAa,GAASzF,KAGbvM,IAAO4F,IACHnP,EAAMz3F,OAAO6xG,GAAa,KAAOrE,IACjCxM,EAAKwM,GACLqE,IAAe,IAGf7Q,EAAK4F,EACmB,IAApBuL,IACAa,GAASvF,MAIjBzM,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK2M,KACLyF,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACL9Q,EAAK4S,KACD5S,IAAO6F,GACP5F,EAAKiU,KACDjU,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK4M,GAAS3M,GACdmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACL9Q,EAAK4S,KACD5S,IAAO6F,GAC+B,MAAlCnP,EAAM9oF,WAAWkjG,KACjB7Q,EAAK4M,GACLiE,OAGA7Q,EAAK4F,EACmB,IAApBuL,IACAa,GAASnF,KAGb7M,IAAO4F,GACP3F,EAAKiU,KACDjU,IAAO2F,GAC+B,MAAlCnP,EAAM9oF,WAAWkjG,KACjBuB,EAAKtF,GACL+D,OAGAuB,EAAKxM,EACmB,IAApBuL,IACAa,GAASjF,KAGbqF,IAAOxM,GACPkL,GAAeqB,EACfpS,EAAKiN,GAAS/M,GACdkS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAIjBwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS8B,KACL,IAAI9B,EAAIpS,EAAIC,EAAIC,EACZjqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKgC,KACDhC,IAAOvM,IACPuM,EAAKiC,KACDjC,IAAOvM,IACPuM,EAAK2B,KACD3B,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKkN,GACL4D,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS9E,KAGbnN,IAAO6F,GACP5F,EAAKqU,KACDrU,IAAO4F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjB5Q,EAAKgN,GACL4D,OAGA5Q,EAAK2F,EACmB,IAApBuL,IACAa,GAAS9E,KAGbjN,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAKoN,GAASnN,GACdmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKqN,GACLyD,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS3E,KAGbtN,IAAO6F,GACP5F,EAAKqU,KACDrU,IAAO4F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjB5Q,EAAKmN,GACLyD,OAGA5Q,EAAK2F,EACmB,IAApBuL,IACAa,GAAS3E,KAGbpN,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAKoN,GAASnN,GACdmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,OAMzBwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS0B,KACL,IAAI1B,EAAIpS,EAAIC,EAAIC,EACZjqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKuN,GACLuD,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASzE,KAGbxN,IAAO6F,GACP5F,EAAK+T,KACD/T,IAAO4F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjB5Q,EAAKuN,GACLqD,OAGA5Q,EAAK2F,EACmB,IAApBuL,IACAa,GAASvE,KAGbxN,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAK2N,GAAS1N,GACdmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAETwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS4B,KACL,IAAI5B,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EAAIC,EAC5Bv8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAOlB,GALAu6G,EAAKtB,GACL9Q,EAAK+F,KACD/F,IAAO6F,IACP7F,EAAK,MAELA,IAAO6F,EAAY,CACnB5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjBwB,EAAKzE,GACLiD,OAGAwB,EAAKzM,EACmB,IAApBuL,IACAa,GAASnE,KAGbwE,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKzM,KACDyM,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAET,MAAO3F,IAAO2F,EACV5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKO,KACDP,IAAOxM,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjBwB,EAAKzE,GACLiD,OAGAwB,EAAKzM,EACmB,IAApBuL,IACAa,GAASnE,KAGbwE,IAAOzM,GACP0M,EAAKK,KACDL,IAAO1M,GACP2M,EAAKzM,KACDyM,IAAO3M,GACPwM,EAAK,CAACA,EAAIC,EAAIC,EAAIC,GAClBtS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,KAITiL,GAAc5Q,EACdA,EAAK2F,GAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK+N,GAAS/N,EAAIC,GAClBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASgC,KACL,IAAIhC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkB+tG,IAC/ClO,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS9D,KAGbnO,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKoO,MAETgE,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,GAAG3wG,gBAAkBkuG,IAC/CrO,EAAKtJ,EAAMz3F,OAAO6xG,GAAa,GAC/BA,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS3D,KAGbtO,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKuO,MAET6D,EAAKpS,GAETqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASiC,KACL,IAAIjC,EAAIpS,EAAIC,EACRhqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAOtC,IACjCxO,EAAKwO,GACLsC,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASxD,KAGbzO,IAAO6F,GACP5F,EAAKsU,KACDtU,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK0O,KACL0D,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACDnC,GAAS1nC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASrD,KAGb5O,IAAO6F,IACP7F,EAAK,MAELA,IAAO6F,GACP5F,EAAKwU,KACDxU,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAK8O,GAAS9O,EAAIC,GAClBmS,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,IAGbwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASqC,KACL,IAAIrC,EAAIpS,EAAIC,EAAIC,EACZjqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACL9Q,EAAKuU,KACDvU,IAAO6F,GAC+B,KAAlCnP,EAAM9oF,WAAWkjG,KACjB7Q,EAAK+O,GACL8B,OAGA7Q,EAAK4F,EACmB,IAApBuL,IACAa,GAAShD,KAGbhP,IAAO4F,GACP3F,EAAKqU,KACDrU,IAAO2F,GACPkL,GAAeqB,EACfpS,EAAKkP,KACLkD,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACL9Q,EAAK0U,KACD1U,IAAO6F,GACP5F,EAAKsU,KACDtU,IAAO4F,IACP5F,EAAK,MAELA,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKmP,KACLiD,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,KAITiL,GAAcsB,EACdA,EAAKvM,GAELuM,IAAOvM,IACPuM,EAAKtB,GACiC,KAAlCpa,EAAM9oF,WAAWkjG,KACjB9Q,EAAKoP,GACL0B,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5C,KAGbrP,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKsP,MAET8C,EAAKpS,IAGbqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS+B,KACL,IAAI/B,EAAIpS,EAAIC,EACRhqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAKlB,GAHAu6G,EAAKtB,GACL9Q,EAAK,GACLC,EAAK0U,KACD1U,IAAO4F,EACP,MAAO5F,IAAO4F,EACV7F,EAAG/nG,KAAKgoG,GACRA,EAAK0U,UAIT3U,EAAK6F,EAQT,OANI7F,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKuP,GAASvP,IAElBoS,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASkC,KACL,IAAIlC,EAAIpS,EAAIC,EACRhqG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAKlB,GAHAu6G,EAAKtB,GACL9Q,EAAK,GACLC,EAAK2U,KACD3U,IAAO4F,EACP,MAAO5F,IAAO4F,EACV7F,EAAG/nG,KAAKgoG,GACRA,EAAK2U,UAIT5U,EAAK6F,EAQT,OANI7F,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKuP,GAASvP,IAElBoS,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASwC,KACL,IAAIxC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAOrB,IACjCzP,EAAKyP,GACLqB,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASvC,KAGb1P,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK2P,MAETyC,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDpa,EAAMz3F,OAAO6xG,GAAa,KAAOlB,IACjC5P,EAAK4P,GACLkB,IAAe,IAGf9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASpC,KAGb7P,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAK8P,MAETsC,EAAKpS,EACDoS,IAAOvM,IACPuM,EAAKtB,GACDf,GAAS9oC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASjC,KAGbhQ,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKiQ,MAETmC,EAAKpS,IAGbqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAASuC,KACL,IAAIvC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,OAAIy8G,GACA5B,GAAc4B,EAAOC,QACdD,EAAO76G,SAElBu6G,EAAKtB,GACDZ,GAASjpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS9B,KAGbnQ,IAAO6F,IACPkL,GAAeqB,EACfpS,EAAKiQ,MAETmC,EAAKpS,EACLqR,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,GAEX,SAAS2B,KACL,IAAI3B,EAAIpS,EAAIC,EAAIC,EAAImS,EAAIC,EAAIC,EACxBt8G,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAIlB,GAFAu6G,EAAKtB,GACL9Q,EAAK6U,KACD7U,IAAO6F,EAAY,CAInB,GAHA5F,EAAK,GACLC,EAAK4Q,GACLuB,EAAKkC,KACDlC,IAAOxM,EAAY,CACnByM,EAAK,GACLC,EAAKsC,KACL,MAAOtC,IAAO1M,EACVyM,EAAGr6G,KAAKs6G,GACRA,EAAKsC,KAELvC,IAAOzM,GACPwM,EAAK,CAACA,EAAIC,GACVpS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,QAITiL,GAAc5Q,EACdA,EAAK2F,EAET,MAAO3F,IAAO2F,EAIV,GAHA5F,EAAGhoG,KAAKioG,GACRA,EAAK4Q,GACLuB,EAAKkC,KACDlC,IAAOxM,EAAY,CACnByM,EAAK,GACLC,EAAKsC,KACL,MAAOtC,IAAO1M,EACVyM,EAAGr6G,KAAKs6G,GACRA,EAAKsC,KAELvC,IAAOzM,GACPwM,EAAK,CAACA,EAAIC,GACVpS,EAAKmS,IAGLvB,GAAc5Q,EACdA,EAAK2F,QAITiL,GAAc5Q,EACdA,EAAK2F,EAGT5F,IAAO4F,GACPkL,GAAeqB,EACfpS,EAAKiQ,KACLmC,EAAKpS,IAGL8Q,GAAcsB,EACdA,EAAKvM,QAITiL,GAAcsB,EACdA,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASmC,KACL,IAAInC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAalB,GAXAu6G,EAAK,GACDhC,GAASnpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5B,KAGbrQ,IAAO6F,EACP,MAAO7F,IAAO6F,EACVuM,EAAGn6G,KAAK+nG,GACJoQ,GAASnpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS5B,UAMrB+B,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASsC,KACL,IAAItC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAalB,GAXAu6G,EAAK,GACD9B,GAASrpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS1B,KAGbvQ,IAAO6F,EACP,MAAO7F,IAAO6F,EACVuM,EAAGn6G,KAAK+nG,GACJsQ,GAASrpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAAS1B,UAMrB6B,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASyC,KACL,IAAIzC,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAalB,GAXAu6G,EAAK,GACD5B,GAASvpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASxB,KAGbzQ,IAAO6F,EACP,MAAO7F,IAAO6F,EACVuM,EAAGn6G,KAAK+nG,GACJwQ,GAASvpC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASxB,UAMrB2B,EAAKvM,EAGT,OADAwL,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASQ,KACL,IAAIR,EAAIpS,EACJ/pG,EAAoB,GAAd66G,GAAmB,GACzB4B,EAASrB,GAAiBp7G,GAC9B,GAAIy8G,EAEA,OADA5B,GAAc4B,EAAOC,QACdD,EAAO76G,OAElBu5G,KACAgB,EAAK,GACDxB,GAAS3pC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASpB,KAGjB,MAAO7Q,IAAO6F,EACVuM,EAAGn6G,KAAK+nG,GACJ4Q,GAAS3pC,KAAKyvB,EAAM8d,OAAO1D,MAC3B9Q,EAAKtJ,EAAM8d,OAAO1D,IAClBA,OAGA9Q,EAAK6F,EACmB,IAApBuL,IACAa,GAASpB,KAYrB,OARAO,KACIgB,IAAOvM,IACP7F,EAAK6F,EACmB,IAApBuL,IACAa,GAASvB,KAGjBW,GAAiBp7G,GAAO,CAAE08G,QAAS7B,GAAaj5G,OAAQu6G,GACjDA,EAEX,SAASjM,GAAmBr+C,EAAMo+C,EAAM31D,GAEpC,YADuB,IAAnBA,IAA6BA,GAAiB,GAC3C21D,EAAKlxC,QAAO,SAAUn9D,EAAQ8f,GACjC,OAAO,IAAI6sF,EAA2C,KAAyB7sF,EAAS,GAAI9f,EAAQ8f,EAAS,GAAI44B,KAClHuX,GAEP,SAASmmD,GAAaliG,GAClB,MAAO,GAAGhQ,OAAO2T,MAAM,GAAI3D,GAG/B,GADA65F,EAAaI,IACTJ,IAAeC,GAAciL,KAAgBpa,EAAMhhG,OACnD,OAAOkwG,EAMP,MAHIA,IAAeC,GAAciL,GAAcpa,EAAMhhG,QACjDu8G,GAASR,MAEPS,GAAyBf,GAAqBD,GAAiBxa,EAAMhhG,OAASghG,EAAM8d,OAAOtD,IAAkB,KAAMA,GAAiBxa,EAAMhhG,OAC1Ik8G,GAAoBV,GAAgBA,GAAiB,GACrDU,GAAoBV,GAAgBA,KAGlD,IAAI5kG,EAAQq5F,GAKN,SAAUvyG,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChEohH,EAAuCphH,EAAoB,IACrDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO4/G,KAQnG,IAAIA,EAAgC,SAAU3sG,GAE1C,SAAS2sG,EAAe5gH,QACP,IAATA,IAAmBA,EAAO,IAC9B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAM8L,wBAAwB,UAAW9L,GAAO,GAChD,IAAIuM,EAAOvM,EAIX,OAHAA,EAAMuL,uCAAuC,WAAW,WACpDgB,EAAKogG,sBAEF3sG,EAmIX,OA5IA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFqhH,EAAgB3sG,GAWhG2sG,EAAehgH,UAAUmN,QAAU,WAC/B,MAAO,aAEX6yG,EAAehgH,UAAU4pB,sBAAwB,WAC7C,MAAO,QAEXo2F,EAAehgH,UAAUwkB,aAAe,WACpCnR,EAAOrT,UAAUwkB,aAAazlB,KAAKR,MACnCA,KAAK0hH,oBAET1gH,OAAOC,eAAewgH,EAAehgH,UAAW,UAAW,CACvDL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,YAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,UAAWvL,IAE7C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAewgH,EAAehgH,UAAW,aAAc,CAC1DL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,YAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAewgH,EAAehgH,UAAW,OAAQ,CACpDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,OAAQ,KAEzCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBugH,EAAehgH,UAAUigH,iBAAmB,WACxC,IAAIn7F,EAAO,GAEPA,EADEvmB,KAAK67E,sBACA77E,KAAK67E,wBAGL77E,KAAKi8E,cAEhBj8E,KAAKumB,KAAOA,EACNvmB,KAAK2hH,wBACP3hH,KAAK2hH,0BAEbF,EAAehgH,UAAUw6E,YAAc,WACnC,IAAI11D,EAAO,GAEPq7F,EAAQ,4BACR9nG,EAAM9Z,KAAK2vB,QACXjW,EAAa,EACbhV,EAAM,KACV,MAAmC,QAA3BA,EAAMk9G,EAAMC,KAAK/nG,IAAgB,CACjCpV,EAAImN,MAAQ6H,IACZ6M,EAAK5hB,KAAKmV,EAAInO,OAAO+N,EAAYhV,EAAImN,MAAQ6H,IAC7CA,EAAahV,EAAImN,OAErB,IAAI6K,EAAW1c,KAAK8hH,oBAAoBp9G,EAAI,IACtCgY,EACF6J,EAAK5hB,KAAK3E,KAAK+hH,mBAAmBrlG,IAGlC6J,EAAK5hB,KAAKmV,EAAInO,OAAO+N,EAAYhV,EAAImN,MAAQnN,EAAI,GAAGtC,OAASsX,IAEjEA,EAAahV,EAAImN,MAAQnN,EAAI,GAAGtC,OAKpC,OAHIsX,EAAaI,EAAI1X,QACjBmkB,EAAK5hB,KAAKmV,EAAInO,OAAO+N,EAAYI,EAAI1X,OAASsX,IAE3C6M,EAAKo3B,KAAK,IAAI3wC,QAAQ,IAAImoD,OAAO,OAAQ,KAAM,UAE1DssD,EAAehgH,UAAUqgH,oBAAsB,SAAUhoG,GAGrD,OAFAA,EAAMA,EAAInO,OAAO,EAAGmO,EAAI1X,OAAS,GACjC0X,EAAMA,EAAI9M,QAAQy0G,EAAeO,yBAA0B,IAAItqG,OACxD1X,KAAKi1C,kBAAkBn7B,IAElC2nG,EAAehgH,UAAUsgH,mBAAqB,SAAUrlG,GACpD,OAAM1c,KAAK87E,qBACA97E,KAAK87E,qBAAqBp/D,GAC9B,IAEX+kG,EAAehgH,UAAUwgH,kBAAoB,SAAUvlG,GACnD,OAAO1c,KAAKa,KAAO,IAAM6b,EAASoN,IAEtC23F,EAAehgH,UAAU2yC,aAAe,SAAUra,EAASloB,GACvDiD,EAAOrT,UAAU2yC,aAAa5zC,KAAKR,KAAM+5B,EAASloB,GAClD7R,KAAKkiH,oBAAoBnoF,GACzBA,EAAQ6Z,YAAc,IAE1B6tE,EAAehgH,UAAU6yC,gBAAkB,SAAUva,GACjD,IAAIooF,EAAYniH,KAAKoiH,sBAAsBroF,GAC3C/5B,KAAK2vB,QAAU3vB,KAAK2vB,QAAQ3iB,QAAQm1G,EAAW,IAC/CrtG,EAAOrT,UAAU6yC,gBAAgB9zC,KAAKR,KAAM+5B,IAEhD0nF,EAAehgH,UAAU24C,oBAAsB,SAAU/3B,EAAKngB,EAAQm4C,KACtEonE,EAAehgH,UAAUygH,oBAAsB,SAAUnoF,GACrD,IAAI/5B,KAAKge,kBAAT,CAEA,IAAIxR,EAAOxM,KAAKoiH,sBAAsBroF,GACjC/5B,KAAKqiH,mBAAmB71G,KACzBxM,KAAK2vB,QAAU3vB,KAAK2vB,QAAUnjB,KAGtCi1G,EAAehgH,UAAU4gH,mBAAqB,SAAU71G,EAAM81G,GAE1D,QADiB,IAAbA,IAAuBA,EAAW,OACjCtiH,KAAKslB,eAAkBkf,SAAWA,OAAO+9E,aAC1C,OAAO,EACX,IAAIC,EAAMh+E,OAAO+9E,eACjB,GAAIC,EAAIC,YAAcD,EAAIE,WAAY,CAClC,IAAIC,EAAQH,EAAIC,WAAW,GAC3BE,EAAMC,iBACND,EAAME,WAAW/+F,SAASywC,eAAe/nD,IACzC,IAAI8U,EAAOthB,KACX,GAAIshB,EAAKwhG,WAAY,CACjB,IAAIhpG,EAAMwH,EAAKwhG,WAAWR,GAC1BtiH,KAAK2vB,QAAU7V,EAEnB,OAAO,EAEX,OAAO,GAEX2nG,EAAehgH,UAAU2gH,sBAAwB,SAAUroF,GACvD,MAAO,IAAM0nF,EAAeO,yBAA2BjoF,EAAQl5B,KAAO,KAE1E4gH,EAAeO,yBAA2B,WACnCP,EA7IwB,CA8IjCD,EAAqC,MAEvC3mG,EAA0C,KAAsBtM,SAAS,YAAa,CAAC,CAAE1N,KAAM,eAAgB+J,sBAAuB,gBAAiB,WACnJ,OAAO,IAAI62G,IACZ,UAKG,SAAU3hH,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF2iH,EAAsB,CACtBr6B,aAAc,SACdC,aAAc,SACdC,aAAc,YACdlmD,aAAc,kBACdsmD,cAAe,SACfK,YAAa,sCACbC,iBAAkB,8BAClBE,cAAe,yBACfvlC,eAAgB,UAChBwlC,cAAe,2BACfE,uBAAwB,0CACxBC,aAAc,8BACdC,cAAe,oCACfC,cAAe,8BACfC,iBAAkB,yCAClBC,iBAAkB,mCAClBC,eAAgB,wCAChBC,eAAgB,yCAChBC,cAAe,iEACfC,WAAY,4CACZC,WAAY,2CACZC,aAAc,oCACdE,gBAAiB,4BACjBC,mBAAoB,sDACpBC,cAAe,mCACfC,mBAAoB,yBACpBC,cAAe,8DACf7L,OAAQ,WACRiM,UAAW,YAEfpwE,EAA6C,KAA8BhX,QAAQ,MAAQm/G,EAC3FnoG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxF4iH,EAAmB,CACnBt6B,aAAc,QACdC,aAAc,SACdC,aAAc,OACdG,gBAAiB,SACjBC,cAAe,kBACfC,aAAc,YACdC,kBAAmB,SACnBxmD,aAAc,0BACd2mD,YAAa,mDACbC,iBAAkB,yCAClBC,uBAAwB,gDACxBC,cAAe,2BACfvlC,eAAgB,cAChBtjD,MAAO,QACP8oF,cAAe,sCACfC,qBAAsB,8CACtBC,uBAAwB,kDACxBC,aAAc,mCACdC,cAAe,sCACfC,cAAe,8CACfC,iBAAkB,6DAClBC,iBAAkB,iCAClBC,eAAgB,oCAChBC,eAAgB,4CAChBC,cAAe,yFACfC,WAAY,6DACZC,WAAY,4DACZC,aAAc,mDACdC,kBAAmB,wDACnBC,gBAAiB,qCACjBC,mBAAoB,sGACpBC,cAAe,gDACfC,mBAAoB,mCACpBC,cAAe,+FACfC,YAAa,eACb7mD,WAAY,wBACZ8mD,cAAe,iCACfC,oBAAqB,sCACrBp8B,UAAW,qBACXowB,OAAQ,kBACRiM,UAAW,oBACXhyC,SAAU,oBACViyC,YAAa,sBACbC,aAAc,UACdC,cAAe,SACfC,WAAY,MACZC,WAAY,wCACZC,gBAAiB,oEACjBC,kBAAmB,qCACnBhnD,gBAAiB,WACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,mDACfC,eAAgB,wCAChBC,iBAAkB,4BAClBC,cAAe,gEACfC,eAAgB,+CAChBC,iBAAkB,mCAClBC,aAAc,aACdC,aAAc,oBACdE,kBAAmB,uBAGvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQo/G,EAC3FpoG,EAA6C,KAA8B/W,YAAY,MAAQ,aAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF6iH,EAAuB,CACvBv6B,aAAc,WACdC,aAAc,UACdC,aAAc,UACdI,cAAe,uBACftmD,aAAc,oBACd2mD,YAAa,uDACbC,iBAAkB,oCAClBE,cAAe,kCACfvlC,eAAgB,iBAChBwlC,cAAe,mCACfE,uBAAwB,oDACxBC,aAAc,kCACdC,cAAe,wCACfC,cAAe,yCACfC,iBAAkB,sDAClBC,iBAAkB,wCAClBC,eAAgB,8CAChBC,eAAgB,gDAChBC,cAAe,6DACfC,WAAY,wCACZC,WAAY,0CACZC,aAAc,gDACdE,gBAAiB,4CACjBC,mBAAoB,sFACpBC,cAAe,yCACfC,mBAAoB,uCACpBC,cAAe,iFACf7L,OAAQ,oBACRiM,UAAW,sBACXk4B,kBAAmB,iBACnBC,mBAAoB,gBACpBC,kBAAmB,iBACnBj4B,cAAe,UACfC,WAAY,UAEhBxwE,EAA6C,KAA8BhX,QAAQ,MAAQq/G,EAC3FroG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFijH,EAAqB,CACrB36B,aAAc,YACdC,aAAc,QACdC,aAAc,SACdI,cAAe,yBACftmD,aAAc,mBACd2mD,YAAa,oCACbC,iBAAkB,iCAClBE,cAAe,+BACfvlC,eAAgB,WAChBwlC,cAAe,8BACfE,uBAAwB,sCACxBC,aAAc,sCACdC,cAAe,oCACfC,cAAe,qCACfC,iBAAkB,oDAClBC,iBAAkB,oCAClBC,eAAgB,uCAChBC,eAAgB,2CAChBC,cAAe,wEACfC,WAAY,iDACZC,WAAY,iDACZC,aAAc,4CACdE,gBAAiB,oCACjBC,mBAAoB,iDACpBC,cAAe,gDACfC,mBAAoB,gCACpBC,cAAe,6DACf7L,OAAQ,eACRiM,UAAW,aAEfpwE,EAA6C,KAA8BhX,QAAQ,MAAQy/G,EAC3FzoG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFkjH,EAAsB,CACtB56B,aAAc,UACdC,aAAc,SACdC,aAAc,SACdG,gBAAiB,QACjBC,cAAe,mBACfC,aAAc,QACdC,kBAAmB,YACnBxmD,aAAc,kBACd2mD,YAAa,kCACbC,iBAAkB,gCAClBC,uBAAwB,oEACxBC,cAAe,uCACfvlC,eAAgB,UAChBtjD,MAAO,QACP8oF,cAAe,+BACfC,qBAAsB,uCACtBC,uBAAwB,2CACxBC,aAAc,gBACdC,cAAe,yBACfC,cAAe,yCACfC,iBAAkB,6CAClBC,iBAAkB,4BAClBC,eAAgB,6CAChBC,eAAgB,8CAChBC,cAAe,+EACfC,WAAY,+CACZC,WAAY,+CACZC,aAAc,2CACdC,kBAAmB,wCACnBC,gBAAiB,8CACjBC,mBAAoB,2EACpBC,cAAe,uCACfC,mBAAoB,wCACpBC,cAAe,uEACfC,YAAa,cACb7mD,WAAY,kBACZ8mD,cAAe,qBACfC,oBAAqB,8BACrBp8B,UAAW,iBACXowB,OAAQ,eACRiM,UAAW,QACXhyC,SAAU,YACViyC,YAAa,QACbC,aAAc,OACdC,cAAe,UACfC,WAAY,QACZC,WAAY,0CACZC,gBAAiB,wDACjBC,kBAAmB,wBACnBhnD,gBAAiB,YACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,+CACfC,eAAgB,kCAChBC,iBAAkB,0BAClBC,cAAe,6DACfC,eAAgB,yCAChBC,iBAAkB,iCAClBC,aAAc,OACdC,aAAc,QACdE,kBAAmB,mBAEvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQ0/G,EAC3F1oG,EAA6C,KAA8B/W,YAAY,MAAQ,SAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAKxFmjH,EAAqB,CACrB76B,aAAc,SACdC,aAAc,WACdC,aAAc,YACdG,gBAAiB,QACjBC,cAAe,cACfC,aAAc,OACdC,kBAAmB,kBACnBxmD,aAAc,qBACdymD,yBAA0B,oBAC1BC,sBAAuB,4BACvBC,YAAa,2DACbC,iBAAkB,+CAClBC,uBAAwB,yEACxBC,cAAe,qCACfvlC,eAAgB,UAChBtjD,MAAO,SACP8oF,cAAe,4BACfC,qBAAsB,gDACtBE,aAAc,mCACdC,cAAe,gCACfI,eAAgB,mCAChBC,eAAgB,yCAChBJ,cAAe,iDACfC,iBAAkB,iEAClBC,iBAAkB,6CAClBG,cAAe,oFACfC,WAAY,uDACZC,WAAY,uDACZC,aAAc,gCACdC,kBAAmB,8CACnBC,gBAAiB,4CACjBC,mBAAoB,8EACpBC,cAAe,0DACfC,mBAAoB,gCACpBhB,uBAAwB,0CACxBiB,cAAe,yFACfC,YAAa,aACb7mD,WAAY,yBACZC,aAAc,uBACd6mD,cAAe,oCACfC,oBAAqB,+BACrBp8B,UAAW,iBACXowB,OAAQ,eACRiM,UAAW,YACXhyC,SAAU,mBACViyC,YAAa,YACbC,aAAc,YACdC,cAAe,QACfC,WAAY,MACZC,WAAY,+CACZC,gBAAiB,+DACjBC,kBAAmB,0CACnBhnD,gBAAiB,kBACjBinD,SAAU,UACVC,SAAU,MACVC,cAAe,2DACfC,eAAgB,0CAChBC,iBAAkB,qCAClBC,cAAe,2EACfC,eAAgB,kDAChBC,iBAAkB,qCAClBC,aAAc,UACdC,aAAc,UACdC,kBAAmB,kBACnBC,kBAAmB,sBACnBC,oBAAqB,KACrBC,sBAAuB,OACvBC,kBAAmB,sDACnBC,sBAAuB,sDAE3B3xE,EAA6C,KAA8BhX,QAAQ,MAAQ2/G,EAC3F3oG,EAA6C,KAA8B/W,YAAY,MAAQ,cAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFojH,EAAwB,CACxB96B,aAAc,SACdC,aAAc,QACdC,aAAc,SACdG,gBAAiB,SACjBC,cAAe,iBACfC,aAAc,eACdC,kBAAmB,YACnBxmD,aAAc,mBACdymD,yBAA0B,gBAC1BC,sBAAuB,+BACvBC,YAAa,gEACbC,iBAAkB,gCAClBC,uBAAwB,yDACxBC,cAAe,kBACfvlC,eAAgB,UAChBtjD,MAAO,UACP8oF,cAAe,0BACfC,qBAAsB,yCACtBC,uBAAwB,+BACxBC,aAAc,sCACdC,cAAe,wCACfC,cAAe,8CACfC,iBAAkB,qCAClBC,iBAAkB,mCAClBC,eAAgB,oCAChBC,eAAgB,wCAChBC,cAAe,4EACfC,WAAY,8CACZC,WAAY,+CACZC,aAAc,2CACdI,cAAe,oCACfC,mBAAoB,4BACpBC,cAAe,8EACfC,YAAa,UACb7mD,WAAY,mBACZC,aAAc,qBACd6mD,cAAe,6BACfC,oBAAqB,oCACrBp8B,UAAW,aACXowB,OAAQ,YACRiM,UAAW,UACXhyC,SAAU,WACViyC,YAAa,UACbE,cAAe,QACfC,WAAY,OACZC,WAAY,+BACZC,gBAAiB,sDACjBC,kBAAmB,kCACnBhnD,gBAAiB,gBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,gDACfC,eAAgB,iCAChBC,iBAAkB,0BAClBC,cAAe,kFACfC,eAAgB,mDAChBC,iBAAkB,gDAClBC,aAAc,UACdC,aAAc,UACdC,kBAAmB,YACnBC,kBAAmB,mBACnBC,oBAAqB,MACrBC,sBAAuB,KACvBC,kBAAmB,wDACnBC,sBAAuB,mDACvBC,yBAA0B,qBAE9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQ4/G,EAC3F5oG,EAA6C,KAA8B/W,YAAY,MAAQ,cAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFqjH,EAAuB,CACvB/6B,aAAc,YACdC,aAAc,WACdC,aAAc,SACdI,cAAe,gBACftmD,aAAc,eACd2mD,YAAa,wEACbC,iBAAkB,iCAClBE,cAAe,mCACfvlC,eAAgB,aAChBwlC,cAAe,8BACfG,aAAc,+BACdC,cAAe,2CACfI,eAAgB,iDAChBC,eAAgB,gDAChBC,cAAe,wFACfC,WAAY,oDACZC,WAAY,qDACZC,aAAc,iCACdK,mBAAoB,qCAExB/vE,EAA6C,KAA8BhX,QAAQ,MAAQ6/G,EAC3F7oG,EAA6C,KAA8B/W,YAAY,MAAQ,eAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFsjH,EAAsB,CACtBh7B,aAAc,YACdC,aAAc,UACdC,aAAc,WACdG,gBAAiB,YACjBC,cAAe,mBACfC,aAAc,QACdC,kBAAmB,oBACnBxmD,aAAc,mBACdymD,yBAA0B,6BAC1BC,sBAAuB,kCACvBC,YAAa,qEACbC,iBAAkB,2CAClBC,uBAAwB,oEACxBC,cAAe,iDACfvlC,eAAgB,gBAChBtjD,MAAO,SACP8oF,cAAe,+CACfC,qBAAsB,6CACtBC,uBAAwB,sCACxBC,aAAc,kCACdC,cAAe,2CACfC,cAAe,2CACfC,iBAAkB,+CAClBC,iBAAkB,0CAClBC,eAAgB,iDAChBC,eAAgB,iDAChBC,cAAe,uFACfC,WAAY,0DACZC,WAAY,0DACZC,aAAc,0CACdC,kBAAmB,2CACnBC,gBAAiB,6CACjBC,mBAAoB,+EACpBC,cAAe,gDACfC,mBAAoB,sCACpBC,cAAe,gGACfC,YAAa,gBACb7mD,WAAY,0BACZC,aAAc,uBACd6mD,cAAe,6CACfC,oBAAqB,iCACrBp8B,UAAW,sBACXowB,OAAQ,oBACRiM,UAAW,YACXhyC,SAAU,UACViyC,YAAa,YACbC,aAAc,OACdC,cAAe,UACfC,WAAY,QACZC,WAAY,8DACZC,gBAAiB,oEACjBC,kBAAmB,2CACnBhnD,gBAAiB,YACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,sDACfC,eAAgB,sCAChBC,iBAAkB,gCAClBC,cAAe,sEACfC,eAAgB,8CAChBC,iBAAkB,wCAClBC,aAAc,WACdC,aAAc,QACdC,kBAAmB,qBACnBC,kBAAmB,qBACnBC,oBAAqB,MACrBC,sBAAuB,MACvBC,kBAAmB,4DACnBC,sBAAuB,6DACvBC,yBAA0B,wBAE9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQ8/G,EAC3F9oG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFujH,EAAwB,CACxBj7B,aAAc,OACdC,aAAc,SACdC,aAAc,YACdlmD,aAAc,mBACd2mD,YAAa,0BACbC,iBAAkB,mCAClBE,cAAe,0BACfR,cAAe,yBACf/kC,eAAgB,YAChBwlC,cAAe,2BACfG,aAAc,2BACdC,cAAe,0CACfI,eAAgB,yCAChBC,eAAgB,yCAChBC,cAAe,wEACfC,WAAY,yCACZC,WAAY,4CACZC,aAAc,iDACds5B,kBAAmB,8BAEvBhpG,EAA6C,KAA8BhX,QAAQ,MAAQ+/G,EAC3F/oG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFyjH,EAAsB,CACtBn7B,aAAc,SACdC,aAAc,SACdC,aAAc,cACdG,gBAAiB,QACjBC,cAAe,2BACfC,aAAc,SACdC,kBAAmB,iBACnBxmD,aAAc,oBACd2mD,YAAa,gCACbC,iBAAkB,mDAClBC,uBAAwB,8EACxBC,cAAe,6BACfvlC,eAAgB,qBAChBtjD,MAAO,OACP8oF,cAAe,qCACfC,qBAAsB,+CACtBC,uBAAwB,qCACxBC,aAAc,gCACdC,cAAe,8CACfC,cAAe,kDACfC,iBAAkB,8DAClBC,iBAAkB,0DAClBC,eAAgB,mDAChBC,eAAgB,uDAChBC,cAAe,qEACfC,WAAY,yCACZC,WAAY,0CACZC,aAAc,mDACdC,kBAAmB,8DACnBC,gBAAiB,8DACjBC,mBAAoB,uFACpBC,cAAe,+CACfC,mBAAoB,wCACpBC,cAAe,oGACfC,YAAa,kBACb7mD,WAAY,yBACZ8mD,cAAe,kCACfC,oBAAqB,mCACrBp8B,UAAW,oBACXowB,OAAQ,mBACRiM,UAAW,YACXhyC,SAAU,iBACViyC,YAAa,YACbC,aAAc,UACdC,cAAe,SACfC,WAAY,QACZC,WAAY,sDACZC,gBAAiB,kFACjBC,kBAAmB,qCACnBhnD,gBAAiB,gCACjBinD,SAAU,OACVC,SAAU,OACVC,cAAe,oDACfC,eAAgB,kCAChBC,iBAAkB,oCAClBC,cAAe,oEACfC,eAAgB,0CAChBC,iBAAkB,4CAClBC,aAAc,SACdC,aAAc,SACdE,kBAAmB,gBACnBC,oBAAqB,KACrBC,sBAAuB,OACvBH,kBAAmB,eACnBK,sBAAuB,0DACvBD,kBAAmB,8DACnBroD,aAAc,yBACdklD,yBAA0B,sBAC1BqD,yBAA0B,aAC1BpD,sBAAuB,kCAE3BxuE,EAA6C,KAA8BhX,QAAQ,MAAQigH,EAC3FjpG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxF0jH,EAAqB,CACrBp7B,aAAc,cACdC,aAAc,UACdC,aAAc,aACdI,cAAe,+BACftmD,aAAc,qBACd2mD,YAAa,4EACbC,iBAAkB,6DAClBE,cAAe,oDACfvlC,eAAgB,cAChBwlC,cAAe,mCACfE,uBAAwB,yDACxBC,aAAc,qCACdC,cAAe,gDACfG,iBAAkB,gDAClBC,eAAgB,gDAChBC,eAAgB,qDAChBC,cAAe,yFACfC,WAAY,sDACZC,WAAY,sDACZC,aAAc,gDACdE,gBAAiB,uCACjBC,mBAAoB,gFACpBC,cAAe,8CACfC,mBAAoB,qDACpBC,cAAe,uFACf7L,OAAQ,mBACRiM,UAAW,YAEfpwE,EAA6C,KAA8BhX,QAAQ,MAAQkgH,EAC3FlpG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF2jH,EAAsB,CACtBr7B,aAAc,QACdC,aAAc,QACdC,aAAc,OACdlmD,aAAc,kBACd2mD,YAAa,YACbC,iBAAkB,wBAClBE,cAAe,iBACfR,cAAe,gBACf/kC,eAAgB,SAChBwlC,cAAe,mBACfG,aAAc,2BACdC,cAAe,uBACfI,eAAgB,0BAChBC,eAAgB,uBAChBC,cAAe,mEACfC,WAAY,sCACZC,WAAY,qCACZC,aAAc,yBACdK,mBAAoB,8BAExB/vE,EAA6C,KAA8BhX,QAAQ,MAAQmgH,EAC3FnpG,EAA6C,KAA8B/W,YAAY,MAAQ,SAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF4jH,EAAyB,CACzBt7B,aAAc,SACdC,aAAc,SACdC,aAAc,OACdI,cAAe,mBACftmD,aAAc,iBACd2mD,YAAa,sDACbC,iBAAkB,4CAClBC,uBAAwB,8BACxBC,cAAe,wBACfvlC,eAAgB,eAChBtjD,MAAO,QACP8oF,cAAe,wCACfE,uBAAwB,sCACxBC,aAAc,mCACdC,cAAe,oCACfC,cAAe,sCACfC,iBAAkB,uDAClBC,iBAAkB,+BAClBC,eAAgB,yCAChBC,eAAgB,2CAChBC,cAAe,kFACfC,WAAY,6BACZC,WAAY,yCACZC,aAAc,mCACdE,gBAAiB,+CACjBC,mBAAoB,4EACpBC,cAAe,uCACfC,mBAAoB,6BACpBC,cAAe,qEACfE,cAAe,wBACfC,oBAAqB,qCACrBhM,OAAQ,iBACRiM,UAAW,cACXhyC,SAAU,gBACViyC,YAAa,cACbC,aAAc,OACdC,cAAe,SACfC,WAAY,MACZC,WAAY,kCACZC,gBAAiB,sDACjBC,kBAAmB,6BACnBhnD,gBAAiB,iBAErB3pB,EAA6C,KAA8BhX,QAAQ,MAAQogH,EAC3FppG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF6jH,EAAyB,CACzBv7B,aAAc,UACdC,aAAc,QACdC,aAAc,QACdI,cAAe,iBACftmD,aAAc,kBACd2mD,YAAa,sDACbC,iBAAkB,wCAClBE,cAAe,0BACfvlC,eAAgB,WAChBwlC,cAAe,oCACfE,uBAAwB,gDACxBC,aAAc,mCACdC,cAAe,oCACfC,cAAe,kCACfC,iBAAkB,uDAClBC,iBAAkB,qDAClBC,eAAgB,sDAChBC,eAAgB,oDAChBC,cAAe,yEACfC,WAAY,8CACZC,WAAY,+CACZC,aAAc,uCACdE,gBAAiB,kDACjBC,mBAAoB,sDACpBC,cAAe,wCACfC,mBAAoB,qCACpBC,cAAe,+EACf7L,OAAQ,eACRiM,UAAW,YACXk4B,kBAAmB,gBACnBC,mBAAoB,eACpBC,kBAAmB,gBACnBj4B,cAAe,SACfC,WAAY,OAEhBxwE,EAA6C,KAA8BhX,QAAQ,MAAQqgH,EAC3FrpG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF8jH,EAAoB,CACpBx7B,aAAc,aACdC,aAAc,cACdC,aAAc,UACdG,gBAAiB,QACjBC,cAAe,qBACfC,aAAc,YACdC,kBAAmB,cACnBxmD,aAAc,uBACd2mD,YAAa,kDACbC,iBAAkB,2CAClBC,uBAAwB,sEACxBC,cAAe,mBACfvlC,eAAgB,WAChBtjD,MAAO,QACP8oF,cAAe,qCACfC,qBAAsB,4CACtBC,uBAAwB,8CACxBC,aAAc,4BACdC,cAAe,6CACfC,cAAe,yCACfC,iBAAkB,kEAClBC,iBAAkB,qCAClBC,eAAgB,wCAChBC,eAAgB,8CAChBC,cAAe,yFACfC,WAAY,8CACZC,WAAY,+CACZC,aAAc,uCACdC,kBAAmB,6CACnBC,gBAAiB,gDACjBC,mBAAoB,mEACpBC,cAAe,0CACfC,mBAAoB,oCACpBC,cAAe,6EACfC,YAAa,YACb7mD,WAAY,kBACZ8mD,cAAe,uCACfC,oBAAqB,oBACrBp8B,UAAW,eACXowB,OAAQ,eACRiM,UAAW,QACXhyC,SAAU,cACViyC,YAAa,QACbC,aAAc,OACdC,cAAe,QACfC,WAAY,QACZC,WAAY,uCACZC,gBAAiB,0DACjBC,kBAAmB,+BACnBhnD,gBAAiB,YACjBinD,SAAU,QACVC,SAAU,QACVC,cAAe,2EACfC,eAAgB,iDAChBC,iBAAkB,kDAClBC,cAAe,6FACfC,eAAgB,yDAChBC,iBAAkB,2DAClBC,aAAc,YACdC,aAAc,YACdE,kBAAmB,oBAEvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQsgH,EAC3FtpG,EAA6C,KAA8B/W,YAAY,MAAQ,oBAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF+jH,EAAuB,CACvBz7B,aAAc,aACdC,aAAc,aACdC,aAAc,QACdG,gBAAiB,SACjBC,cAAe,mBACftmD,aAAc,oBACd2mD,YAAa,0DACbC,iBAAkB,8CAClBC,uBAAwB,wEACxBC,cAAe,2CACfvlC,eAAgB,YAChBtjD,MAAO,SACP8oF,cAAe,qBACfC,qBAAsB,8CACtBC,uBAAwB,4BACxBC,aAAc,iCACdC,cAAe,gCACfC,cAAe,6CACfC,iBAAkB,8DAClBC,iBAAkB,+BAClBC,eAAgB,mCAChBC,eAAgB,oCAChBC,cAAe,wEACfC,WAAY,6CACZC,WAAY,6CACZC,aAAc,iCACdE,gBAAiB,oDACjBC,mBAAoB,kEACpBC,cAAe,+BACfC,mBAAoB,6BACpBC,cAAe,wDACfC,YAAa,iBACb7mD,WAAY,yBACZC,aAAc,0BACd6mD,cAAe,0CACfC,oBAAqB,qCACrBhM,OAAQ,gBACRiM,UAAW,eACXhyC,SAAU,gBACViyC,YAAa,UACbC,aAAc,WACdC,cAAe,UACfC,WAAY,OACZC,WAAY,iCACZC,gBAAiB,yEACjBC,kBAAmB,+CACnBhnD,gBAAiB,UACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,sDACfC,eAAgB,sCAChBC,iBAAkB,+BAClBC,cAAe,oEACfC,eAAgB,6CAChBC,iBAAkB,sCAClBC,aAAc,UACdM,kBAAmB,iDACnBC,sBAAuB,+CAE3B3xE,EAA6C,KAA8BhX,QAAQ,MAAQugH,EAC3FvpG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxFgkH,EAAwB,CACxB17B,aAAc,KACdC,aAAc,KACdC,aAAc,KACdG,gBAAiB,OACjBC,cAAe,UACfC,aAAc,KACdC,kBAAmB,QACnBxmD,aAAc,WACd2mD,YAAa,yBACbC,iBAAkB,wBAClBE,cAAe,aACfvlC,eAAgB,KAChBwlC,cAAe,YACfG,aAAc,YACdC,cAAe,mBACfG,iBAAkB,iBAClBC,eAAgB,kBAChBG,WAAY,8BACZC,WAAY,8BACZC,aAAc,oBACdI,cAAe,yBACfE,cAAe,kCACfC,YAAa,QACb7mD,WAAY,UACZgoD,aAAc,KACdC,aAAc,KACdE,kBAAmB,aAGvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQwgH,EAC3FxpG,EAA6C,KAA8B/W,YAAY,MAAQ,OAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFikH,EAAgB,CAChB37B,aAAc,KACdC,aAAc,KACdC,aAAc,KACdG,gBAAiB,KACjBC,cAAe,SACftmD,aAAc,gBACd2mD,YAAa,0BACbC,iBAAkB,wBAClBC,uBAAwB,4BACxBC,cAAe,kBACfvlC,eAAgB,YAChBtjD,MAAO,IACP8oF,cAAe,YACfC,qBAAsB,oBACtBC,uBAAwB,sBACxBC,aAAc,eACdC,cAAe,yBACfC,cAAe,6BACfC,iBAAkB,+BAClBC,iBAAkB,oBAClBC,eAAgB,uBAChBC,eAAgB,uBAChBC,cAAe,wCACfC,WAAY,2BACZC,WAAY,2BACZC,aAAc,sBACdC,kBAAmB,wBACnBC,gBAAiB,yBACjBC,mBAAoB,iCACpBC,cAAe,2BACfC,mBAAoB,iBACpBC,cAAe,+BACfC,YAAa,UACb7mD,WAAY,WACZ8mD,cAAe,gBACfC,oBAAqB,iBACrBp8B,UAAW,OACXowB,OAAQ,OACRiM,UAAW,KACXhyC,SAAU,SACViyC,YAAa,KACbC,aAAc,KACdC,cAAe,IACfC,WAAY,IACZC,WAAY,qBACZC,gBAAiB,2BACjBC,kBAAmB,qBACnBhnD,gBAAiB,YACjBinD,SAAU,IACVC,SAAU,IACVC,cAAe,kCACfC,eAAgB,sBAChBC,iBAAkB,gBAClBC,cAAe,0CACfC,eAAgB,2BAChBC,iBAAkB,oBAClBC,aAAc,KACdC,aAAc,OAElBrxE,EAA6C,KAA8BhX,QAAQ,MAAQygH,EAC3FzpG,EAA6C,KAA8B/W,YAAY,MAAQ,OAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFkkH,EAAuB,CACvB57B,aAAc,UACdC,aAAc,QACdC,aAAc,UACdlmD,aAAc,qBACd2mD,YAAa,yBACbC,iBAAkB,6CAClBE,cAAe,uBACfR,cAAe,4BACf/kC,eAAgB,gBAChBwlC,cAAe,iCACfG,aAAc,8BACdC,cAAe,uCACfI,eAAgB,0CAChBC,eAAgB,mDAChBC,cAAe,gFACfC,WAAY,wCACZC,WAAY,wCACZC,aAAc,0CACdK,mBAAoB,sCAExB/vE,EAA6C,KAA8BhX,QAAQ,MAAQ0gH,EAC3F1pG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxFmkH,EAAyB,CACzB77B,aAAc,QACdC,aAAc,SACdC,aAAc,SACdG,gBAAiB,UACjBC,cAAe,gBACfC,aAAc,OACdC,kBAAmB,mBACnBxmD,aAAc,sBACd2mD,YAAa,+CACbC,iBAAkB,qCAClBC,uBAAwB,mDACxBC,cAAe,sBACfvlC,eAAgB,gBAChBtjD,MAAO,UACP8oF,cAAe,iCACfC,qBAAsB,yCACtBC,uBAAwB,gDACxBC,aAAc,sBACdC,cAAe,sCACfC,cAAe,2CACfC,iBAAkB,8DAClBC,iBAAkB,6CAClBC,eAAgB,wCAChBC,eAAgB,6CAChBC,cAAe,6EACfC,WAAY,gDACZC,WAAY,6CACZC,aAAc,uDACdC,kBAAmB,qCACnBC,gBAAiB,oCACjBC,mBAAoB,sEACpBC,cAAe,kCACfC,mBAAoB,yBACpBC,cAAe,+EACfC,YAAa,sBACb7mD,WAAY,0BACZ8mD,cAAe,4BACfC,oBAAqB,kCACrBp8B,UAAW,mBACXowB,OAAQ,iBACRiM,UAAW,WACXhyC,SAAU,gBACViyC,YAAa,WACbC,aAAc,YACdC,cAAe,YACfC,WAAY,SACZC,WAAY,kCACZC,gBAAiB,sDACjBC,kBAAmB,uCACnBhnD,gBAAiB,oBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,iDACfC,eAAgB,kCAChBC,iBAAkB,0BAClBC,cAAe,+DACfC,eAAgB,yCAChBC,iBAAkB,iCAClBC,aAAc,WACdC,aAAc,SACdE,kBAAmB,qBAGvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQ2gH,EAC3F3pG,EAA6C,KAA8B/W,YAAY,MAAQ,YAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFokH,EAAyB,CACzB97B,aAAc,UACdC,aAAc,QACdC,aAAc,UACdG,gBAAiB,QACjBC,cAAe,kBACftmD,aAAc,kBACd2mD,YAAa,2DACbC,iBAAkB,0CAClBC,uBAAwB,sEACxBC,cAAe,0BACfvlC,eAAgB,UAChBtjD,MAAO,QACP8oF,cAAe,gCACfC,qBAAsB,wCACtBC,uBAAwB,2CACxBC,aAAc,8BACdC,cAAe,sCACfC,cAAe,2CACfC,iBAAkB,0DAClBC,iBAAkB,sCAClBC,eAAgB,sCAChBC,eAAgB,6CAChBC,cAAe,mEACfC,WAAY,uCACZC,WAAY,0CACZC,aAAc,gDACdE,gBAAiB,6CACjBC,mBAAoB,uEACpBC,cAAe,wCACfC,mBAAoB,yCACpBC,cAAe,oEACfE,cAAe,6BACfC,oBAAqB,gCACrBhM,OAAQ,eACRiM,UAAW,QACXhyC,SAAU,cACViyC,YAAa,SACbC,aAAc,UACdC,cAAe,UACfC,WAAY,MACZC,WAAY,qCACZC,gBAAiB,0DACjBC,kBAAmB,0BACnBhnD,gBAAiB,aACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,oDACfC,eAAgB,sCAChBC,iBAAkB,8BAClBC,cAAe,kEACfC,eAAgB,6CAChBC,iBAAkB,qCAClBC,aAAc,QAElBpxE,EAA6C,KAA8BhX,QAAQ,MAAQ4gH,EAC3F5pG,EAA6C,KAA8B/W,YAAY,MAAQ,SAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFqkH,EAAuB,CACvB/7B,aAAc,OACdC,aAAc,OACdC,aAAc,QACdC,YAAa,YACbC,SAAU,SACVC,gBAAiB,OACjBC,cAAe,cACfC,aAAc,MACdC,kBAAmB,aACnBxmD,aAAc,kBACdymD,yBAA0B,kBAC1BC,sBAAuB,0BACvBC,YAAa,oDACbC,iBAAkB,yCAClBC,uBAAwB,wDACxBC,cAAe,uBACfvlC,eAAgB,iBAChBtjD,MAAO,QACP8oF,cAAe,yBACfE,uBAAwB,uCACxBC,aAAc,uBACdC,cAAe,gCACfC,cAAe,mCACfC,iBAAkB,sDAClBC,iBAAkB,gCAClBC,eAAgB,yBAChBC,eAAgB,kCAChBC,cAAe,gCACfC,WAAY,8BACZC,WAAY,sCACZC,aAAc,2BACdC,kBAAmB,oCACnBC,gBAAiB,sCACjBC,mBAAoB,yDACpBC,cAAe,6BACfC,mBAAoB,4BACpBC,cAAe,wCACfC,YAAa,aACb7mD,WAAY,qBACZC,aAAc,wBACd6mD,cAAe,kCACfC,oBAAqB,iCACrBp8B,UAAW,YACXowB,OAAQ,WACRiM,UAAW,MACXhyC,SAAU,OACViyC,YAAa,MACbC,aAAc,OACdC,cAAe,OACfC,WAAY,MACZC,WAAY,sCACZC,gBAAiB,wCACjBC,kBAAmB,2BACnBhnD,gBAAiB,iBACjBinD,SAAU,QACVC,SAAU,QACVC,cAAe,+DACfC,eAAgB,4CAChBC,iBAAkB,yCAClBC,cAAe,6EACfC,eAAgB,mDAChBC,iBAAkB,gDAClBC,aAAc,UACdC,aAAc,YACdC,kBAAmB,cACnBC,kBAAmB,eACnBC,oBAAqB,MACrBC,sBAAuB,MACvBC,kBAAmB,0CACnBC,sBAAuB,yCACvBC,yBAA0B,cAE9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQ6gH,EAC3F7pG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFskH,EAAsB,CACtBh8B,aAAc,SACdC,aAAc,QACdC,aAAc,SACdI,cAAe,yBACftmD,aAAc,mBACd2mD,YAAa,2BACbC,iBAAkB,qCAClBE,cAAe,8BACfvlC,eAAgB,aAChBwlC,cAAe,qCACfE,uBAAwB,4CACxBC,aAAc,wCACdC,cAAe,wCACfC,cAAe,sCACfC,iBAAkB,uDAClBC,iBAAkB,6CAClBC,eAAgB,yCAChBC,eAAgB,4CAChBC,cAAe,gFACfC,WAAY,oDACZC,WAAY,qDACZC,aAAc,uCACdE,gBAAiB,mCACjBC,mBAAoB,8DACpBC,cAAe,sDACfC,mBAAoB,+BACpBC,cAAe,8EACf7L,OAAQ,eACRiM,UAAW,OACXhyC,SAAU,cACViyC,YAAa,OACbC,aAAc,UACdC,cAAe,UACfC,WAAY,SACZC,WAAY,yCACZC,gBAAiB,oDACjBC,kBAAmB,qCACnBhnD,gBAAiB,mBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,8CACfC,eAAgB,gCAChBC,iBAAkB,0BAClBC,cAAe,0DACfC,eAAgB,qCAChBC,iBAAkB,uBAClBC,aAAc,WAElBpxE,EAA6C,KAA8BhX,QAAQ,MAAQ8gH,EAC3F9pG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFukH,EAA0B,CAC1Bj8B,aAAc,WACdC,aAAc,UACdC,aAAc,YACdG,gBAAiB,UACjBC,cAAe,qBACfC,aAAc,SACdC,kBAAmB,mBACnBxmD,aAAc,oBACd2mD,YAAa,iDACbC,iBAAkB,qCAClBC,uBAAwB,6DACxBC,cAAe,gCACfvlC,eAAgB,eAChBtjD,MAAO,QACP8oF,cAAe,kCACfC,qBAAsB,+CACtBC,uBAAwB,uDACxBC,aAAc,6BACdC,cAAe,+CACfC,cAAe,6CACfC,iBAAkB,2DAClBC,iBAAkB,kCAClBC,eAAgB,mCAChBC,eAAgB,mDAChBC,cAAe,oEACfC,WAAY,2CACZC,WAAY,2CACZC,aAAc,uCACdC,kBAAmB,+CACnBC,gBAAiB,0CACjBC,mBAAoB,gFACpBC,cAAe,6CACfC,mBAAoB,oCACpBC,cAAe,0FACfC,YAAa,gBACb7mD,WAAY,+BACZ8mD,cAAe,kCACfC,oBAAqB,6BACrBp8B,UAAW,mBACXowB,OAAQ,kBACRiM,UAAW,gBACXhyC,SAAU,iBACViyC,YAAa,UACbC,aAAc,OACdC,cAAe,SACfC,WAAY,QACZC,WAAY,iDACZC,gBAAiB,2DACjBC,kBAAmB,0CACnBhnD,gBAAiB,kBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,+CACfC,eAAgB,gCAChBC,iBAAkB,4BAClBC,cAAe,6DACfC,eAAgB,uCAChBC,iBAAkB,mCAClBC,aAAc,SACdC,aAAc,SACdE,kBAAmB,uBACnBC,oBAAqB,MACrBC,sBAAuB,MACvBC,kBAAmB,oDACnBC,sBAAuB,oDACvBC,yBAA0B,qBAE9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQ+gH,EAC3F/pG,EAA6C,KAA8B/W,YAAY,MAAQ,aAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFwkH,EAAwB,CACxBl8B,aAAc,YACdC,aAAc,UACdC,aAAc,aACdI,cAAe,mBACftmD,aAAc,qBACd2mD,YAAa,4CACbC,iBAAkB,qCAClBE,cAAe,6BACfvlC,eAAgB,aAChBwlC,cAAe,mDACfE,uBAAwB,sCACxBC,aAAc,oCACdC,cAAe,8CACfI,eAAgB,0CAChBC,eAAgB,0CAChBC,cAAe,qFACfC,WAAY,0DACZC,WAAY,yDACZC,aAAc,mDACdI,cAAe,uDACfC,mBAAoB,wCACpBpB,uBAAwB,4EACxB5oF,MAAO,UACP+oF,qBAAsB,mDACtBI,cAAe,8CACfC,iBAAkB,wEAClBC,iBAAkB,2CAClBQ,gBAAiB,2CACjBC,mBAAoB,uEACpBG,cAAe,wGACfE,cAAe,qDACfC,oBAAqB,iCACrBhM,OAAQ,gBACRiM,UAAW,WACXhyC,SAAU,WACViyC,YAAa,WACbC,aAAc,UACdC,cAAe,UACfC,WAAY,OACZC,WAAY,yCACZC,gBAAiB,6DACjBC,kBAAmB,yCACnBhnD,gBAAiB,oBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,sDACfC,eAAgB,sCAChBC,iBAAkB,6BAClBC,cAAe,sEACfC,eAAgB,8CAChBC,iBAAkB,sCAEtBnxE,EAA6C,KAA8BhX,QAAQ,MAAQghH,EAC3FhqG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFykH,EAAuB,CACvBn8B,aAAc,QACdC,aAAc,QACdC,aAAc,SACdG,gBAAiB,SACjBC,cAAe,+BACfC,aAAc,MACdC,kBAAmB,cACnBxmD,aAAc,sBACd2mD,YAAa,yBACbC,iBAAkB,uCAClBC,uBAAwB,+BACxBC,cAAe,wBACfvlC,eAAgB,aAChBtjD,MAAO,WACP8oF,cAAe,kCACfC,qBAAsB,uDACtBC,uBAAwB,mDACxBC,aAAc,4BACdC,cAAe,0CACfC,cAAe,0CACfC,iBAAkB,uDAClBC,iBAAkB,6CAClBC,eAAgB,8CAChBC,eAAgB,+CAChBC,cAAe,2DACfC,WAAY,sCACZC,WAAY,sCACZC,aAAc,8DACdC,kBAAmB,0CACnBC,gBAAiB,kCACjBC,mBAAoB,oEACpBC,cAAe,wCACfC,mBAAoB,6CACpBC,cAAe,uEACfC,YAAa,cACb7mD,WAAY,sBACZ8mD,cAAe,kCACfC,oBAAqB,uCACrBp8B,UAAW,mBACXowB,OAAQ,kBACRiM,UAAW,UACXhyC,SAAU,iBACViyC,YAAa,UACbC,aAAc,UACdC,cAAe,UACfC,WAAY,SACZC,WAAY,sCACZC,gBAAiB,+CACjBC,kBAAmB,8BACnBhnD,gBAAiB,oBACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,iDACfC,eAAgB,qCAChBC,iBAAkB,oCAClBC,cAAe,yEACfC,eAAgB,4CAChBC,iBAAkB,2CAClBC,aAAc,WACdC,aAAc,WACdE,kBAAmB,gBAEvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQihH,EAC3FjqG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF0kH,EAAiC,CACjCp8B,aAAc,MACdC,aAAc,MACdC,aAAc,OACdG,gBAAiB,OACjBC,cAAe,SACfC,aAAc,IACdC,kBAAmB,OACnBxmD,aAAc,mBACd0mD,sBAAuB,cACvBC,YAAa,aACbE,uBAAwB,UACxBD,iBAAkB,UAClBE,cAAe,aACfvlC,eAAgB,SAChBtjD,MAAO,IACP8oF,cAAe,SACfC,qBAAsB,UACtBC,uBAAwB,YACxBC,aAAc,WACdC,cAAe,iBACfC,cAAe,mBACfC,iBAAkB,0BAClBC,iBAAkB,iBAClBC,eAAgB,iBAChBC,eAAgB,iBAChBC,cAAe,gCACfC,WAAY,sBACZC,WAAY,sBACZC,aAAc,kBACdC,kBAAmB,cACnBC,gBAAiB,uBACjBC,mBAAoB,qBACpBC,cAAe,eACfC,mBAAoB,UACpBC,cAAe,sBACfC,YAAa,QACb7mD,WAAY,UACZC,aAAc,QACd6mD,cAAe,QACfC,oBAAqB,SACrBp8B,UAAW,MACXowB,OAAQ,MACRiM,UAAW,OACXhyC,SAAU,KACViyC,YAAa,KACbC,aAAc,KACdC,cAAe,IACfC,WAAY,IACZC,WAAY,iBACZC,gBAAiB,uBACjBC,kBAAmB,UACnBhnD,gBAAiB,MACjBinD,SAAU,IACVC,SAAU,IACVC,cAAe,qBACfC,eAAgB,YAChBC,iBAAkB,aAClBC,cAAe,mCACfC,eAAgB,mBAChBC,iBAAkB,kBAClBC,aAAc,KACdC,aAAc,KACdE,kBAAmB,QAEvBvxE,EAA6C,KAA8BhX,QAAQ,SAAWkhH,EAC9FlqG,EAA6C,KAA8B/W,YAAY,SAAW,QAK5F,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF2kH,EAAuB,CACvBr8B,aAAc,WACdC,aAAc,YACdC,aAAc,YACdI,cAAe,kBACftmD,aAAc,oBACd2mD,YAAa,mDACbC,iBAAkB,qCAClBE,cAAe,+BACfvlC,eAAgB,gBAChBwlC,cAAe,kCACfE,uBAAwB,mDACxBC,aAAc,mCACdC,cAAe,6CACfC,cAAe,yCACfC,iBAAkB,sDAClBC,iBAAkB,4CAClBC,eAAgB,mDAChBC,eAAgB,gDAChBC,cAAe,iEACfC,WAAY,uCACZC,WAAY,yCACZC,aAAc,kDACdE,gBAAiB,wCACjBC,mBAAoB,iFACpBC,cAAe,gDACfC,mBAAoB,wCACpBC,cAAe,kFACf7L,OAAQ,qBACRiM,UAAW,sBACXk4B,kBAAmB,kBACnBC,mBAAoB,mBACpBC,kBAAmB,mBACnBj4B,cAAe,UACfC,WAAY,UAEhBxwE,EAA6C,KAA8BhX,QAAQ,MAAQmhH,EAC3FnqG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF4kH,EAAiB,CACjBt8B,aAAc,gBACdC,aAAc,WACdC,aAAc,SACdC,YAAa,SACbC,SAAU,SACVC,gBAAiB,OACjBC,cAAe,mBACfC,aAAc,SACdC,kBAAmB,cACnBxmD,aAAc,qBACdymD,yBAA0B,oBAC1BC,sBAAuB,+BACvBC,YAAa,sDACbC,iBAAkB,kCAClBC,uBAAwB,yDACxBC,cAAe,uBACfvlC,eAAgB,YAChBtjD,MAAO,UACP8oF,cAAe,6BACfC,qBAAsB,qCACtBC,uBAAwB,2CACxBC,aAAc,oCACdC,cAAe,sCACfC,cAAe,wCACfC,iBAAkB,qEAClBC,iBAAkB,sCAClBC,eAAgB,uCAChBC,eAAgB,yCAChBC,cAAe,oEACfC,WAAY,2CACZC,WAAY,2CACZC,aAAc,gDACdC,kBAAmB,qCACnBC,gBAAiB,4BACjBC,mBAAoB,mEACpBC,cAAe,sCACfC,mBAAoB,qCACpBC,cAAe,uEACfC,YAAa,cACb7mD,WAAY,kBACZC,aAAc,mBACd6mD,cAAe,6BACfC,oBAAqB,wCACrBp8B,UAAW,gBACXowB,OAAQ,cACRiM,UAAW,MACXhyC,SAAU,cACViyC,YAAa,MACbC,aAAc,OACdC,cAAe,SACfC,WAAY,OACZC,WAAY,oCACZC,gBAAiB,kDACjBC,kBAAmB,yBACnBhnD,gBAAiB,cACjBinD,SAAU,SACVC,SAAU,UACVC,cAAe,oDACfC,eAAgB,mCAChBC,iBAAkB,0BAClBC,cAAe,+DACfC,eAAgB,0CAChBC,iBAAkB,iCAClBC,aAAc,UACdC,aAAc,QACdC,kBAAmB,eACnBC,kBAAmB,cACnBC,oBAAqB,OACrBC,sBAAuB,SACvBC,kBAAmB,uDACnBC,sBAAuB,mDACvBC,yBAA0B,oBAE9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQohH,EAC3FpqG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxF6kH,EAAuB,CACvBv8B,aAAc,aACdC,aAAc,QACdC,aAAc,SACdI,cAAe,kBACftmD,aAAc,kBACd2mD,YAAa,qDACbC,iBAAkB,sCAClBE,cAAe,oBACfvlC,eAAgB,UAChBwlC,cAAe,6BACfE,uBAAwB,6CACxBC,aAAc,6BACdC,cAAe,oCACfG,iBAAkB,qCAClBC,eAAgB,4CAChBC,eAAgB,8CAChBC,cAAe,6EACfC,WAAY,2CACZC,WAAY,8CACZC,aAAc,2CACdE,gBAAiB,yCACjBC,mBAAoB,uFACpBC,cAAe,qCACfC,mBAAoB,oCACpBC,cAAe,6EACf7L,OAAQ,gBACRiM,UAAW,WAEfpwE,EAA6C,KAA8BhX,QAAQ,MAAQqhH,EAC3FrqG,EAA6C,KAA8B/W,YAAY,MAAQ,WAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxF8kH,EAAqB,CACrBx8B,aAAc,UACdC,aAAc,QACdC,aAAc,WACdG,gBAAiB,OACjBC,cAAe,8BACfC,aAAc,KACdC,kBAAmB,wBACnBxmD,aAAc,qBACd2mD,YAAa,4BACbC,iBAAkB,wCAClBC,uBAAwB,yCACxBC,cAAe,uBACfvlC,eAAgB,oBAChBtjD,MAAO,SACP8oF,cAAe,iCACfC,qBAAsB,2CACtBC,uBAAwB,0DACxBC,aAAc,0BACdC,cAAe,4CACfC,cAAe,2CACfC,iBAAkB,6DAClBC,iBAAkB,4CAClBC,eAAgB,6CAChBC,eAAgB,oDAChBC,cAAe,oDACfC,WAAY,iCACZC,WAAY,kCACZC,aAAc,kDACdC,kBAAmB,sCACnBC,gBAAiB,uCACjBC,mBAAoB,4EACpBC,cAAe,2CACfC,mBAAoB,mDACpBC,cAAe,uFACfC,YAAa,aACb7mD,WAAY,+BACZ8mD,cAAe,sDACfC,oBAAqB,+BACrBp8B,UAAW,eACXowB,OAAQ,cACRiM,UAAW,cACXhyC,SAAU,eACViyC,YAAa,cACbC,aAAc,UACdC,cAAe,QACfC,WAAY,OACZC,WAAY,0CACZC,gBAAiB,0CACjBC,kBAAmB,iCACnBhnD,gBAAiB,2BACjBinD,SAAU,MACVC,SAAU,MACVC,cAAe,sDACfC,eAAgB,sCAChBC,iBAAkB,qCAClBC,cAAe,uFACfC,eAAgB,6CAChBC,iBAAkB,8CAClBC,aAAc,cACdC,aAAc,cACdE,kBAAmB,sBAEvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQshH,EAC3FtqG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAIxF+kH,EAAc,CACdz8B,aAAc,WACdC,aAAc,QACdC,aAAc,SACdG,gBAAiB,QACjBC,cAAe,mBACfC,aAAc,QACdC,kBAAmB,eACnBxmD,aAAc,sBACdymD,yBAA0B,wBAC1BC,sBAAuB,8BACvBC,YAAa,iDACbC,iBAAkB,6BAClBC,uBAAwB,wDACxBC,cAAe,sBACfvlC,eAAgB,WAChBtjD,MAAO,SACP8oF,cAAe,gBACfC,qBAAsB,4BACtBC,uBAAwB,yBACxBC,aAAc,6BACdC,cAAe,oCACfC,cAAe,oCACfC,iBAAkB,wDAClBC,iBAAkB,+BAClBC,eAAgB,iCAChBC,eAAgB,+BAChBC,cAAe,8DACfC,WAAY,mCACZC,WAAY,gCACZC,aAAc,kCACdC,kBAAmB,2CACnBC,gBAAiB,kCACjBC,mBAAoB,gEACpBC,cAAe,2BACfC,mBAAoB,kBACpBC,cAAe,iEACfC,YAAa,eACb7mD,WAAY,eACZC,aAAc,kBACd6mD,cAAe,oCACfC,oBAAqB,4BACrBp8B,UAAW,eACXowB,OAAQ,WACRiM,UAAW,KACXhyC,SAAU,QACViyC,YAAa,KACbC,aAAc,OACdC,cAAe,UACfC,WAAY,MACZC,WAAY,wCACZC,gBAAiB,oDACjBC,kBAAmB,mBACnBhnD,gBAAiB,mBACjBinD,SAAU,OACVC,SAAU,SACVC,cAAe,6CACfC,eAAgB,2BAChBC,iBAAkB,4BAClBC,cAAe,6DACfC,eAAgB,mCAChBC,iBAAkB,oCAClBC,aAAc,OACdC,aAAc,UACdC,kBAAmB,YACnBC,kBAAmB,eACnBC,oBAAqB,MACrBC,sBAAuB,SACvBC,kBAAmB,4CACnBC,sBAAuB,0CACvBC,yBAA0B,aAG9B5xE,EAA6C,KAA8BhX,QAAQ,MAAQuhH,EAC3FvqG,EAA6C,KAA8B/W,YAAY,MAAQ,OAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFglH,EAAkC,CAClC18B,aAAc,MACdC,aAAc,MACdC,aAAc,OACdI,cAAe,SACftmD,aAAc,mBACd2mD,YAAa,aACbC,iBAAkB,UAClBE,cAAe,WACfvlC,eAAgB,SAChBwlC,cAAe,SACfE,uBAAwB,YACxBC,aAAc,WACdC,cAAe,iBACfC,cAAe,mBACfC,iBAAkB,0BAClBC,iBAAkB,iBAClBC,eAAgB,iBAChBC,eAAgB,iBAChBC,cAAe,gCACfC,WAAY,sBACZC,WAAY,sBACZC,aAAc,kBACdE,gBAAiB,uBACjBC,mBAAoB,qBACpBC,cAAe,eACfC,mBAAoB,UACpBC,cAAe,sBACf7L,OAAQ,OACRiM,UAAW,OACXE,aAAc,KACdC,cAAe,IACfC,WAAY,IACZC,WAAY,iBACZC,gBAAiB,uBACjBC,kBAAmB,UACnBhnD,gBAAiB,OAErB3pB,EAA6C,KAA8BhX,QAAQ,SAAWwhH,EAC9FxqG,EAA6C,KAA8B/W,YAAY,SAAW,QAK5F,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFilH,EAAuB,CACvB38B,aAAc,OACdC,aAAc,QACdC,aAAc,iBACdI,cAAe,sBACftmD,aAAc,kBACd2mD,YAAa,wDACbC,iBAAkB,kDAClBE,cAAe,iCACfvlC,eAAgB,cAChBwlC,cAAe,8BACfG,aAAc,kCACdC,cAAe,4BACfG,iBAAkB,oCAClBC,eAAgB,qCAChBC,eAAgB,uCAChBC,cAAe,wEACfC,WAAY,sDACZC,WAAY,wDACZC,aAAc,4CACdE,gBAAiB,oCACjBC,mBAAoB,gEACpBC,cAAe,qCACfC,mBAAoB,kCACpBC,cAAe,wEACf7L,OAAQ,aACRiM,UAAW,UAEfpwE,EAA6C,KAA8BhX,QAAQ,MAAQyhH,EAC3FzqG,EAA6C,KAA8B/W,YAAY,MAAQ,UAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIwa,EAA+Cxa,EAAoB,GAGxFklH,EAAyB,CACzB58B,aAAc,QACdC,aAAc,OACdC,aAAc,YACdG,gBAAiB,SACjBC,cAAe,6BACfC,aAAc,QACdC,kBAAmB,cACnBxmD,aAAc,qBACd0mD,sBAAuB,8BACvBC,YAAa,yBACbC,iBAAkB,oCAClBC,uBAAwB,kCACxBC,cAAe,6BACfvlC,eAAgB,aAChBtjD,MAAO,WACP8oF,cAAe,+BACfC,qBAAsB,sDACtBC,uBAAwB,0DACxBC,aAAc,iCACdC,cAAe,0CACfC,cAAe,yCACfC,iBAAkB,sDAClBC,iBAAkB,6CAClBC,eAAgB,6CAChBC,eAAgB,gDAChBC,cAAe,2DACfC,WAAY,sCACZC,WAAY,uCACZC,aAAc,uDACdC,kBAAmB,sCACnBC,gBAAiB,oCACjBC,mBAAoB,iFACpBC,cAAe,4CACfC,mBAAoB,yCACpBC,cAAe,wEACfC,YAAa,kBACb7mD,WAAY,sBACZC,aAAc,kBACd6mD,cAAe,4BACfC,oBAAqB,uCACrBp8B,UAAW,iBACXowB,OAAQ,eACRiM,UAAW,WACXhyC,SAAU,cACViyC,YAAa,WACbC,aAAc,UACdC,cAAe,UACfC,WAAY,QACZC,WAAY,uCACZC,gBAAiB,kDACjBC,kBAAmB,iCACnBhnD,gBAAiB,mBACjBinD,SAAU,KACVC,SAAU,MACVC,cAAe,kDACfC,eAAgB,oCAChBC,iBAAkB,mCAClBC,cAAe,uEACfC,eAAgB,0CAChBC,iBAAkB,2CAClBC,aAAc,WACdC,aAAc,WACdE,kBAAmB,iBAEvBvxE,EAA6C,KAA8BhX,QAAQ,MAAQ0hH,EAC3F1qG,EAA6C,KAA8B/W,YAAY,MAAQ,cAKzF,SAAU/D,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D+xF,EAAiD/xF,EAAoB,GACrEsoB,EAA4CtoB,EAAoB,GAChEu2E,EAA0Cv2E,EAAoB,IAC9DwoB,EAA+CxoB,EAAoB,GAC7DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO0jH,KASnG,IAAIA,EAAsC,SAAUzwG,GAEhD,SAASywG,EAAqB1kH,GAC1B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAevC,OAdA+U,EAAMlU,KAAOA,EACbkU,EAAM8L,wBAAwB,QAAS9L,GAAO,GAC9CA,EAAM8L,wBAAwB,aAAc9L,GAAO,GACnDA,EAAM8L,wBAAwB,YAAa9L,GAAO,GAClDA,EAAMywG,cAAcr7F,kBAAoB,SAAU3d,GAC9C,OAASA,GAEHoc,EAA6C,KAA8BvkB,UAAU,0BAE/F0Q,EAAM0wG,aAAat7F,kBAAoB,SAAU3d,GAC7C,OAASA,GAEHoc,EAA6C,KAA8BvkB,UAAU,wBAExF0Q,EAgNX,OAjOA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFmlH,EAAsBzwG,GAmBtGywG,EAAqB9jH,UAAUmN,QAAU,WACrC,MAAO,WAEX22G,EAAqB9jH,UAAU6pB,sBAAwB,SAAUC,GAC7D,OAAO,GAEXvqB,OAAOC,eAAeskH,EAAqB9jH,UAAW,kBAAmB,CAIrEL,IAAK,WACD,OAAOpB,KAAK4rB,WAEhBzqB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,WAAY,CAC9DL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,eAAgB,CAMlEL,IAAK,WACD,OAAIpB,KAAK4rB,UACE,KACJ5rB,KAAKW,OAASX,KAAK0lH,gBAE9Bj6G,IAAK,SAAU1H,GACP/D,KAAKwlB,aAGLxlB,KAAKiM,aAAalI,GAClB/D,KAAKW,MAAQ,KAGbX,KAAKW,MAAe,GAAPoD,EAAc/D,KAAK0lH,eAAiB1lH,KAAK2lH,kBAG9DxkH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,eAAgB,CAIlEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,iBAEjCb,IAAK,SAAU1H,IACC,IAARA,IACAA,EAAM,SACE,IAARA,IACAA,EAAM,SACV/D,KAAK2P,iBAAiB,eAAgB5L,GACtC/D,KAAKyzB,2BAETtyB,YAAY,EACZD,cAAc,IAElBqkH,EAAqB9jH,UAAU00B,gBAAkB,WAC7C,MAAyB,iBAArBn2B,KAAKkM,aACE,KACiB,QAArBlM,KAAKkM,aACNlM,KAAK0lH,eACL1lH,KAAK2lH,iBAEf3kH,OAAOC,eAAeskH,EAAqB9jH,UAAW,WAAY,CAC9DL,IAAK,WACD,OAAOpB,KAAKmkD,WAAankD,KAAKiM,aAAajM,KAAK4lH,SAASp5G,MACnDxM,KAAKmP,qBAAqB,SAC1BnP,KAAK4lH,UAEfzkH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,QAAS,CAM3DL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,UAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,QAASvL,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,WAAY,CAC9DL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,UAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,kBAAmB,CACrEL,IAAK,WACD,OAAIpB,KAAK4lH,SAASp5G,MAEXxM,KAAKmkD,UADDnkD,KAAK4lH,SACwB5lH,KAAK+tB,UAEjD5sB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,YAAa,CAI/DL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,cAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,YAAavL,IAE/C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,eAAgB,CAClEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,cAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,aAAc,CAIhEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,eAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,aAAcvL,IAEhD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,gBAAiB,CACnEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,eAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,YAAa,CAI/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,YAAa,CAI/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeskH,EAAqB9jH,UAAW,aAAc,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBqkH,EAAqB9jH,UAAUikH,aAAe,WAC1C,OAAO1lH,KAAK6lH,WAAY7lH,KAAK6lH,WAEjCN,EAAqB9jH,UAAUkkH,cAAgB,WAC3C,QAAO3lH,KAAK8lH,YAAa9lH,KAAK8lH,YAElCP,EAAqB9jH,UAAUw0B,gBAAkB,WACpB,QAArBj2B,KAAKkM,eACLlM,KAAK62E,cAAe,GACC,SAArB72E,KAAKkM,eACLlM,KAAK62E,cAAe,GACC,iBAArB72E,KAAKkM,eACLlM,KAAKW,MAAQ,OAEd4kH,EAlO8B,CAmOvC5uC,EAAwC,MAE1CjuD,EAA0C,KAAsBna,SAAS,UAAW,CAChF,CACI1N,KAAM,wBACN2J,gBAAiB,sBACjBpD,QAAS,gBACTuJ,QAAS,CAAC,gBAAiB,QAAS,SAExC,CAAE9P,KAAM,aAAc+J,sBAAuB,YAC7C,CACI/J,KAAM,iBACN+J,sBAAuB,gBAE3B,CACI/J,KAAM,kBACN+J,sBAAuB,iBAE3B,oBACA,YACA,eACD,WACC,OAAO,IAAI26G,EAAqB,MACjC,YACHpzB,EAA+C,KAA2Bx2E,SAASR,iBAAiB,WAAW,SAAUta,GACrH,OAAO,IAAI0kH,EAAqB1kH,OAM9B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE6wF,EAAiD7wF,EAAoB,GACrE8wF,EAAqD9wF,EAAoB,IACzEgrC,EAAyChrC,EAAoB,GAC7D+wF,EAA2C/wF,EAAoB,IAC/D2lH,EAA+C3lH,EAAoB,GAC7DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmkH,KAWnG,IAAIA,EAAuC,SAAUlxG,GAEjD,SAASkxG,EAAsBnlH,GAC3B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAMkxG,cAAgB,IAAI90B,EAAyC,KAAqB,QACxFp8E,EAAMmxG,mBAAqB,IAAI/0B,EAAyC,KAAqB,aAC7Fp8E,EAAMoxG,mBAAqB,GAC3BpxG,EAAMqxG,iCAAkC,EACxC,IAAIn9B,EAAel0E,EAAM8L,wBAAwB,WAAY9L,GAAO,GACpEk0E,EAAa9+D,kBAAoB,SAAU3d,GACvC,OAASA,GAAcu5G,EAA6C,KAA8B1hH,UAAU,iBAEhH0Q,EAAMkxG,cAAcx2G,SAAWsF,EAC/BA,EAAMkxG,cAAcz/E,WAAWyiD,GAC/B,IAAIC,EAAoBn0E,EAAM8L,wBAAwB,gBAAiB9L,GAAO,GAC9Em0E,EAAkB/+D,kBAAoB,SAAU3d,GAC5C,OAASA,GAAcu5G,EAA6C,KAA8B1hH,UAAU,sBAEhH0Q,EAAMsxG,cAAc52G,SAAWsF,EAC/BA,EAAMsxG,cAAc7/E,WAAW0iD,GAC/B,IAAI5nE,EAAOvM,EAIX,OAHAA,EAAMwL,yCAAyC,CAAC,UAAW,WAAY,eAAgB,kBAAkB,WACrGe,EAAK+qB,6BAEFt3B,EAuYX,OA/ZA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF4lH,EAAuBlxG,GA0BvG9T,OAAOC,eAAe+kH,EAAsBvkH,UAAW,WAAY,CAC/DL,IAAK,WACD,MAAO,SAEXD,YAAY,EACZD,cAAc,IAElB8kH,EAAsBvkH,UAAUmN,QAAU,WACtC,MAAO,YAEXo3G,EAAsBvkH,UAAUuoB,WAAa,WACzClV,EAAOrT,UAAUuoB,WAAWxpB,KAAKR,MACjCA,KAAKuP,eAAe,iBACpBvP,KAAKuP,eAAe,UAExBy2G,EAAsBvkH,UAAU6vB,uBAAyB,WACrD,OAAOtxB,KAAK4xB,QAAU,MAE1B5wB,OAAOC,eAAe+kH,EAAsBvkH,UAAW,gBAAiB,CAKpEL,IAAK,WACD,OAAOpB,KAAKkmH,oBAEhB/kH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,WAAY,CAK/DL,IAAK,WACD,OAAOpB,KAAKimH,eAEhB9kH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,WAAY,CAI/DL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,WAAY22G,EAA6C,KAA8B1hH,UAAU,kBAE1IoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,WAAYvL,IAE9C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,cAAe,CAClEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,aAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,gBAAiB,CAIpEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAAiB22G,EAA6C,KAA8B1hH,UAAU,uBAE/IoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,gBAAiBvL,IAEnD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,mBAAoB,CACvEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,kBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,eAAgB,CAInEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAgB,IAEjDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,eAAgB5L,IAE1C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+kH,EAAsBvkH,UAAW,gBAAiB,CAKpEL,IAAK,WACD,IAAI2C,EAAM/D,KAAKW,MACf,IAAKoD,IAAQb,MAAMoC,QAAQvB,GACvB,OAAO,EACX,GAAI/D,KAAKi4E,eAAej4E,KAAKsmH,UACzB,OAAO,EACX,IAAIC,EAAevmH,KAAKmvC,eAAe/sC,OACnCpC,KAAKqyB,UACLk0F,IACAvmH,KAAKwmH,SACLD,IACAvmH,KAAKymH,cACLF,IACJ,IAAIG,EAAgB3iH,EAAI3B,OAGxB,OAFIpC,KAAKi4E,eAAej4E,KAAKkuC,YACzBw4E,IACGA,IAAkBH,GAE7B96G,IAAK,SAAU1H,GACPA,EACA/D,KAAK2mH,YAGL3mH,KAAKm0B,cAGbhzB,YAAY,EACZD,cAAc,IAOlB8kH,EAAsBvkH,UAAUmlH,gBAAkB,WAC9C5mH,KAAKq4E,eAAiBr4E,KAAKq4E,eAK/B2tC,EAAsBvkH,UAAUklH,UAAY,WAExC,IADA,IAAI5iH,EAAM,GACDzD,EAAI,EAAGA,EAAIN,KAAKmvC,eAAe/sC,OAAQ9B,IAAK,CACjD,IAAIkP,EAAOxP,KAAKmvC,eAAe7uC,GAC3BkP,IAASxP,KAAKsmH,UACd92G,IAASxP,KAAKkuC,WACd1+B,IAASxP,KAAKqmH,eAElBtiH,EAAIY,KAAK6K,EAAK7O,OAElBX,KAAKW,MAAQoD,GAEjB/C,OAAOC,eAAe+kH,EAAsBvkH,UAAW,UAAW,CAI9DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAAW,IAE5Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAMlB8kH,EAAsBvkH,UAAUw2E,eAAiB,SAAUzoE,GACvD,GAAIA,IAASxP,KAAKqmH,cACd,OAAOrmH,KAAKq4E,cAChB,IAAIt0E,EAAM/D,KAAKmtC,cACf,IAAKppC,IAAQb,MAAMoC,QAAQvB,GACvB,OAAO,EACX,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAC5B,GAAI8qC,EAAuC,KAAmBtzB,iBAAiB/T,EAAIzD,GAAIkP,EAAK7O,OACxF,OAAO,EAEf,OAAO,GAEXqlH,EAAsBvkH,UAAUyyB,YAAc,SAAUnoB,GAC/C/L,KAAKomH,kCACNpmH,KAAKmmH,mBAAqB,IAE9Bp6G,EAAW/L,KAAK25B,cAAc5tB,GAC9B,IAAIpL,EAAQX,KAAKW,MAKjB,GAJKoL,IACDA,EAAW,IACVpL,IACDA,EAAQ,KACRyqC,EAAuC,KAAmBtzB,iBAAiBnX,EAAOoL,GAAtF,CAEA,GAAI/L,KAAKwmH,QAAS,CACd,IAAIK,EAAgB7mH,KAAK8mH,iBAAiBnmH,GACtComH,EAAe/mH,KAAK8mH,iBAAiB/6G,GACrC86G,GAAiB,EACbE,GAAgB,GAAKh7G,EAAS3J,OAAS,GACvC2J,EAASuC,OAAOy4G,EAAc,GAI9BA,GAAgB,IAChBh7G,EAASuC,OAAO,EAAGvC,EAAS3J,QAC5B2J,EAASpH,KAAK3E,KAAKsmH,SAAS3lH,QAIxCmU,EAAOrT,UAAUyyB,YAAY1zB,KAAKR,KAAMA,KAAKuuC,mBAAmBxiC,MAEpEi6G,EAAsBvkH,UAAUqlH,iBAAmB,SAAU/iH,GACzD,IAAKA,IAAQb,MAAMoC,QAAQvB,GACvB,OAAQ,EAEZ,IADA,IAAIijH,EAAYhnH,KAAKsmH,SAAS3lH,MACrBL,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAC5B,GAAIyD,EAAIzD,IAAM0mH,EACV,OAAO1mH,EAEf,OAAQ,GAEZ0lH,EAAsBvkH,UAAU8tC,sBAAwB,WACpD,OAAQvvC,KAAKwmH,UAAYxmH,KAAKymH,cAAgB3xG,EAAOrT,UAAU8tC,sBAAsB/uC,KAAKR,OAE9FgmH,EAAsBvkH,UAAUguC,oBAAsB,SAAUtuB,GACxDnhB,KAAKymH,cACLtlG,EAAMa,QAAQhiB,KAAKqmH,eAEvBvxG,EAAOrT,UAAUguC,oBAAoBjvC,KAAKR,KAAMmhB,GAC5CnhB,KAAKwmH,SACLrlG,EAAMxc,KAAK3E,KAAKsmH,WAGxBN,EAAsBvkH,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GACxE,IAAKuC,MAAMoC,QAAQ3E,GACf,OAAOmU,EAAOrT,UAAUszB,oBAAoBv0B,KAAKR,KAAM60B,EAAYl0B,GAGvE,IAFA,IAAIwgB,EAAQnhB,KAAKmvC,eACbr1B,EAAM,GACDxZ,EAAI,EAAGA,EAAIK,EAAMyB,OAAQ9B,IAAK,CACnC,IAAI2mH,EAASjnH,KAAK6vC,uBAAuB1uB,EAAOxgB,EAAML,IAClD2mH,IACIntG,IACAA,GAAO,MACXA,GAAOmtG,GAGf,OAAOntG,GAEXksG,EAAsBvkH,UAAU2vC,yBAA2B,WACvDpxC,KAAKknH,iCAAgC,IAEzClB,EAAsBvkH,UAAU6vC,wBAA0B,WACtDtxC,KAAKknH,iCAAgC,IAEzClB,EAAsBvkH,UAAUylH,gCAAkC,SAAUC,GACxE,IAAIpjH,EAAM/D,KAAKW,MACXgtC,GAAa,EACby5E,EAAiBpnH,KAAKqnH,6BAC1B,GAAKtjH,GAAgC,GAAzBqjH,EAAehlH,OAA3B,CAEA,IAAKc,MAAMoC,QAAQvB,IAAsB,GAAdA,EAAI3B,OAAa,CAWxC,GAVApC,KAAKomH,iCAAkC,EAClCe,IACGnnH,KAAKoyB,WACLpyB,KAAKW,MAAQ,KAGbX,KAAKm0B,cAGbn0B,KAAKomH,iCAAkC,EACV,GAAzBgB,EAAehlH,OACf,OACJ2B,EAAM,GAGV,IADA,IAAIgI,EAAW,GACNzL,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAAK,CACjC,IAAIgnH,EAAWtnH,KAAKuxC,sBAAsBxtC,EAAIzD,KACxC6mH,IAAkBG,GACnBH,IAAkBnnH,KAAKivC,gBAAgBlrC,EAAIzD,IAC5CyL,EAASpH,KAAKZ,EAAIzD,KAGlBqtC,GAAa,EACT25E,IACAtnH,KAAKmmH,mBAAmBpiH,EAAIzD,KAAM,IAI9C,IAASA,EAAI,EAAGA,EAAI8mH,EAAehlH,OAAQ9B,IACvCyL,EAASpH,KAAKyiH,EAAe9mH,IAC7BqtC,GAAa,EAEZA,IAEL3tC,KAAKomH,iCAAkC,EAChB,GAAnBr6G,EAAS3J,OACTpC,KAAKm0B,aAGLn0B,KAAKW,MAAQoL,EAEjB/L,KAAKomH,iCAAkC,KAE3CJ,EAAsBvkH,UAAU4lH,2BAA6B,WAGzD,IAFA,IAAI3iH,EAAM,GACN6iH,EAAWvnH,KAAKmvC,eACX7uC,EAAI,EAAGA,EAAIinH,EAASnlH,OAAQ9B,IAAK,CACtC,IAAIyD,EAAMwjH,EAASjnH,GAAGK,MAClBX,KAAKmmH,mBAAmBpiH,KACxBW,EAAIC,KAAKZ,UACF/D,KAAKmmH,mBAAmBpiH,IAGvC,OAAOW,GAEXshH,EAAsBvkH,UAAUy1B,iBAAmB,SAAUC,EAAUhxB,QAClD,IAAbgxB,IAAuBA,EAAW,WACzB,IAAThxB,IAAmBA,EAAO,MAC9B,IAAIgN,EAAO2B,EAAOrT,UAAUy1B,iBAAiB12B,KAAKR,MAIlD,MAHgB,YAAZm3B,GAAsC,eAAZA,IAC1BhkB,EAAK,QAAU,cAEZA,GAEX6yG,EAAsBvkH,UAAUo0B,gBAAkB,WAC9C,OAAOuV,EAAuC,KAAmBzzB,qBAAqB3X,KAAKW,MAAOX,KAAK01B,gBAE3GswF,EAAsBvkH,UAAU+lH,0BAA4B,WACxDxnH,KAAKW,MAAQX,KAAK+uC,0BAA0B/uC,KAAKkM,eAErD85G,EAAsBvkH,UAAUyrC,YAAc,SAAUnpC,GACpD,SAAKA,IAAQb,MAAMoC,QAAQvB,KAEpBA,EAAI2H,QAAQ1L,KAAKkuC,UAAUvtC,QAAU,GAEhDqlH,EAAsBvkH,UAAUk4B,cAAgB,SAAU51B,GACtD,IAAKA,EACD,OAAOA,EACX,IAAKb,MAAMoC,QAAQvB,GACf,MAAO,CAAC+Q,EAAOrT,UAAUk4B,cAAcn5B,KAAKR,KAAM+D,IAEtD,IADA,IAAIpD,EAAQ,GACHL,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAAK,CACjC,IAAIwuC,EAAaqiD,EAAyC,KAAqB3rD,eAAexlC,KAAKytC,cAAe1pC,EAAIzD,IAChHwuC,EACFnuC,EAAMgE,KAAKmqC,EAAWnuC,OAGtBA,EAAMgE,KAAKZ,EAAIzD,IAGvB,OAAOK,GAEXqlH,EAAsBvkH,UAAUstC,0BAA4B,SAAUhrC,GAC7DA,GAAQb,MAAMoC,QAAQvB,KACvBA,EAAM,IACV,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAAK,CACjC,GAAIyD,EAAIzD,IAAMN,KAAKkuC,UAAUvtC,MACzB,OAAOoD,EACX,GAAI/D,KAAKstC,gBAAgBvpC,EAAIzD,IAAK,CAC9BN,KAAKo0B,QAAUrwB,EAAIzD,GACnB,IAAI2kD,EAASlhD,EAAImN,QAEjB,OADA+zC,EAAO3kD,GAAKN,KAAKkuC,UAAUvtC,MACpBskD,GAGf,OAAOlhD,GAEXiiH,EAAsBvkH,UAAU0sC,uBAAyB,SAAUpqC,GAC/D,IAAKA,IAAQA,EAAI3B,OACb,OAAO2B,EACX,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAC5B,GAAIyD,EAAIzD,IAAMN,KAAKkuC,UAAUvtC,OACrBX,KAAKo2B,qBAAsB,CAC3B,IAAI6uB,EAASlhD,EAAImN,QAEjB,OADA+zC,EAAO3kD,GAAKN,KAAKo2B,qBACV6uB,EAInB,OAAOlhD,GAEXiiH,EAAsBvkH,UAAU6rC,gBAAkB,SAAUvpC,EAAKirC,GAE7D,YADqB,IAAjBA,IAA2BA,GAAe,KAC1ChvC,KAAKwmH,SAAWziH,GAAO/D,KAAKimH,cAActlH,QAEvCmU,EAAOrT,UAAU6rC,gBAAgB9sC,KAAKR,KAAM+D,EAAKirC,IAE5Dg3E,EAAsBvkH,UAAUo1B,uBAAyB,SAAUC,GAC/DhiB,EAAOrT,UAAUo1B,uBAAuBr2B,KAAKR,KAAM82B,GACnDA,EAAoBnyB,KAAK,gBAEtBqhH,EAha+B,CAiaxC90B,EAAmD,MAErDr2E,EAA0C,KAAsBtM,SAAS,WAAY,CACjF,uBACA,kBACA,CAAE1N,KAAM,WAAY+J,sBAAuB,eAC3C,CAAE/J,KAAM,gBAAiB+J,sBAAuB,sBACjD,WACC,OAAO,IAAIo7G,EAAsB,MAClC,gBACH/0B,EAA+C,KAA2Bt1E,SAASR,iBAAiB,YAAY,SAAUta,GACtH,IAAIuyC,EAAI,IAAI4yE,EAAsBnlH,GAElC,OADAuyC,EAAEziC,QAAUsgF,EAA+C,KAA2BQ,eAC/Er+C,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DozD,EAA0CpzD,EAAoB,IAC9DsoB,EAA4CtoB,EAAoB,GAChEqnH,EAAiDrnH,EAAoB,GACrEgrC,EAAyChrC,EAAoB,GACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO6lH,KASnG,IAAIA,EAAsC,SAAU5yG,GAEhD,SAAS4yG,EAAqB7mH,GAC1B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAGvC,OAFA+U,EAAMlU,KAAOA,EACbkU,EAAM8L,wBAAwB,cAAe9L,GACtCA,EA+EX,OApFA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFsnH,EAAsB5yG,GAOtG4yG,EAAqBjmH,UAAUy3B,YAAc,WACzC,OAAO,GAEXl4B,OAAOC,eAAeymH,EAAqBjmH,UAAW,YAAa,CAM/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBwmH,EAAqBjmH,UAAU6X,aAAe,WAC1C,OAAO8xB,EAAuC,KAAmB9xB,aAAatZ,KAAKmL,UAAWnL,KAAKqlB,OAASrlB,KAAKqlB,OAAOmtE,eAAiB,IAE7IxxF,OAAOC,eAAeymH,EAAqBjmH,UAAW,cAAe,CAIjEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,cAAevL,IAEjD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeymH,EAAqBjmH,UAAW,iBAAkB,CACpEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,gBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeymH,EAAqBjmH,UAAW,OAAQ,CAI1DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,SAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeymH,EAAqBjmH,UAAW,OAAQ,CAI1DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,SAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBwmH,EAAqBjmH,UAAUmN,QAAU,WACrC,MAAO,WAEX84G,EAAqBjmH,UAAUmqB,QAAU,WACrC,OAAO9W,EAAOrT,UAAUmqB,QAAQprB,KAAKR,OAAwB,KAAfA,KAAKW,OAEvD+mH,EAAqBjmH,UAAUo1B,uBAAyB,SAAUC,GAC9DhiB,EAAOrT,UAAUo1B,uBAAuBr2B,KAAKR,KAAM82B,GACnDA,EAAoBnyB,KAAK,OAAQ,UAE9B+iH,EArF8B,CAsFvCl0D,EAAwC,MAE1C9qC,EAA0C,KAAsBna,SAAS,UAAW,CAChF,CAAE1N,KAAM,mBAAoBuG,SAAU,GACtC,CAAEvG,KAAM,cAAeuG,QAAS,IAChC,CAAEvG,KAAM,cAAeuG,QAAS,GAChC,CAAEvG,KAAM,cAAe+J,sBAAuB,oBAC/C,WACC,OAAO,IAAI88G,EAAqB,MACjC,YACHD,EAA+C,KAA2B9rG,SAASR,iBAAiB,WAAW,SAAUta,GACrH,OAAO,IAAI6mH,EAAqB7mH,OAM9B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DozD,EAA0CpzD,EAAoB,IAC9DsoB,EAA4CtoB,EAAoB,GAChEuoB,EAAsCvoB,EAAoB,GAC1DgrC,EAAyChrC,EAAoB,GACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO8lH,KACpEvnH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO+lH,KAEpExnH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgmH,KACpEznH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOimH,KAMnG,IAAIH,EAAuC,WACvC,SAASA,EAAsB9mH,EAAMsS,GACjCnT,KAAKa,KAAOA,EACZb,KAAKmT,KAAOA,EACZ,IAAImO,EAAOthB,KACX0oB,EAA0C,KAAsBna,SAAS1N,EAAM,IAAI,SAAUsS,GACzF,OAAOy0G,EAAoBjsG,SAASD,eAAiBvI,EAAOA,EAAKtS,KAAO,GAAIygB,KAC7E,YACHthB,KAAK+nH,SAiDT,OA/CAJ,EAAsBlmH,UAAUsmH,OAAS,WAChC/nH,KAAKmT,KAAK40G,QAEf/nH,KAAKmT,KAAK40G,UAEdJ,EAAsBlmH,UAAUumH,UAAY,SAAUtrG,GAC7C1c,KAAKmT,KAAK60G,WAEfhoH,KAAKmT,KAAK60G,UAAUtrG,IAExBirG,EAAsBlmH,UAAUwmH,SAAW,SAAUvrG,GAC5C1c,KAAKmT,KAAK80G,UAEfjoH,KAAKmT,KAAK80G,SAASvrG,IAEvBirG,EAAsBlmH,UAAUymH,cAAgB,SAAUxrG,EAAU6rD,GAC3DvoE,KAAKmT,KAAK+0G,eAEfloH,KAAKmT,KAAK+0G,cAAcxrG,EAAU6rD,IAEtCo/C,EAAsBlmH,UAAU0mH,4BAA8B,SAAUzrG,EAAUqd,EAASwuC,GAClFvoE,KAAKmT,KAAKg1G,6BAEfnoH,KAAKmT,KAAKg1G,4BAA4BzrG,EAAUqd,EAASwuC,IAE7Do/C,EAAsBlmH,UAAUic,kBAAoB,SAAUhB,EAAUrO,EAActC,GAC7E/L,KAAKmT,KAAKuK,mBAEf1d,KAAKmT,KAAKuK,kBAAkBhB,EAAUrO,EAActC,IAExD47G,EAAsBlmH,UAAUkc,2BAA6B,SAAUjB,EAAUlN,EAAMnB,EAAcxN,EAAMkL,GAClG/L,KAAKmT,KAAKwK,4BAEf3d,KAAKmT,KAAKwK,2BAA2BjB,EAAU,CAC3CtQ,IAAKoD,EACLnB,aAAcA,EACdxN,KAAMA,EACNkL,SAAUA,KAGlB/K,OAAOC,eAAe0mH,EAAsBlmH,UAAW,cAAe,CAClEL,IAAK,WACD,QAASpB,KAAKmT,KAAKi1G,gBAAkBpoH,KAAKmT,KAAKk1G,gBAEnDlnH,YAAY,EACZD,cAAc,IAEXymH,EAzD+B,GA4DtCC,EAAqC,WACrC,SAASA,IACL5nH,KAAKsoH,qBAAuB,GAyDhC,OAvDAV,EAAoBnmH,UAAUsG,IAAM,SAAUoL,GAC1C,GAAKA,EAAL,CAEA,IAAItS,EAAOsS,EAAKtS,KAChB,IAAKA,EACD,KAAM,2BAGV,GADAA,EAAOA,EAAKgM,cACN7M,KAAKuoH,wBAAwB1nH,GAC/B,KAAO,0DAA4DA,EAAO,IAE9E,GAAM6nB,EAA0C,KAAsB9W,UAAU/Q,GAC5E,KAAM,qCAAuCA,EAAO,IAExD,IAAI2nH,EAAiB,IAAIb,EAAsB9mH,EAAMsS,GAC/CnT,KAAKyoH,cACPzoH,KAAKyoH,aAAa5nH,EAAM2nH,EAAeE,aAC3C1oH,KAAKsoH,qBAAqB3jH,KAAK6jH,KAEnCxnH,OAAOC,eAAe2mH,EAAoBnmH,UAAW,QAAS,CAC1DL,IAAK,WACD,OAAOpB,KAAKsoH,sBAEhBnnH,YAAY,EACZD,cAAc,IAElB0mH,EAAoBnmH,UAAU8mH,wBAA0B,SAAU1nH,GAC9D,IAAK,IAAIP,EAAI,EAAGA,EAAIN,KAAKsoH,qBAAqBlmH,OAAQ9B,IAClD,GAAIN,KAAKsoH,qBAAqBhoH,GAAGO,MAAQA,EACrC,OAAOb,KAAKsoH,qBAAqBhoH,GAEzC,OAAO,MAEXsnH,EAAoBnmH,UAAU+Z,MAAQ,WAClC,IAAK,IAAIlb,EAAI,EAAGA,EAAIN,KAAKsoH,qBAAqBlmH,OAAQ9B,IAClDooB,EAA0C,KAAsBhX,YAAY1R,KAAKsoH,qBAAqBhoH,GAAGO,MAE7Gb,KAAKsoH,qBAAuB,IAEhCV,EAAoBnmH,UAAUia,eAAiB,SAAU7a,EAAM8nH,GAC3D,OAAMA,EAAaD,YACR1oH,KAAK4oH,qBAAqB/nH,EAAM8nH,GACpC3oH,KAAK6oH,kBAAkBhoH,EAAM8nH,IAExCf,EAAoBnmH,UAAUmnH,qBAAuB,SAAU/nH,EAAM8nH,GACjE,OAAM3oH,KAAK8oH,kBACA9oH,KAAK8oH,kBAAkBjoH,EAAM8nH,GACjC,IAAIb,EAAuBjnH,EAAM8nH,IAE5Cf,EAAoBnmH,UAAUonH,kBAAoB,SAAUhoH,EAAM8nH,GAC9D,OAAM3oH,KAAK+oH,eACA/oH,KAAK+oH,eAAeloH,EAAM8nH,GAC9B,IAAId,EAAoBhnH,EAAM8nH,IAEzCf,EAAoBjsG,SAAW,IAAIisG,EAC5BA,EA3D6B,GA8DpCoB,EAAyC,SAAUl0G,GAEnD,SAASk0G,EAAwBnoH,EAAM2nH,GACnC,IAAIzzG,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAUvC,OATA+U,EAAMlU,KAAOA,EACbkU,EAAMyzG,eAAiBA,EACvB9/F,EAA0C,KAAsC/Z,iBAAiBoG,GACjG4T,EAAoC,KAAyBnF,8BAA+B,EAC5FzO,EAAMk0G,gBACNtgG,EAAoC,KAAyBnF,8BAA+B,EACtFzO,EAAMyzG,gBACRzzG,EAAMyzG,eAAeR,UAAUjzG,GAE5BA,EA0IX,OAtJA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF4oH,EAAyBl0G,GAczGk0G,EAAwBvnH,UAAUmN,QAAU,WACxC,OAAS5O,KAAKwoH,eAAiBxoH,KAAKwoH,eAAe3nH,KAAO,UAE9DmoH,EAAwBvnH,UAAUwnH,cAAgB,aAClDD,EAAwBvnH,UAAUse,uBAAyB,SAAUlf,EAAMwe,EAAUtT,GACjF+I,EAAOrT,UAAUse,uBAAuBvf,KAAKR,KAAMa,EAAMwe,EAAUtT,GAC7D/L,KAAKwoH,iBAAmBxoH,KAAKge,mBAC/Bhe,KAAKwoH,eAAe9qG,kBAAkB1d,KAAMa,EAAMkL,IAG1Di9G,EAAwBvnH,UAAUoe,yBAA2B,SAAUrQ,EAAM3O,EAAMwe,EAAUtT,GACzF+I,EAAOrT,UAAUoe,yBAAyBrf,KAAKR,KAAMwP,EAAM3O,EAAMwe,EAAUtT,GACrE/L,KAAKwoH,iBAAmBxoH,KAAKge,mBAC/Bhe,KAAKwoH,eAAe7qG,2BAA2B3d,KAAMwP,EAAMA,EAAKE,kBAAmB7O,EAAMkL,IAGjGi9G,EAAwBvnH,UAAUykB,iBAAmB,WACjD,IAAIrC,EAAK7jB,KAAKkpH,aACRrlG,GACFA,EAAGqC,mBAEPpR,EAAOrT,UAAUykB,iBAAiB1lB,KAAKR,OAE3CgpH,EAAwBvnH,UAAU0nH,YAAc,SAAUtlG,GACjDA,IAELA,EAAGe,cAAc5kB,MACjB6jB,EAAGN,sBAAuB,IAE9BylG,EAAwBvnH,UAAUmjB,cAAgB,SAAUjkB,GACxDmU,EAAOrT,UAAUmjB,cAAcpkB,KAAKR,KAAMW,GAC1CX,KAAKmpH,YAAYnpH,KAAKkpH,eAE1BF,EAAwBvnH,UAAUwkB,aAAe,WAC7CnR,EAAOrT,UAAUwkB,aAAazlB,KAAKR,MAC7BA,KAAKkpH,eACPlpH,KAAKkpH,aAAajjG,eAClBjmB,KAAKwoH,eAAeP,SAASjoH,QAGrCgpH,EAAwBvnH,UAAUkb,2BAA6B,SAAUkH,KAGzEmlG,EAAwBvnH,UAAUksB,YAAc,SAAU9J,GACtD/O,EAAOrT,UAAUksB,YAAYntB,KAAKR,KAAM6jB,GAClC7jB,KAAKwoH,gBACPxoH,KAAKwoH,eAAeN,cAAcloH,KAAM6jB,IAGhDmlG,EAAwBvnH,UAAUi4B,iBAAmB,SAAU3tB,EAAUyqB,QAC5C,IAArBA,IAA+BA,GAAmB,GACtD1hB,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,EAAUyqB,GACvDx2B,KAAK0lB,oBAETsjG,EAAwBvnH,UAAUyyB,YAAc,SAAUnoB,GACtD+I,EAAOrT,UAAUyyB,YAAY1zB,KAAKR,KAAM+L,GACxC/L,KAAK0lB,oBAGTsjG,EAAwBvnH,UAAUsjB,aAAe,WAC7C,OAAO/kB,MAEXgpH,EAAwBvnH,UAAUwjB,UAAY,WAC1C,OAAOjlB,KAAKqlB,QAEhB2jG,EAAwBvnH,UAAU0jB,iBAAmB,WACjD,OAAOnlB,KAAKwmB,eAGhBwiG,EAAwBvnH,UAAU0K,SAAW,SAAUtL,GACnD,OAAOb,KAAKW,OAEhBqoH,EAAwBvnH,UAAUgL,SAAW,SAAU5L,EAAMkL,EAAU+8C,EAAiBl/B,GACpF,GAAK5pB,KAAKykB,KAAV,CAEA,IAAIrQ,EAAUpU,KAAKopH,gBAAgBvoH,GACnCb,KAAKykB,KAAKhY,SAAS2H,EAASpU,KAAKqpH,iBAAiBxoH,EAAMkL,GAAW+8C,EAAiBl/B,GACpF5pB,KAAKw2B,mBACLx2B,KAAK0lB,qBAETsjG,EAAwBvnH,UAAU2nH,gBAAkB,SAAUvoH,GAC1D,OAAOb,KAAK6qB,gBAEhBm+F,EAAwBvnH,UAAU4nH,iBAAmB,SAAUxoH,EAAMkL,GACjE,OAAOA,GAEXi9G,EAAwBvnH,UAAUmnD,YAAc,SAAU/nD,GACtD,OAASb,KAAKykB,KAAOzkB,KAAKykB,KAAKmkC,YAAY/nD,GAAQ,MAEvDmoH,EAAwBvnH,UAAUonD,YAAc,SAAUhoD,EAAMkL,GACvD/L,KAAKykB,MAEVzkB,KAAKykB,KAAKokC,YAAYhoD,EAAMkL,IAEhCi9G,EAAwBvnH,UAAUsyB,WAAa,SAAUlzB,GACrD,OAASb,KAAKykB,KAAOzkB,KAAKykB,KAAKsP,WAAW/zB,KAAK6qB,gBAAkB,IAErEm+F,EAAwBvnH,UAAUm4B,WAAa,SAAU/4B,EAAMkL,EAAU+8C,GAChE9oD,KAAKykB,MAEVzkB,KAAKykB,KAAKmV,WAAW55B,KAAK6qB,eAAgB9e,EAAU+8C,IAExDkgE,EAAwBvnH,UAAUm5B,aAAe,WAC7C,OAAS56B,KAAKykB,KAAOzkB,KAAKykB,KAAKmW,eAAiB,IAEpDouF,EAAwBvnH,UAAUyqB,kBAAoB,WAClD,OAASlsB,KAAKykB,KAAOzkB,KAAKykB,KAAKyH,oBAAsB,IAEzD88F,EAAwBvnH,UAAU0qB,sBAAwB,WACtD,OAASnsB,KAAKykB,KAAOzkB,KAAKykB,KAAK0H,wBAA0B,IAG7D68F,EAAwBvnH,UAAUslB,WAAa,SAAUgT,EAASloB,KAClEm3G,EAAwBvnH,UAAUqlB,cAAgB,SAAUiT,GACxD,OAAO,GAEXivF,EAAwBvnH,UAAUorB,yBAA2B,WACzD,MAAO,QAEXm8F,EAAwBvnH,UAAU6xB,sBAAwB,WACtD,OAAOtzB,KAAKqzB,iBAEhB21F,EAAwBvnH,UAAU4pB,sBAAwB,WACtD,MAAO,OAEX29F,EAAwBvnH,UAAU+oB,oBAAsB,SAAU3G,KAClE7iB,OAAOC,eAAe+nH,EAAwBvnH,UAAW,WAAY,CACjEL,IAAK,WACD,MAAO,IAEXD,YAAY,EACZD,cAAc,IAElB8nH,EAAwBvnH,UAAUiK,QAAU,SAAUmY,GAClD,OAAQ,GAELmlG,EAvJiC,CAwJ1Cx1D,EAAwC,MAEtCq0D,EAAqC,SAAU/yG,GAE/C,SAAS+yG,IACL,OAAkB,OAAX/yG,GAAmBA,EAAOsH,MAAMpc,KAAMmC,YAAcnC,KA2H/D,OA7HAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFynH,EAAqB/yG,GAIrG+yG,EAAoBpmH,UAAU8R,YAAc,WACxC,MAAO,UAEXs0G,EAAoBpmH,UAAUwnH,cAAgB,WAC1CjpH,KAAKspH,gBAAkBtpH,KAAK0b,kBAEhCmsG,EAAoBpmH,UAAUynH,WAAa,WACvC,OAAOlpH,KAAK44E,iBAEhBivC,EAAoBpmH,UAAU21B,UAAY,SAAU7F,EAAc8F,GAG9D,QAFqB,IAAjB9F,IAA2BA,GAAe,QAClC,IAAR8F,IAAkBA,EAAM,OACvBr3B,KAAK44E,gBACN,OAAO,EACX,IAAIl0E,EAAM1E,KAAK44E,gBAAgBxhD,UAAU7F,EAAc8F,GACvDr3B,KAAKiV,OAAS,GACd,IAAK,IAAI3U,EAAI,EAAGA,EAAIN,KAAK44E,gBAAgB3jE,OAAO7S,OAAQ9B,IACpDN,KAAKiV,OAAOtQ,KAAK3E,KAAK44E,gBAAgB3jE,OAAO3U,IAMjD,OAJKoE,IACDA,EAAMoQ,EAAOrT,UAAU21B,UAAU52B,KAAKR,KAAMuxB,EAAc8F,IAE9Dr3B,KAAK0lB,mBACEhhB,GAEXmjH,EAAoBpmH,UAAUkjB,MAAQ,SAAUwM,QAC5B,IAAZA,IAAsBA,GAAU,GAC9BnxB,KAAK44E,gBACP54E,KAAK44E,gBAAgBj0D,MAAMwM,GAG3Brc,EAAOrT,UAAUkjB,MAAMnkB,KAAKR,KAAMmxB,IAG1CnwB,OAAOC,eAAe4mH,EAAoBpmH,UAAW,kBAAmB,CACpEL,IAAK,WACD,OAAOpB,KAAKspH,iBAEhBnoH,YAAY,EACZD,cAAc,IAElB2mH,EAAoBpmH,UAAUia,eAAiB,WAC3C,IAAIvI,EAAOnT,KAAKwoH,eAAer1G,KAC3BzO,EAAM,KACV,GAAMyO,EAAKw1G,aAAc,CACrB,IAAIljE,EAAQtyC,EAAKw1G,aAAa9iH,KAC9B,IAAK4/C,IAAU/8B,EAA0C,KAAsB9W,UAAU6zC,GACrF,KAAM,uDACV/gD,EAAMgkB,EAA0C,KAAsBxV,YAAYuyC,GAClFzlD,KAAKmpH,YAAYzkH,GACjBA,EAAIuZ,SAAS9K,EAAKw1G,mBAGZx1G,EAAKuI,iBACPhX,EAAMyO,EAAKuI,iBACX1b,KAAKmpH,YAAYzkH,IAMzB,OAHMA,IAAQA,EAAI7D,OACd6D,EAAI7D,KAAO,YAER6D,GAEXmjH,EAAoBpmH,UAAUwkB,aAAe,WACzCnR,EAAOrT,UAAUwkB,aAAazlB,KAAKR,MAC9BA,KAAK44E,iBAEN54E,KAAK4rB,YAAc5rB,KAAK44E,gBAAgBhtD,YACxC5rB,KAAKW,MAAQX,KAAK44E,gBAAgBj4E,QAG1CknH,EAAoBpmH,UAAUqqB,aAAe,SAAU4G,EAAQvkB,GAC3D2G,EAAOrT,UAAUqqB,aAAatrB,KAAKR,KAAM0yB,EAAQvkB,GAC3CnO,KAAK44E,iBACP54E,KAAK44E,gBAAgB9sD,aAAa4G,EAAQvkB,IAGlD05G,EAAoBpmH,UAAU2nH,gBAAkB,SAAUvoH,GACtD,IAAKb,KAAK44E,gBACN,OAAO9jE,EAAOrT,UAAU2nH,gBAAgB5oH,KAAKR,KAAMa,GACvD,IAAIuT,EAAUvT,EAAKmM,QAAQhN,KAAK44E,gBAAgB/tD,eAAgB7qB,KAAK6qB,gBACrE,OAA+C,GAAxCzW,EAAQ1I,QAAQ1L,KAAK6qB,gBACtBzW,EACAU,EAAOrT,UAAU2nH,gBAAgB5oH,KAAKR,KAAMa,IAEtDgnH,EAAoBpmH,UAAU4nH,iBAAmB,SAAUxoH,EAAMkL,GAC7D,OAAO/L,KAAKopH,gBAAgBvoH,IAASiU,EAAOrT,UAAU2nH,gBAAgB5oH,KAAKR,KAAMa,GAC3Eb,KAAK44E,gBAAgBj4E,MACrBoL,GAEV87G,EAAoBpmH,UAAUi4B,iBAAmB,SAAU3tB,EAAUyqB,QACxC,IAArBA,IAA+BA,GAAmB,GACtD1hB,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,EAAUyqB,GACjDx2B,KAAK44E,kBACP54E,KAAK44E,gBAAgBj4E,MAAQoL,IAGrC87G,EAAoBpmH,UAAUkyB,qBAAuB,SAAU5nB,GAC3D+I,EAAOrT,UAAUkyB,qBAAqBnzB,KAAKR,KAAM+L,GAC3C/L,KAAK44E,iBACP54E,KAAK44E,gBAAgBjlD,qBAAqB5nB,IAGlD87G,EAAoBpmH,UAAU0nH,YAAc,SAAUtlG,GAClD,IAAI9O,EAAQ/U,KACZ8U,EAAOrT,UAAU0nH,YAAY3oH,KAAKR,KAAM6jB,GAClCA,IACFA,EAAGjc,OAAS5H,KACZ6jB,EAAGgK,4BAA8B,SAAUnR,EAAUqd,GAC3ChlB,EAAMyzG,gBACRzzG,EAAMyzG,eAAeL,4BAA4BpzG,EAAO2H,EAAUqd,MAKlF8tF,EAAoBpmH,UAAU6sB,qBAAuB,SAAUG,GACrDzuB,KAAK44E,kBACPnqD,EAAazuB,KAAK44E,gBAAgBnqD,YAEtC3Z,EAAOrT,UAAU6sB,qBAAqB9tB,KAAKR,KAAMyuB,IAE9Co5F,EA9H6B,CA+HtCmB,GAEElB,EAAwC,SAAUhzG,GAElD,SAASgzG,IACL,OAAkB,OAAXhzG,GAAmBA,EAAOsH,MAAMpc,KAAMmC,YAAcnC,KAmI/D,OArIAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF0nH,EAAwBhzG,GAIxGgzG,EAAuBrmH,UAAUwnH,cAAgB,WAC7CjpH,KAAKupH,aAAevpH,KAAKwpH,eAE7B1B,EAAuBrmH,UAAU8R,YAAc,WAC3C,MAAO,aAEXu0G,EAAuBrmH,UAAUmvB,WAAa,WAC1C,MAAO,aAEXk3F,EAAuBrmH,UAAUynH,WAAa,WAC1C,OAAOlpH,KAAK04E,cAEhB13E,OAAOC,eAAe6mH,EAAuBrmH,UAAW,eAAgB,CACpEL,IAAK,WACD,OAAOpB,KAAKupH,cAEhBpoH,YAAY,EACZD,cAAc,IAElB4mH,EAAuBrmH,UAAU21B,UAAY,SAAU7F,EAAc8F,QAC5C,IAAjB9F,IAA2BA,GAAe,QAClC,IAAR8F,IAAkBA,EAAM,MAC5B,IAAI3yB,EAAMoQ,EAAOrT,UAAU21B,UAAU52B,KAAKR,KAAMuxB,EAAc8F,GAC9D,OAAKr3B,KAAK04E,cAEH14E,KAAK04E,aAAathD,UAAU7F,GAAc,EAAO8F,IAD7C3yB,GAGfojH,EAAuBrmH,UAAUikB,iBAAmB,WAChD5Q,EAAOrT,UAAUikB,iBAAiBllB,KAAKR,MACnCA,KAAK04E,cACL14E,KAAK04E,aAAahzD,oBAG1BoiG,EAAuBrmH,UAAU+nH,YAAc,WAC3C,IAAI9kH,EAAMgkB,EAA0C,KAAsBxV,YAAY,SACtFxO,EAAIu2B,oBAAsB,MAC1B,IAAI9nB,EAAOnT,KAAKwoH,eAAer1G,KAU/B,OATMA,EAAKi1G,cACP1jH,EAAIuZ,SAAS,CAAEoG,SAAUlR,EAAKi1G,eAE5Bj1G,EAAKk1G,gBACPl1G,EAAKk1G,eAAe3jH,GAExB1E,KAAKmpH,YAAYzkH,GACjBA,EAAIgM,SAAW1Q,KAAKwlB,WACpBxlB,KAAKypH,wBAAwB/kH,GACtBA,GAEXojH,EAAuBrmH,UAAUiiB,kBAAoB,WAC3C1jB,KAAK04E,eACP14E,KAAK04E,aAAahoE,SAAW1Q,KAAKwlB,YAEtC1Q,EAAOrT,UAAUiiB,kBAAkBljB,KAAKR,OAE5C8nH,EAAuBrmH,UAAUwkB,aAAe,WACtCjmB,KAAK04E,eACP14E,KAAK04E,aAAahoE,SAAW1Q,KAAKwlB,WAClCxlB,KAAK0pH,oBAAoB1pH,KAAK04E,eAElC5jE,EAAOrT,UAAUwkB,aAAazlB,KAAKR,OAEvC8nH,EAAuBrmH,UAAUioH,oBAAsB,SAAUzpF,GAC7DA,EAAMxc,kBAAmB,EAEzB,IADA,IAAIY,EAAW4b,EAAM5b,SACZ/jB,EAAI,EAAGA,EAAI+jB,EAASjiB,OAAQ9B,IAAK,CACtC,IAAIujB,EAAKQ,EAAS/jB,GACdujB,EAAGixB,QACH90C,KAAK0pH,oBAAoB7lG,GAGzBA,EAAGJ,kBAAmB,IAIlCqkG,EAAuBrmH,UAAU0kB,gBAAkB,SAAUpiB,GACzD,IAAIW,EAAMoQ,EAAOrT,UAAU0kB,gBAAgB3lB,KAAKR,KAAM+D,GAItD,OAHI/D,KAAKwN,WAAexN,KAAK04E,eACzBh0E,GAAO1E,KAAK04E,aAAavyD,gBAAgBpiB,IAEtCW,GAEXojH,EAAuBrmH,UAAUqqB,aAAe,SAAU4G,EAAQvkB,GAE9D,GADA2G,EAAOrT,UAAUqqB,aAAatrB,KAAKR,KAAM0yB,EAAQvkB,GAC3CnO,KAAK04E,aAAc,CACrB,IAAIixC,EAAej3F,EAAOk3F,UAC1Bl3F,EAAOk3F,UAAY5pH,KAAK04E,aAAavsE,WACrCnM,KAAK04E,aAAa5sD,aAAa4G,EAAQvkB,UAChCukB,EAAO,aACRi3F,IACFj3F,EAAOk3F,UAAYD,KAI/B7B,EAAuBrmH,UAAU0K,SAAW,SAAUtL,GAClD,IAAIkD,EAAM/D,KAAKW,MACf,OAASoD,EAAMA,EAAIlD,GAAQ,MAE/BinH,EAAuBrmH,UAAU4nH,iBAAmB,SAAUxoH,EAAMkL,GAChE,IAAIhI,EAAM/D,KAAKW,MASf,OARKoD,IACDA,EAAM,IACNqnC,EAAuC,KAAmBn/B,aAAaF,UAChEhI,EAAIlD,GAGXkD,EAAIlD,GAAQkL,EAEThI,GAEX+jH,EAAuBrmH,UAAUi4B,iBAAmB,SAAU3tB,EAAUyqB,QAC3C,IAArBA,IAA+BA,GAAmB,GACtD1hB,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,EAAUyqB,GAEvD,IADA,IAAIwe,EAAYh1C,KAAK04E,aAAa1jC,UACzB10C,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAAK,CACvC,IAAIqC,EAAMqyC,EAAU10C,GAAGuqB,eACvBmqB,EAAU10C,GAAGK,MAAUoL,EAAWA,EAASpJ,QAAO6B,IAG1DsjH,EAAuBrmH,UAAUgoH,wBAA0B,SAAUxpF,GACjE,IAAIlrB,EAAQ/U,KACZ,GAAKigC,GAAUjgC,KAAKwoH,eAGpB,IADA,IAAIxzE,EAAY/U,EAAM+U,UACb10C,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAClC00C,EAAU10C,GAAGutB,4BAA8B,SAAUnR,EAAUqd,GAC3DhlB,EAAMyzG,eAAeL,4BAA4BpzG,EAAO2H,EAAUqd,KAIvE+tF,EAtIgC,CAuIzCkB,IAMI,SAAUlpH,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE8qC,EAA0C9qC,EAAoB,IACxDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgoH,KAOnG,IAAIA,EAAoC,SAAU/0G,GAE9C,SAAS+0G,EAAmBhpH,GACxB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAEvC,OADA+U,EAAMlU,KAAOA,EACNkU,EAKX,OATA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFypH,EAAoB/0G,GAMpG+0G,EAAmBpoH,UAAUmN,QAAU,WACnC,MAAO,SAEJi7G,EAV4B,CAWrC3+E,EAAwC,MAE1CrwB,EAA0C,KAAsBtM,SAAS,QAAS,IAAI,WAClF,OAAO,IAAIs7G,EAAmB,MAC/B,aAKG,SAAU/pH,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DozD,EAA0CpzD,EAAoB,IAC9DsoB,EAA4CtoB,EAAoB,GAChEqnH,EAAiDrnH,EAAoB,GACrE4iD,EAAsC5iD,EAAoB,GAC1DyoB,EAAuCzoB,EAAoB,IAC3D2lH,EAA+C3lH,EAAoB,GAC7DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOioH,KAWnG,IAAIA,EAAmC,SAAUh1G,GAE7C,SAASg1G,EAAkBjpH,GACvB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAWvC,OAVA+U,EAAMlU,KAAOA,EACbkU,EAAMg1G,aAAc,EAMpBh1G,EAAMi1G,eAAiB,IAAIhnE,EAAoC,KAC/DjuC,EAAMk1G,aAAe,GACrBl1G,EAAMm1G,aAAe,QACdn1G,EA+ZX,OA5aA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF0pH,EAAmBh1G,GAenGg1G,EAAkBroH,UAAUmN,QAAU,WAClC,MAAO,QAEXk7G,EAAkBroH,UAAU04B,yBAA2B,WACnDn6B,KAAKqlB,OAAOykD,WAAW9pE,KAAKa,KAAMb,KAAKW,MAAO,MAAM,gBAExDK,OAAOC,eAAe6oH,EAAkBroH,UAAW,cAAe,CAI9DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,IAEzC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,gBAAiB,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,iBAAiB,IAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,cAAe,CAI9DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,IAEzC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,aAAc,CAI7DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,gBAAiB,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,kBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,kBAAmB,CAMlEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,oBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,kBAAmB5L,IAE7C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,gBAAiB,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,iBAAiB,IAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,qBAAsB,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,uBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,qBAAsB5L,IAEhD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,UAAW,CAI1DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,UAAW,IAE5Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,wBAAyB,CAIxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,0BAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,wBAAyB5L,IAEnD5C,YAAY,EACZD,cAAc,IAKlB4oH,EAAkBroH,UAAU05E,wBAA0B,SAAUpR,GAC5D,OAAOg8C,EAA6C,KAC/C1hH,UAAU,qBAAqB,UAAU0lE,IAElD/oE,OAAOC,eAAe6oH,EAAkBroH,UAAW,0BAA2B,CAI1EL,IAAK,WACD,OAAO2kH,EAA6C,KAA8B1hH,UAAU,0BAEhGlD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,sBAAuB,CAItEL,IAAK,WACD,OAAO2kH,EAA6C,KAA8B1hH,UAAU,iBAEhGlD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,sBAAuB,CAItEL,IAAK,WACD,OAAO2kH,EAA6C,KAA8B1hH,UAAU,sBAEhGlD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,qBAAsB,CAIrEL,IAAK,WACD,OAAO2kH,EAA6C,KAA8B1hH,UAAU,iBAEhGlD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,oBAAqB,CAIpEL,IAAK,WACD,OAAO2kH,EAA6C,KAA8B1hH,UAAU,sBAEhGlD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6oH,EAAkBroH,UAAW,aAAc,CAI7DL,IAAK,WACD,OAAIpB,KAAK+pH,YACEhE,EAA6C,KAA8B1hH,UAAU,eAC5FrE,KAAK4rB,UACEm6F,EAA6C,KAA8B1hH,UAAU,cACzF,KAEXlD,YAAY,EACZD,cAAc,IAKlB4oH,EAAkBroH,UAAU+Z,MAAQ,SAAU2uG,GAC1C,IAAIp1G,EAAQ/U,KACZA,KAAKqlB,OAAOykD,WAAW9pE,KAAKa,KAAMb,KAAKW,MAAO,MAAM,SAAU09B,EAAQ5Z,GACnD,YAAX4Z,IACAtpB,EAAMpU,WAAQ6D,EACduQ,EAAME,OAAS,GACbk1G,GAAgBA,SAO9BL,EAAkBroH,UAAUkiC,WAAa,SAAUhU,GAC/C,IAAI5a,EAAQ/U,KACZA,KAAKqlB,OAAOykD,WAAW9pE,KAAKa,KAAMb,KAAKW,MAAOgvB,EAAQ9uB,MAAM,SAAUw9B,EAAQ5Z,GAC1E,GAAe,YAAX4Z,EAAsB,CACtB,IAAIhf,EAAWtK,EAAMpU,MACjBuC,MAAMoC,QAAQ+Z,GACdtK,EAAMpU,MAAQ0e,EAAS0zB,QAAO,SAAUqxD,GAAK,OAAOA,EAAEvjG,OAAS8uB,EAAQ9uB,QAGvEkU,EAAMpU,WAAQ6D,OAS9BslH,EAAkBroH,UAAU+5E,UAAY,SAAUhS,GAC9C,IAAIz0D,EAAQ/U,KACZ,GAAKA,KAAKqlB,SAGVrlB,KAAKiV,OAAS,GACTjV,KAAKoqH,WAAW5gD,IAArB,CAGAxpE,KAAKqqH,aAAa,WAClB,IAAIC,EAAgB,WAChB,IAAI36F,EAAU,GACV5a,EAAMw1G,gBACN/gD,EAAMpqD,SAAQ,SAAUmkB,GACpB,IAAIinF,EAAa,IAAIC,WACrBD,EAAW1kC,OAAS,SAAU9yC,GAC1BrjB,EAAUA,EAAQlnB,OAAO,CACrB,CAAE5H,KAAM0iC,EAAK1iC,KAAMgF,KAAM09B,EAAK19B,KAAM8pB,QAAS66F,EAAWjmH,UAExDorB,EAAQvtB,SAAWonE,EAAMpnE,SACzB2S,EAAMpU,OAASoU,EAAMpU,OAAS,IAAI8H,OAAOknB,KAGjD66F,EAAWE,cAAcnnF,MAI7BxuB,EAAMsQ,OAAOkkD,YAAYx0D,EAAOA,EAAMlU,KAAM2oE,GAAO,SAAUnrC,EAAQ5Z,GAClD,UAAX4Z,GACAtpB,EAAMs1G,aAAa,SAER,YAAXhsF,IACAtpB,EAAMpU,OAASoU,EAAMpU,OAAS,IAAI8H,OAAOgc,EAAKhS,KAAI,SAAU5P,GACxD,MAAO,CACHhC,KAAMgC,EAAE0gC,KAAK1iC,KACbgF,KAAMhD,EAAE0gC,KAAK19B,KACb8pB,QAAS9sB,EAAE8sB,kBAO/B3vB,KAAKu7E,cACL+uC,IAGAtqH,KAAKwb,MAAM8uG,KAGnBR,EAAkBroH,UAAUkpH,gBAAkB,SAAUC,GACpD,OAAO5qH,KAAK6qH,sBAAwBD,GAAY5qH,KAAK8qH,YAAYF,IAErEd,EAAkBroH,UAAUi4B,iBAAmB,SAAU3tB,GACrD,IAAIgJ,EAAQ/U,KACZ8U,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,GAC7C/L,KAAKiqH,aAAe,GACpB,IAAIzvE,GAAUt3C,MAAMoC,QAAQyG,IAAeA,GACtC7I,MAAMoC,QAAQyG,IAAaA,EAAS3J,OAAS,EAC5CpC,KAAK+kE,YACD,UACA,SACJ,QAEN,GADA/kE,KAAKqqH,aAAa7vE,GACbx6C,KAAK+kE,aAAgBh5D,EAA1B,CAEA,IAAIukD,EAAYptD,MAAMoC,QAAQyG,GACxBA,EACEA,EACE,CAACA,GACD,GACN/L,KAAKuqH,iBACLj6D,EAAUlxC,SAAQ,SAAUze,GACxB,IAAIgvB,EAAUhvB,EAAMgvB,SAAWhvB,EAC/BoU,EAAMk1G,aAAel1G,EAAMk1G,aAAaxhH,OAAO,CAC3C,CACI5H,KAAMF,EAAME,KACZgF,KAAMlF,EAAMkF,KACZ8pB,QAASA,QAIP,YAAV6qB,GACAx6C,KAAKqqH,aAAa,WAGtB/5D,EAAUlxC,SAAQ,SAAUze,GACVA,EAAMgvB,QACpB5a,EAAMsQ,OAAOskD,aAAa50D,EAAMlU,KAAMF,GAAO,SAAU09B,EAAQ5Z,GAC5C,YAAX4Z,GACAtpB,EAAMk1G,aAAel1G,EAAMk1G,aAAaxhH,OAAO,CAC3C,CACIknB,QAASlL,EACT5jB,KAAMF,EAAME,KACZgF,KAAMlF,EAAMkF,QAGhBkP,EAAMk1G,aAAa7nH,SAAWkuD,EAAUluD,QACxC2S,EAAMs1G,aAAa,WAIvBt1G,EAAMs1G,aAAa,iBAMvCP,EAAkBroH,UAAUu2B,iBAAmB,SAAU/iB,EAAQuiB,GAC7D1iB,EAAOrT,UAAUu2B,iBAAiBx3B,KAAKR,KAAMiV,EAAQuiB,GACjDx3B,KAAK+pH,aAAe/pH,KAAK+qH,eACzB91G,EAAOtQ,KAAK,IAAIkkB,EAAqC,KAA8Bk9F,EAA6C,KAA8B1hH,UAAU,iBAAkBrE,QAGlM8pH,EAAkBroH,UAAU4oH,aAAe,SAAU7vE,GACnC,YAAVA,IACAx6C,KAAK+pH,aAAc,GAET,WAAVvvE,IACAx6C,KAAK+pH,aAAc,GAEvB/pH,KAAKkqH,aAAe1vE,EACpBx6C,KAAKgqH,eAAelqG,KAAK9f,KAAM,CAAEw6C,MAAOA,KAE5CsvE,EAAkBroH,UAAU2oH,WAAa,SAAU5gD,GAC/C,IAAIz0D,EAAQ/U,KACRgrH,EAAchrH,KAAKiV,OAASjV,KAAKiV,OAAO7S,OAAS,EAMrD,OALConE,GAAS,IAAIpqD,SAAQ,SAAUmkB,GACxBxuB,EAAM8oB,QAAU,GAAK0F,EAAKo+D,KAAO5sF,EAAM8oB,SACvC9oB,EAAME,OAAOtQ,KAAK,IAAIkkB,EAAqC,KAA2B9T,EAAM8oB,QAAS9oB,OAGtGi2G,IAAgBhrH,KAAKiV,OAAO7S,QAEvC0nH,EAAkBroH,UAAUqpH,YAAc,SAAUvnF,GAChD,IAAKA,EACD,OAAO,EACX,IAAI0nF,EAAc,aACdC,EAAS3nF,EAAK5T,SAAW4T,EAAK5T,QAAQhkB,OAAO,EAAGs/G,EAAY7oH,QAChE8oH,EAASA,GAAUA,EAAOr+G,cAC1B,IAAItI,EAAS2mH,IAAWD,KACjB1nF,EAAK19B,MAAsD,IAA9C09B,EAAK19B,KAAKgH,cAAcnB,QAAQ,UACpD,OAAOnH,GAEXulH,EAAkBroH,UAAUwzB,aAAe,SAAUrvB,QACjC,IAAZA,IAAsBA,EAAU,CAChCsvB,cAAc,IAElB,IAAIE,EAAoBtgB,EAAOrT,UAAUwzB,aAAaz0B,KAAKR,KAAM4F,GACjE,GAAMwvB,IAAsBp1B,KAAK4rB,UAAW,CACxCwJ,EAAkBE,QAAS,EAC3B,IAAI5C,EAASxvB,MAAMoC,QAAQtF,KAAKW,OAASX,KAAKW,MAAQ,CAACX,KAAKW,OAC5Dy0B,EAAkB3Q,KAAOiO,EAAOjgB,KAAI,SAAUi9B,EAAW79B,GACrD,MAAO,CACHhR,KAAMgR,EACNke,MAAO,OACPpvB,MAAQ+uC,EAAU/f,SAAW+f,EAAU/f,SAAY+f,EACnDra,aAAeqa,EAAU7uC,MAAQ6uC,EAAU7uC,MAAS6uC,EACpDrrC,UAAW,SAAUN,GACjB,MAAsB,kBAARA,EAAmBgV,KAAKE,UAAUlV,GAAOA,GAE3DuxB,QAAQ,MAIpB,OAAOF,GAEX00F,EAAkBroH,UAAUwwB,eAAiB,WACzC,OAAO,GAEJ63F,EA7a2B,CA8apCt2D,EAAwC,MAE1C9qC,EAA0C,KAAsBna,SAAS,OAAQ,CAC7E,CAAE1N,KAAM,oBAAqBuK,OAAQ,OACrC,CACIvK,KAAM,cACNgQ,UAAW,aACXtF,UAAW,SAAUa,GACjB,OAAOA,EAAIgmB,YAEfxnB,sBAAuB,iBACvBQ,OAAQ,OAEZ,CAAEvK,KAAM,sBAAuBuG,SAAS,GACxC,wBACA,CAAEvG,KAAM,6BAA8BuG,SAAS,GAC/C,cACA,aACA,gBACA,CAAEvG,KAAM,0BAA2BuG,SAAS,GAC5C,CAAEvG,KAAM,wBAAyBuG,SAAS,GAC1C,iBACA,CAAEvG,KAAM,eAAgB6M,SAAS,GACjC,CAAE7M,KAAM,gBAAiB6M,SAAS,GAClC,CAAE7M,KAAM,aAAc6M,SAAS,GAC/B,CAAE7M,KAAM,gCAAiC6M,SAAS,EAAMtG,SAAS,KAClE,WACC,OAAO,IAAI0iH,EAAkB,MAC9B,YACHrC,EAA+C,KAA2B9rG,SAASR,iBAAiB,QAAQ,SAAUta,GAClH,OAAO,IAAIipH,EAAkBjpH,OAM3B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D+qH,EAAkD/qH,EAAoB,IACtEsoB,EAA4CtoB,EAAoB,GAChEqnH,EAAiDrnH,EAAoB,GAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOupH,KAQnG,IAAIA,EAAmC,SAAUt2G,GAE7C,SAASs2G,EAAkBvqH,GACvB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACb,IAAIwqH,EAAUt2G,EAAM8L,wBAAwB,OAAQ9L,GAChDuM,EAAOvM,EAIX,OAHAs2G,EAAQlhG,kBAAoB,SAAUrQ,GAClC,OAASwH,EAAK+D,OAAS/D,EAAK+D,OAAO+iD,YAAYtuD,GAAOA,GAEnD/E,EAuCX,OAhDA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFgrH,EAAmBt2G,GAWnGs2G,EAAkB3pH,UAAUmN,QAAU,WAClC,MAAO,QAEX5N,OAAOC,eAAemqH,EAAkB3pH,UAAW,sBAAuB,CACtEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAemqH,EAAkB3pH,UAAW,OAAQ,CAIvDL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,OAAQ,KAEjD3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,OAAQvL,IAE1C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAemqH,EAAkB3pH,UAAW,UAAW,CAC1DL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,SAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAemqH,EAAkB3pH,UAAW,gBAAiB,CAChEL,IAAK,WACD,OAAOpB,KAAKqlB,OAASrlB,KAAKqlB,OAAO+iD,YAAYpoE,KAAKumB,MAAQvmB,KAAKumB,MAEnEplB,YAAY,EACZD,cAAc,IAEXkqH,EAjD2B,CAkDpCD,EAAgD,MAElDziG,EAA0C,KAAsBna,SAAS,OAAQ,CAAC,CAAE1N,KAAM,YAAa+J,sBAAuB,aAAc,WACxI,OAAO,IAAIwgH,EAAkB,MAC9B,YACH3D,EAA+C,KAA2B9rG,SAASR,iBAAiB,QAAQ,SAAUta,GAClH,OAAO,IAAIuqH,EAAkBvqH,OAM3B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D+qH,EAAkD/qH,EAAoB,IACtEsoB,EAA4CtoB,EAAoB,GAChEqnH,EAAiDrnH,EAAoB,GAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOypH,KAQnG,IAAIA,EAAoC,SAAUx2G,GAE9C,SAASw2G,EAAmBzqH,GACxB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAEvC,OADA+U,EAAMlU,KAAOA,EACNkU,EAgFX,OApFA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFkrH,EAAoBx2G,GAMpGw2G,EAAmB7pH,UAAUmN,QAAU,WACnC,MAAO,SAEX5N,OAAOC,eAAeqqH,EAAmB7pH,UAAW,sBAAuB,CACvEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeqqH,EAAmB7pH,UAAW,YAAa,CAI7DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeqqH,EAAmB7pH,UAAW,cAAe,CAI/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,IAEzC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeqqH,EAAmB7pH,UAAW,aAAc,CAI9DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeqqH,EAAmB7pH,UAAW,WAAY,CAI5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeqqH,EAAmB7pH,UAAW,cAAe,CAI/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,GACzB,UAARA,IACA/D,KAAKurH,WAAY,IAGzBpqH,YAAY,EACZD,cAAc,IAEXoqH,EArF4B,CAsFrCH,EAAgD,MAElDziG,EAA0C,KAAsBna,SAAS,QAAS,CAC9E,CAAE1N,KAAM,aACR,CACIA,KAAM,cACNuG,QAAS,QACTuJ,QAAS,CAAC,QAAS,UAEvB,CACI9P,KAAM,WACNuG,QAAS,UACTuJ,QAAS,CAAC,OAAQ,UAAW,QAAS,SAE1C,CAAE9P,KAAM,qBAAsBuG,QAAS,IAAKoJ,SAAU,GACtD,CAAE3P,KAAM,oBAAqBuG,QAAS,IAAKoJ,SAAU,KACtD,WACC,OAAO,IAAI86G,EAAmB,MAC/B,YACH7D,EAA+C,KAA2B9rG,SAASR,iBAAiB,SAAS,SAAUta,GACnH,OAAO,IAAIyqH,EAAmBzqH,OAM5B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE6wF,EAAiD7wF,EAAoB,GACrE8wF,EAAqD9wF,EAAoB,IACzEgrC,EAAyChrC,EAAoB,GACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO2pH,KASnG,IAAIA,EAA0C,SAAU12G,GAEpD,SAAS02G,EAAyB3qH,GAC9B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAGvC,OAFA+U,EAAMlU,KAAOA,EACbkU,EAAM48B,SAAW,EACV58B,EAsLX,OA3LA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgForH,EAA0B12G,GAO1G02G,EAAyB/pH,UAAUmN,QAAU,WACzC,MAAO,eAEX48G,EAAyB/pH,UAAUu4B,2BAA6B,WAC5D,OAAO,GAEXh5B,OAAOC,eAAeuqH,EAAyB/pH,UAAW,iBAAkB,CACxEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBsqH,EAAyB/pH,UAAU2gB,iBAAmB,WAClD,MAAO,kBAEXphB,OAAOC,eAAeuqH,EAAyB/pH,UAAW,sBAAuB,CAC7EL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuqH,EAAyB/pH,UAAW,cAAe,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAAe,IAEhDb,IAAK,SAAUM,GACX/L,KAAK2P,iBAAiB,cAAe5D,IAEzC5K,YAAY,EACZD,cAAc,IAMlBsqH,EAAyB/pH,UAAUw2E,eAAiB,SAAUzoE,GAC1D,IAAIzL,EAAM/D,KAAKW,MACf,GAAIyqC,EAAuC,KAAmBn/B,aAAalI,GACvE,OAAO,EACX,IAAK/D,KAAKyrH,YACN,OAAOrgF,EAAuC,KAAmBtzB,iBAAiB/T,EAAKyL,EAAK7O,OAChG,IAAKuC,MAAMoC,QAAQvB,GACf,OAAO,EACX,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAC5B,GAAI8qC,EAAuC,KAAmBtzB,iBAAiB/T,EAAIzD,GAAIkP,EAAK7O,OACxF,OAAO,EAEf,OAAO,GAEX6qH,EAAyB/pH,UAAUy4B,qBAAuB,WACtD,GAAIl6B,KAAKyrH,YAAa,CAClB,IAAI1nH,EAAM/D,KAAKW,MACf,IAAKoD,EACD,OACJ,IAAKb,MAAMoC,QAAQvB,IAAsB,GAAdA,EAAI3B,OAE3B,YADApC,KAAKm0B,aAIT,IADA,IAAIpoB,EAAW,GACNzL,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IACvBN,KAAKstC,gBAAgBvpC,EAAIzD,IAAI,IAC9ByL,EAASpH,KAAKZ,EAAIzD,IAG1B,GAAIyL,EAAS3J,QAAU2B,EAAI3B,OACvB,OACmB,GAAnB2J,EAAS3J,OACTpC,KAAKm0B,aAGLn0B,KAAKW,MAAQoL,OAIjB+I,EAAOrT,UAAUy4B,qBAAqB15B,KAAKR,OAGnDgB,OAAOC,eAAeuqH,EAAyB/pH,UAAW,YAAa,CAInEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAAa,IAE9Cb,IAAK,SAAUM,GACX/L,KAAK2P,iBAAiB,YAAa5D,IAEvC5K,YAAY,EACZD,cAAc,IAElBsqH,EAAyB/pH,UAAU2U,mBAAqB,WACpDtB,EAAOrT,UAAU2U,mBAAmB5V,KAAKR,OACpCA,KAAKslB,cAAgBtlB,KAAKyrH,cAC3BzrH,KAAKuP,eAAe,iBACpBvP,KAAKuP,eAAe,WAG5Bi8G,EAAyB/pH,UAAUwyB,aAAe,WAC9C,IAAItzB,EAAQmU,EAAOrT,UAAUwyB,aAAazzB,KAAKR,MAC/C,YAAcwE,IAAV7D,EACOA,EAEPX,KAAKyrH,YACE,GAEJ9qH,GAEX6qH,EAAyB/pH,UAAUiqH,+BAAiC,SAAU3nH,GAC1E,OAAK/D,KAAKyrH,YAENrgF,EAAuC,KAAmBn/B,aAAalI,IAAQb,MAAMoC,QAAQvB,GACtFA,EACJ,CAACA,GAHGA,GAKfynH,EAAyB/pH,UAAUstC,0BAA4B,SAAUhrC,GACrE,OAAO/D,KAAK0rH,+BAA+B3nH,IAE/CynH,EAAyB/pH,UAAU0sC,uBAAyB,SAAUpqC,GAClE,OAAO/D,KAAK0rH,+BAA+B3nH,IAE/C/C,OAAOC,eAAeuqH,EAAyB/pH,UAAW,cAAe,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,IAEzC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuqH,EAAyB/pH,UAAW,aAAc,CAIpEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuqH,EAAyB/pH,UAAW,WAAY,CAIlEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuqH,EAAyB/pH,UAAW,cAAe,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,GACzB,UAARA,IACA/D,KAAKurH,WAAY,IAGzBpqH,YAAY,EACZD,cAAc,IAEXsqH,EA5LkC,CA6L3Ct6B,EAAmD,MAErDr2E,EAA0C,KAAsBtM,SAAS,iBAAkB,QAAI/J,EAAW,aAC1GqW,EAA0C,KAAsB3M,YAAY,iBAAkB,CAC1FrN,KAAM,cAEVga,EAA0C,KAAsBtM,SAAS,cAAe,CACpF,CAAE1N,KAAM,WAAY6M,SAAS,GAC7B,CAAE7M,KAAM,YAAa6M,SAAS,GAC9B,CAAE7M,KAAM,iBAAkB6M,SAAS,GACnC,CAAE7M,KAAM,iBAAkB6M,SAAS,GACnC,CAAE7M,KAAM,uBAAwB6M,SAAS,GACzC,CACI7M,KAAM,cACNuG,QAAS,QACTuJ,QAAS,CAAC,QAAS,UAEvB,CACI9P,KAAM,WACNuG,QAAS,UACTuJ,QAAS,CAAC,OAAQ,UAAW,QAAS,SAE1C,CAAE9P,KAAM,qBAAsBuG,QAAS,IAAKoJ,SAAU,GACtD,CAAE3P,KAAM,oBAAqBuG,QAAS,IAAKoJ,SAAU,KACtD,WACC,OAAO,IAAIg7G,EAAyB,MACrC,gBACH3wG,EAA0C,KAAsB3M,YAAY,cAAe,CACvFrN,KAAM,oBACNuG,SAAS,IAEbyT,EAA0C,KAAsB3M,YAAY,cAAe,CACvFrN,KAAM,kBACNuG,QAAS,EACTuJ,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAE7BkK,EAA0C,KAAsB3M,YAAY,cAAe,CACvFrN,KAAM,sBACNuG,SAAS,IAEbyT,EAA0C,KAAsB3M,YAAY,cAAe,CACvFrN,KAAM,6BAEVowF,EAA+C,KAA2Bt1E,SAASR,iBAAiB,eAAe,SAAUta,GACzH,IAAIuyC,EAAI,IAAIo4E,EAAyB3qH,GAErC,OAAOuyC,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DuI,EAAyCvI,EAAoB,GAC7DsjF,EAA2CtjF,EAAoB,IAC/DurH,EAA4CvrH,EAAoB,IAChE8xE,EAA4C9xE,EAAoB,GAChEirC,EAA+CjrC,EAAoB,GACnEkrC,EAAuClrC,EAAoB,IAC3DwrH,EAAiDxrH,EAAoB,GACrEyrH,EAAmDzrH,EAAoB,IACvE0rH,EAAmD1rH,EAAoB,IACvE8oB,EAA2C9oB,EAAoB,IACzDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOkqH,KACpE3rH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOmqH,KACpE5rH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOoqH,KAYnG,IAAIF,EAAgC,WAChC,SAASA,EAAev8G,EAAM08G,EAAUznG,EAAM9jB,GAC1CX,KAAKksH,SAAWA,EAChBlsH,KAAKwP,KAAOA,EACZxP,KAAKykB,KAAOA,EACZzkB,KAAKuvD,SAAW5uD,EAqCpB,OAnCAK,OAAOC,eAAe8qH,EAAetqH,UAAW,OAAQ,CACpDL,IAAK,WACD,OAAOpB,KAAKwP,KAAK7O,OAErBQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe8qH,EAAetqH,UAAW,OAAQ,CACpDL,IAAK,WACD,OAAOpB,KAAKwP,KAAKhD,MAErBrL,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe8qH,EAAetqH,UAAW,UAAW,CACvDL,IAAK,WACD,OAAOpB,KAAKwP,KAAKsuB,SAErB38B,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe8qH,EAAetqH,UAAW,QAAS,CACrDL,IAAK,WACD,OAAOpB,KAAKuvD,UAEhB9jD,IAAK,SAAUM,GACX/L,KAAKuvD,SAAWxjD,EACZ/L,KAAKykB,MACLzkB,KAAKykB,KAAK0nG,mBAAmBnsH,MACjCA,KAAKi5B,kBAET93B,YAAY,EACZD,cAAc,IAElB6qH,EAAetqH,UAAUw3B,eAAiB,aACnC8yF,EA1CwB,GA6C/BC,EAA8B,WAC9B,SAASA,EAAaI,GAClBpsH,KAAKosH,WAAaA,EAClBpsH,KAAK0yB,OAAS,GA2IlB,OAzIA1xB,OAAOC,eAAe+qH,EAAavqH,UAAW,UAAW,CACrDL,IAAK,WACD,OAA0C,GAAnCJ,OAAOwR,KAAKxS,KAAK0yB,QAAQtwB,QAEpCjB,YAAY,EACZD,cAAc,IAElB8qH,EAAavqH,UAAU4qH,YAAc,SAAUvsF,EAAKwB,EAAQv9B,GAGxD,GAFA+7B,EAAM9/B,KAAKssH,sBAAsBxsF,EAAK9/B,KAAKqzC,MAC3C/R,EAASthC,KAAKssH,sBAAsBhrF,EAAQthC,KAAKkyC,SAC5CpS,GAAQwB,EAEb,GAAIv9B,EACK/D,KAAK0yB,OAAOoN,KACb9/B,KAAK0yB,OAAOoN,GAAO,IAClB9/B,KAAK0yB,OAAOoN,GAAKwB,KAClBthC,KAAK0yB,OAAOoN,GAAKwB,GAAUthC,KAAKusH,gBACpCvsH,KAAK0yB,OAAOoN,GAAKwB,GAAQ90B,KAAOzI,OAGhC,GAAI/D,KAAK0yB,OAAOoN,IAAQ9/B,KAAK0yB,OAAOoN,GAAKwB,GAAS,CAC9C,IAAIr9B,EAAMjE,KAAK0yB,OAAOoN,GAAKwB,GAC3Br9B,EAAIuI,KAAO,GACPvI,EAAI2nB,iBACG5rB,KAAK0yB,OAAOoN,GAAKwB,GACoB,GAAxCtgC,OAAOwR,KAAKxS,KAAK0yB,OAAOoN,IAAM19B,eACvBpC,KAAK0yB,OAAOoN,MAMvCksF,EAAavqH,UAAU+qH,mBAAqB,SAAUlrF,EAAQv9B,GAC1D/D,KAAKqsH,YAAYnjG,EAAyC,KAAoBxB,qBAAsB4Z,EAAQv9B,IAEhHioH,EAAavqH,UAAUgrH,eAAiB,SAAU3sF,EAAKwB,GAGnD,OAFAxB,EAAM9/B,KAAKssH,sBAAsBxsF,EAAK9/B,KAAKqzC,MAC3C/R,EAASthC,KAAKssH,sBAAsBhrF,EAAQthC,KAAKkyC,SAC5CpS,GAAQwB,GAERthC,KAAK0yB,OAAOoN,IAEZ9/B,KAAK0yB,OAAOoN,GAAKwB,GAEfthC,KAAK0yB,OAAOoN,GAAKwB,GALb,MAOf0qF,EAAavqH,UAAUirH,sBAAwB,SAAUprF,EAAQv9B,GAC7D,OAAO/D,KAAKysH,eAAevjG,EAAyC,KAAoBxB,qBAAsB4Z,IAElH0qF,EAAavqH,UAAUkrH,sBAAwB,SAAU7sF,EAAKwB,GAC1D,IAAIK,EAAW3hC,KAAKysH,eAAe3sF,EAAKwB,GACxC,OAAIK,IAAaA,EAAS/V,QACf+V,GACXA,EAAW3hC,KAAKysH,eAAevjG,EAAyC,KAAoBxB,qBAAsB4Z,GAC9GK,IAAaA,EAAS/V,QACf+V,GACU,iBAAVL,IACPA,EACIA,GAAU,GAAKA,EAASthC,KAAKkyC,QAAQ9vC,OAC/BpC,KAAKkyC,QAAQ5Q,GACb,MAEVA,GAAUA,EAAOxD,QACVwD,EAAOxD,QACX,QAEXkuF,EAAavqH,UAAUmrH,YAAc,SAAU9sF,EAAKwB,GAChD,IAAIr9B,EAAMjE,KAAKysH,eAAe3sF,EAAKwB,GACnC,OAAOr9B,EAAMA,EAAI0iC,eAAiB,MAEtCqlF,EAAavqH,UAAUorH,mBAAqB,SAAUvrF,GAClD,IAAIr9B,EAAMjE,KAAKysH,eAAevjG,EAAyC,KAAoBxB,qBAAsB4Z,GACjH,OAAOr9B,EAAMA,EAAI0iC,eAAiB,MAEtCqlF,EAAavqH,UAAUqrH,mBAAqB,SAAUhtF,EAAKwB,GACvD,IAAIr9B,EAAMjE,KAAK2sH,sBAAsB7sF,EAAKwB,GAC1C,OAAOr9B,EAAMA,EAAI0iC,eAAiB,MAEtC3lC,OAAOC,eAAe+qH,EAAavqH,UAAW,OAAQ,CAClDL,IAAK,WACD,OAAOpB,KAAKosH,WAAapsH,KAAKosH,WAAWW,UAAY,IAEzD5rH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+qH,EAAavqH,UAAW,UAAW,CACrDL,IAAK,WACD,OAAOpB,KAAKosH,WAAapsH,KAAKosH,WAAWY,aAAe,IAE5D7rH,YAAY,EACZD,cAAc,IAElB8qH,EAAavqH,UAAU6qH,sBAAwB,SAAUvoH,EAAK2uB,GAC1D,GAAkB,iBAAP3uB,EAAiB,CACxB,GAAIA,EAAM,GAAKA,GAAO2uB,EAAOtwB,OACzB,OAAO,KACX2B,EAAM2uB,EAAO3uB,GAAKpD,MAEtB,OAAIoD,EAAIpD,MACGoD,EAAIpD,MACRoD,GAEXioH,EAAavqH,UAAU4K,QAAU,WAC7B,GAAIrM,KAAK4rB,QACL,OAAO,KACX,IAAIlnB,EAAM,GACV,IAAK,IAAIo7B,KAAO9/B,KAAK0yB,OAAQ,CACzB,IAAIu6F,EAAS,GACTC,EAAYltH,KAAK0yB,OAAOoN,GAC5B,IAAK,IAAIktB,KAAOkgE,EACZD,EAAOjgE,GAAOkgE,EAAUlgE,GAAK3gD,UAEjC3H,EAAIo7B,GAAOmtF,EAEf,OAAOvoH,GAEXsnH,EAAavqH,UAAUkL,QAAU,SAAUhM,GAEvC,GADAX,KAAK0yB,OAAS,GACT/xB,EAEL,IAAK,IAAIm/B,KAAOn/B,EACZ,GAAW,OAAPm/B,EAAJ,CAEA,IAAIotF,EAAYvsH,EAAMm/B,GAEtB,IAAK,IAAIktB,KADThtD,KAAK0yB,OAAOoN,GAAO,GACHotF,EACZ,GAAW,OAAPlgE,EAAJ,CAEA,IAAI/oD,EAAMjE,KAAKusH,eACftoH,EAAI0I,QAAQugH,EAAUlgE,IACtBhtD,KAAK0yB,OAAOoN,GAAKktB,GAAO/oD,KAIpC+nH,EAAavqH,UAAU8qH,aAAe,WAClC,OAAO,IAAIV,EAAiD,KAA6B7rH,KAAKosH,YAAY,IAEvGJ,EA9IsB,GAoJ7BC,EAAqC,SAAUn3G,GAE/C,SAASm3G,EAAoBprH,GACzB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAM+4C,eAAgB,EACtB/4C,EAAMo4G,uBAAyB,IAAItB,EAAiD,KAA6B92G,GACjHA,EAAMq4G,WAAa,IAAIpB,EAAaj3G,GACpC,IAAIuM,EAAOvM,EAYX,OAXAA,EAAMuL,uCAAuC,WAAW,WACpDgB,EAAKwuC,sBAET/6C,EAAMuL,uCAAuC,QAAQ,WAC5CgB,EAAK8qB,eACN9qB,EAAKozB,mBAGb3/B,EAAMuL,uCAAuC,mBAAmB,WAC5DgB,EAAK+rG,iCAEFt4G,EAqVX,OAxWA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF6rH,EAAqBn3G,GAqBrGm3G,EAAoBxqH,UAAUmN,QAAU,WACpC,MAAO,UAEX5N,OAAOC,eAAegrH,EAAoBxqH,UAAW,iBAAkB,CACnEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,mBAAoB,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,oBAAoB,IAErDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,mBAAoB5L,IAE9C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,UAAW,CAI5DL,IAAK,WACD,OAAOpB,KAAKqzC,KAAKjxC,OAAS,GAE9BjB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,YAAa,CAI9DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAEjCb,IAAK,SAAU1H,GACXA,EAAMA,EAAI8I,cACN9I,GAAO/D,KAAKstH,YAEhBttH,KAAK2P,iBAAiB,YAAa5L,GACnC/D,KAAK00C,kBAETvzC,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,kBAAmB,CAIpEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,mBAAmB,IAEpDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,kBAAmB5L,IAE7C5C,YAAY,EACZD,cAAc,IAElB+qH,EAAoBxqH,UAAUsrH,QAAU,WACpC,OAAO/sH,KAAKqzC,MAEhB44E,EAAoBxqH,UAAUurH,WAAa,WACvC,OAAOhtH,KAAKgsD,gBAEhBigE,EAAoBxqH,UAAUk0B,qBAAuB,WAEjD,IADA,IAAIjxB,EAAM,EACDpE,EAAI,EAAGA,EAAIN,KAAKqzC,KAAKjxC,OAAQ9B,IAC7BN,KAAKiM,aAAajM,KAAK01B,cAAc11B,KAAKqzC,KAAK/yC,GAAGK,SACnD+D,IAER,OAAOA,GAEXunH,EAAoBxqH,UAAUm0B,sBAAwB,WAGlD,IAFA,IAAIlxB,EAAM,EACN/D,EAAQX,KAAKW,MACRL,EAAI,EAAGA,EAAIN,KAAKqzC,KAAKjxC,OAAQ9B,IAAK,CACvC,IAAIw/B,EAAM9/B,KAAKqzC,KAAK/yC,GAAGK,OAClBgI,EAAuC,KAAmBsD,aAAatL,EAAMm/B,KAC9En3B,EAAuC,KAAmBmP,iBAAiB9X,KAAK01B,cAAcoK,GAAMn/B,EAAMm/B,KAC1Gp7B,IAER,OAAOA,GAEXunH,EAAoBxqH,UAAUsvD,eAAiB,WAC3C,IAAIxsD,EAAS,IAAIrB,MACba,EAAM/D,KAAKW,MACVoD,IACDA,EAAM,IAEV,IADA,IAAIsvC,EAASrzC,KAAK4sF,aAAe5sF,KAAK4sF,aAAe5sF,KAAKqzC,KACjD/yC,EAAI,EAAGA,EAAI+yC,EAAKjxC,OAAQ9B,IAAK,CAClC,IAAIw/B,EAAMuT,EAAK/yC,GACXN,KAAKiM,aAAa6zB,EAAIn/B,QAE1B4D,EAAOI,KAAK3E,KAAKutH,gBAAgBztF,EAAK9/B,KAAK8pB,GAAK,IAAMgW,EAAIn/B,MAAMwV,WAAWnJ,QAAQ,MAAO,KAAMjJ,EAAI+7B,EAAIn/B,SAM5G,OAJqB,GAAjB4D,EAAOnC,QAAgBpC,KAAK4sF,cAC5BroF,EAAOI,KAAK3E,KAAKutH,gBAAgB,IAAI7pC,EAAyC,KAAqB,MAAO1jF,KAAKa,KAAKmM,QAAQ,MAAO,KAAMjJ,IAE7I/D,KAAKmuD,qBAAuB5pD,EACrBA,GAEX0nH,EAAoBxqH,UAAU+rH,gBAAkB,SAAU/0G,GACtD,IAAIo4B,EAAQ7wC,KAAKstH,UAAUzgH,cAC3B,MAAc,WAAVgkC,EACOloC,EAAuC,KAAmB6P,eAAeC,GAC7EA,GAEXwzG,EAAoBxqH,UAAU2U,mBAAqB,WAC/CtB,EAAOrT,UAAU2U,mBAAmB5V,KAAKR,MACzCA,KAAKqzC,KAAOrzC,KAAKwtH,gBAAgBxtH,KAAKqzC,MACtCrzC,KAAKqtH,+BAETpB,EAAoBxqH,UAAUsrF,iBAAmB,SAAUD,GACvD,OAAO9sF,KAAKwtH,gBAAgB1gC,IAEhC9rF,OAAOC,eAAegrH,EAAoBxqH,UAAW,cAAe,CAKhEL,IAAK,WACD,OAAOpB,KAAK+wD,kBAEhB5vD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,QAAS,CAC1DL,IAAK,WACD,OAAOpB,KAAKotH,YAEhB3hH,IAAK,SAAU9K,GACXX,KAAK0nD,MAAM/6C,QAAQhM,GAASA,EAAM0L,QAAU1L,EAAM0L,UAAY,OAElElL,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAegrH,EAAoBxqH,UAAW,cAAe,CAChEL,IAAK,WACD,OAAQpB,KAAK0nD,MAAM97B,SAEvBzqB,YAAY,EACZD,cAAc,IAElB+qH,EAAoBxqH,UAAU4qH,YAAc,SAAUvsF,EAAKwB,EAAQv9B,GAC/D/D,KAAK0nD,MAAM2kE,YAAYvsF,EAAKwB,EAAQv9B,IAExCkoH,EAAoBxqH,UAAUmrH,YAAc,SAAU9sF,EAAKwB,GACvD,OAAOthC,KAAK0nD,MAAMklE,YAAY9sF,EAAKwB,IAEvC2qF,EAAoBxqH,UAAU+qH,mBAAqB,SAAUlrF,EAAQv9B,GACjE/D,KAAK0nD,MAAM8kE,mBAAmBlrF,EAAQv9B,IAE1CkoH,EAAoBxqH,UAAUorH,mBAAqB,SAAUvrF,GACzD,OAAOthC,KAAK0nD,MAAMmlE,mBAAmBvrF,IAEzC2qF,EAAoBxqH,UAAUqrH,mBAAqB,SAAUhtF,EAAKwB,GAC9D,OAAOthC,KAAK0nD,MAAMolE,mBAAmBhtF,EAAKwB,IAE9C2qF,EAAoBxqH,UAAUkrH,sBAAwB,SAAU7sF,EAAKwB,GACjE,IAAIr9B,EAAMjE,KAAK0nD,MAAMilE,sBAAsB7sF,EAAKwB,GAChD,OAAOr9B,GAAYjE,KAAKmtH,wBAE5BlB,EAAoBxqH,UAAUu4B,2BAA6B,WACvD,OAAOh6B,KAAKytH,sBAEhBxB,EAAoBxqH,UAAUu2B,iBAAmB,SAAU/iB,EAAQuiB,GAC/D1iB,EAAOrT,UAAUu2B,iBAAiBx3B,KAAKR,KAAMiV,EAAQuiB,KAC/CA,GAAoBx3B,KAAKiV,OAAO7S,OAAS,IAC3CpC,KAAK0tH,kBACLz4G,EAAOtQ,KAAK,IAAI2mC,EAAqC,KAAkC,KAAMtrC,QAGrGisH,EAAoBxqH,UAAUisH,eAAiB,WAC3C,QAAK1tH,KAAK2tH,mBAEF3tH,KAAKytH,sBAEjBxB,EAAoBxqH,UAAUgsH,mBAAqB,WAC/C,IAAIp6E,EAAOrzC,KAAKmuD,qBAGhB,GAFK9a,IACDA,EAAOrzC,KAAKorD,cACX/X,EACD,OAAO,EACX,IAAK,IAAI/yC,EAAI,EAAGA,EAAI+yC,EAAKjxC,OAAQ9B,IAAK,CAClC,IAAIyD,EAAMsvC,EAAK/yC,GAAGK,MAClB,IAAKoD,EACD,OAAO,EAEf,OAAO,GAEXkoH,EAAoBxqH,UAAUg1B,cAAgB,WAC1C,OAAO3hB,EAAOrT,UAAUg1B,cAAcj2B,KAAKR,OAASA,KAAKytH,sBAE7DxB,EAAoBxqH,UAAU8rH,gBAAkB,SAAU/9G,EAAM08G,EAAUvrH,GACtE,OAAO,IAAIorH,EAAev8G,EAAM08G,EAAUlsH,KAAMW,IAEpDsrH,EAAoBxqH,UAAUi4B,iBAAmB,SAAU3tB,GAEvD,GADA+I,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,EAAU/L,KAAK8tD,gBACxD9tD,KAAK8tD,eACJ9tD,KAAKmuD,sBAC8B,GAApCnuD,KAAKmuD,qBAAqB/rD,OAF9B,CAIApC,KAAK8tD,eAAgB,EACrB,IAAI/pD,EAAM/D,KAAKW,MAGf,GAFKoD,IACDA,EAAM,IACc,GAApB/D,KAAKqzC,KAAKjxC,OACVpC,KAAKmuD,qBAAqB,GAAGxtD,MAAQoD,OAGrC,IAAK,IAAIzD,EAAI,EAAGA,EAAIN,KAAKmuD,qBAAqB/rD,OAAQ9B,IAAK,CACvD,IAAIw/B,EAAM9/B,KAAKmuD,qBAAqB7tD,GAChCstH,EAAS7pH,EAAI+7B,EAAIj/B,MAAQkD,EAAI+7B,EAAIj/B,MAAQ,KAC7Cb,KAAKmuD,qBAAqB7tD,GAAGK,MAAQitH,EAG7C5tH,KAAKw2B,mBACLx2B,KAAK8tD,eAAgB,IAEzBm+D,EAAoBxqH,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GACtE,IAAI+D,EAAM,GACV,IAAK,IAAI/B,KAAOhC,EAAO,CACnB,IAAIktH,EAASh5F,EACP6uD,EAAyC,KAAqBj+C,qBAAqBzlC,KAAKqzC,KAAM1wC,GAC9FA,EACDkrH,IACDA,EAASlrH,GACb,IAAIoJ,EAAW23E,EAAyC,KAAqBj+C,qBAAqBzlC,KAAKkyC,QAASvxC,EAAMgC,IACjHoJ,IACDA,EAAWpL,EAAMgC,IACrB+B,EAAImpH,GAAU9hH,EAElB,OAAOrH,GAEXunH,EAAoBxqH,UAAUwzB,aAAe,SAAUrvB,GACnD,IAAImP,EAAQ/U,UACI,IAAZ4F,IAAsBA,EAAU,CAChCsvB,cAAc,IAElB,IAAIE,EAAoBtgB,EAAOrT,UAAUwzB,aAAaz0B,KAAKR,KAAM4F,GACjE,GAAMwvB,EAAmB,CACrB,IAAI1C,EAAS1yB,KAAKq0B,kBAClBe,EAAkBE,QAAS,EAC3BF,EAAkB3Q,KAAOzjB,OAAOwR,KAAKkgB,GAAU,IAAIjgB,KAAI,SAAUyI,GAC7D,IAAI4kB,EAAM/qB,EAAMs+B,KAAKN,QAAO,SAAUlwC,GAAK,OAAOA,EAAElC,QAAUua,KAAY,GACtE22C,EAAc,CACdhxD,KAAMqa,EACN6U,MAAS+P,EAAMA,EAAItzB,KAAO,MAC1B7L,MAAO+xB,EAAOxX,GACdma,aAAcquD,EAAyC,KAAqBj+C,qBAAqB1wB,EAAMi3C,eAAgBt5B,EAAOxX,IAC9H7W,UAAW,SAAUN,GACjB,MAAsB,kBAARA,EAAmBgV,KAAKE,UAAUlV,GAAOA,GAE3DuxB,QAAQ,GAER9lB,EAAOk0E,EAAyC,KAAqBl+C,eAAezwB,EAAMi3C,eAAgBt5B,EAAOxX,IAOrH,OANM1L,IACD5J,EAAQ2vB,cAAgB,IAAInW,SAAQ,SAAUoW,GAC3Cq8B,EAAYr8B,EAAYnnB,cACpBmB,EAAKgmB,EAAYnnB,iBAGtBwjD,KAGf,OAAOz8B,GAEX62F,EAAoBxqH,UAAUs1B,6BAA+B,SAAUC,EAASvvB,GAC5E,IAAK,IAAInH,EAAI,EAAGA,EAAIN,KAAKqzC,KAAKjxC,OAAQ9B,IAAK,CACvC,IAAIw/B,EAAM9/B,KAAKqzC,KAAK/yC,GACdw/B,EAAIn/B,OACNq2B,EAAQryB,KAAK,CACT9D,KAAMb,KAAK6qB,eAAiB,IAAMiV,EAAIn/B,MACtC6L,KAAMxM,KAAKi3B,eAAiB,IAAM6I,EAAI6G,eACtCjqB,SAAU1c,SAK1BisH,EAAoBxqH,UAAUy1B,iBAAmB,SAAUC,EAAUhxB,GAGjE,QAFiB,IAAbgxB,IAAuBA,EAAW,WACzB,IAAThxB,IAAmBA,EAAO,OACzBA,EACD,OAAO2O,EAAOrT,UAAUy1B,iBAAiB12B,KAAKR,MAClD,IAAI0c,EAAW,IAAIovG,EAAiD,KAAiC3lH,GACrGuW,EAAS/L,QAAU3Q,KAAKkyC,QACxB,IAAI/+B,GAAO,IAAI++D,EAA0C,MAAwB98D,aAAasH,GAE9F,OADAvJ,EAAK,QAAUuJ,EAAS9N,UACjBuE,GAEX84G,EAAoBxqH,UAAUkzB,sBAAwB,WAClD7f,EAAOrT,UAAUkzB,sBAAsBn0B,KAAKR,MACxCA,KAAK8tH,SACL9tH,KAAK0tF,8BAGbu+B,EAAoBxqH,UAAU6vB,uBAAyB,WACnD,IAAI+hB,EAAOrzC,KAAKmuD,qBAGhB,OAFK9a,IACDA,EAAOrzC,KAAKorD,aACZ/X,EAAKjxC,OAAS,GAAKpC,KAAKgsD,eAAe5pD,OAAS,EACzCpC,KAAK4xB,QAAU,IAAMyhB,EAAK,GAAGxyC,KAA7Bb,KAEJ8U,EAAOrT,UAAU6vB,uBAAuB9wB,KAAKR,OAExDisH,EAAoBxqH,UAAUizC,cAAgB,WAC1C10C,KAAKqtH,8BACLv4G,EAAOrT,UAAUizC,cAAcl0C,KAAKR,OAExCisH,EAAoBxqH,UAAU4rH,4BAA8B,WACpDrtH,KAAK+tH,kBACL/tH,KAAK0N,QACD1N,KAAKqzC,KAAKjxC,OAAS,KACbpC,KAAK4sF,cAAgB5sF,KAAK4sF,aAAaxqF,OAAS,KAIlE6pH,EAAoBxqH,UAAU0qH,mBAAqB,SAAUrsF,GACzD,IAAI9/B,KAAK8tD,cAAT,CAGA,GADA9tD,KAAK8tD,eAAgB,EAChB9tD,KAAK8tH,QAGL,CACD,IAAI/hH,EAAW/L,KAAKW,MACfoL,IACDA,EAAW,IAEfA,EAAS+zB,EAAIj/B,MAAQi/B,EAAIn/B,MACzBX,KAAKk0B,YAAYnoB,QARjB/L,KAAKk0B,YAAY4L,EAAIn/B,OAUzBX,KAAK8tD,eAAgB,IAElBm+D,EAzW6B,CA0WtCN,EAA0C,MAE5Cz5C,EAA0C,KAAsB3jE,SAAS,SAAU,CAC/E,CACI1N,KAAM,sBACN+I,UAAW,WACP,OAAOyhC,EAA6C,KAA8BhnC,UAAU,mBAGpG,CACIxD,KAAM,mBACN+I,UAAW,WACP,OAAOyhC,EAA6C,KAA8BhnC,UAAU,gBAGpG,CAAExD,KAAM,cAAe+J,sBAAuB,SAC9C,CACI/J,KAAM,YACNuG,QAAS,UACTuJ,QAAS,CAAC,UAAW,WAEzB,2BACA,4BACD,WACC,OAAO,IAAIs7G,EAAoB,MAChC,cACHL,EAA+C,KAA2BjwG,SAASR,iBAAiB,UAAU,SAAUta,GACpH,IAAIuyC,EAAI,IAAI64E,EAAoBprH,GAGhC,OAFAuyC,EAAEC,KAAOu4E,EAA+C,KAA2BoC,YACnF56E,EAAElB,QAAU05E,EAA+C,KAA2Bl9D,cAC/Etb,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D6tH,EAA6D7tH,EAAoB,IACjFsoB,EAA4CtoB,EAAoB,GAChE+qC,EAA2C/qC,EAAoB,IAC/DsxF,EAAiDtxF,EAAoB,GAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOqsH,KACpE9tH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOssH,KAMnG,IAAID,EAAwC,SAAUp5G,GAElD,SAASo5G,EAAuBrtH,EAAM2O,EAAMiV,EAAM9jB,GAC9C,IAAIoU,EAAQD,EAAOtU,KAAKR,KAAMykB,EAAM9jB,IAAUX,KAI9C,OAHA+U,EAAMlU,KAAOA,EACbkU,EAAMvF,KAAOA,EACbuF,EAAMw0C,WAAW5oD,GACVoU,EAuBX,OA7BA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF8tH,EAAwBp5G,GAQxG9T,OAAOC,eAAeitH,EAAuBzsH,UAAW,UAAW,CAC/DL,IAAK,WACD,OAAOpB,KAAKa,MAEhBM,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeitH,EAAuBzsH,UAAW,OAAQ,CAC5DL,IAAK,WACD,OAAOpB,KAAKwP,KAAKhD,MAErBrL,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeitH,EAAuBzsH,UAAW,UAAW,CAC/DL,IAAK,WACD,OAAOpB,KAAKwP,KAAKsuB,SAErB38B,YAAY,EACZD,cAAc,IAEXgtH,EA9BgC,CA+BzCD,EAA2D,MAKzDE,EAA6C,SAAUr5G,GAEvD,SAASq5G,EAA4BttH,GACjC,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAM8L,wBAAwB,YAAa9L,GAAO,GAClD,IAAIuM,EAAOvM,EAMX,OALAA,EAAMuL,uCAAuC,QAAQ,WACjDgB,EAAK6sC,qBAAuB,KAC5B7sC,EAAK+sC,qBACL/sC,EAAK8qB,iBAEFr3B,EA2IX,OAtJA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF+tH,EAA6Br5G,GAa7Gq5G,EAA4B1sH,UAAUmN,QAAU,WAC5C,MAAO,kBAEX5N,OAAOC,eAAektH,EAA4B1sH,UAAW,YAAa,CAItEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,YAAa,KAEtD3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,YAAavL,IAE/C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAektH,EAA4B1sH,UAAW,eAAgB,CACzEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,cAErChO,YAAY,EACZD,cAAc,IAElBitH,EAA4B1sH,UAAU4qD,cAAgB,WAClD,OAAOrsD,KAAKouH,cAEhBptH,OAAOC,eAAektH,EAA4B1sH,UAAW,gBAAiB,CAI1EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAiB,KAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBitH,EAA4B1sH,UAAUmsD,iBAAmB,WACrD,OAAO5tD,KAAKquH,eAEhBF,EAA4B1sH,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GAC9E,IAAI+xB,EAAS1yB,KAAKq0B,kBAClB,IAAK3B,EACD,OAAOA,EAGX,IAFA,IAAI2gB,EAAOrzC,KAAKorD,YACZ1mD,EAAM,GACDpE,EAAI,EAAGA,EAAI+yC,EAAKjxC,OAAQ9B,IAAK,CAClC,IAAIivD,EAAWvvD,KAAKqzC,KAAK/yC,GAAGK,MACxBoD,EAAM2uB,EAAO68B,GACjB,GAAKxrD,EAAL,CAEA,GAAI8wB,EAAY,CACZ,IAAIy5F,EAAkBnjF,EAAyC,KAAqB1F,qBAAqBzlC,KAAKqzC,KAAMkc,GAC9G++D,IACF/+D,EAAW++D,GAGnB5pH,EAAI6qD,GAAYvvD,KAAK4xD,mBAAmBve,EAAK/yC,GAAIyD,IAErD,OAAO2uB,GAEXy7F,EAA4B1sH,UAAUs1B,6BAA+B,SAAUC,EAASvvB,GAEpF,IADA,IAAI8mH,IAAe9mH,GAAUzH,KAAKkyC,QAAQxmC,QAAQjE,IAAY,EACrDnH,EAAI,EAAGA,EAAIN,KAAKqzC,KAAKjxC,OAAQ9B,IAAK,CACvC,IAAIw/B,EAAM9/B,KAAKqzC,KAAK/yC,GACpB,GAAKw/B,EAAIn/B,MAIT,IAFA,IAAI6tH,EAAaxuH,KAAK6qB,eAAiB,IAAMiV,EAAIn/B,MAAQ,IACrD8tH,EAAczuH,KAAKi3B,eAAiB,IAAM6I,EAAI6G,eAAiB,IAC1DtjC,EAAI,EAAGA,EAAIrD,KAAKkyC,QAAQ9vC,OAAQiB,IAAK,CAC1C,IAAIi+B,EAASthC,KAAKkyC,QAAQ7uC,GAC1B2zB,EAAQryB,KAAK,CACT9D,KAAM2tH,EAAaltF,EAAOzgC,KAC1B2L,KAAMiiH,EAAcntF,EAAOotF,UAC3BhyG,SAAU1c,QAItB,GAAIuuH,EACA,IAASjuH,EAAI,EAAGA,EAAIN,KAAKkyC,QAAQ9vC,OAAQ9B,IAAK,CACtCghC,EAASthC,KAAKkyC,QAAQ5xC,GACtBghC,GAAU75B,GAEduvB,EAAQryB,KAAK,CACT9D,KAAM,OAASygC,EAAOzgC,KACtB2L,KAAM,OAAS80B,EAAOotF,UACtBhyG,SAAU1c,SAK1BmuH,EAA4B1sH,UAAUy4B,qBAAuB,WACzD,IAAIn2B,EAAM/D,KAAKW,MACf,GAAKoD,EAAL,CAEA,IAAIkhD,EAAS,KACTwoC,GAAY,EACZp6C,EAASrzC,KAAK4sF,aAAe5sF,KAAK4sF,aAAe5sF,KAAKqzC,KAC1D,IAAK,IAAI1wC,KAAOoB,EACRonC,EAAyC,KAAqB3F,eAAe6N,EAAM1wC,IACrE,MAAVsiD,IACAA,EAAS,IACbA,EAAOtiD,GAAOoB,EAAIpB,IAGlB8qF,GAAY,EAGhBA,IACAztF,KAAKW,MAAQskD,GAEjBnwC,EAAOrT,UAAUy4B,qBAAqB15B,KAAKR,QAE/CmuH,EAA4B1sH,UAAUkzB,sBAAwB,WAC1D7f,EAAOrT,UAAUkzB,sBAAsBn0B,KAAKR,MAC5CA,KAAK0tF,8BAETygC,EAA4B1sH,UAAUuvD,aAAe,WACjD,IAAIzsD,EAAS,IAAIrB,MACbmwC,EAASrzC,KAAK4sF,aAAe5sF,KAAK4sF,aAAe5sF,KAAKqzC,KAC1D,IAAKA,GAAwB,IAAhBA,EAAKjxC,OACd,OAAOmC,EACX,IAAIR,EAAM/D,KAAKW,MACVoD,IACDA,EAAM,IACV,IAAK,IAAIzD,EAAI,EAAGA,EAAI+yC,EAAKjxC,OAAQ9B,IACxB+yC,EAAK/yC,GAAGK,OAEb4D,EAAOI,KAAK3E,KAAKutH,gBAAgBl6E,EAAK/yC,GAAIyD,EAAIsvC,EAAK/yC,GAAGK,SAE1D,OAAO4D,GAEX4pH,EAA4B1sH,UAAU8rH,gBAAkB,SAAU/9G,EAAM7O,GACpE,OAAO,IAAIutH,EAAuB1+G,EAAK7O,MAAO6O,EAAMxP,KAAMW,IAEvDwtH,EAvJqC,CAwJ9CF,EAA2D,MAE7DvlG,EAA0C,KAAsBna,SAAS,iBAAkB,CACvF,CACI1N,KAAM,oBAEV,0BACA,gBACA,CAAEA,KAAM,YAAa+J,sBAAuB,kBAC7C,WACC,OAAO,IAAIujH,EAA4B,MACxC,sBACHz8B,EAA+C,KAA2B/1E,SAASR,iBAAiB,kBAAkB,SAAUta,GAC5H,IAAIuyC,EAAI,IAAI+6E,EAA4BttH,GAIxC,OAHAuyC,EAAEziC,QAAU,CAAC,EAAG,EAAG,EAAG,EAAG,GACzByiC,EAAEC,KAAOq+C,EAA+C,KAA2BhjC,cACnFu/D,EAA2D,KAA2Cz/D,kBAAkBpb,GACjHA,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D6tH,EAA6D7tH,EAAoB,IACjFsoB,EAA4CtoB,EAAoB,GAChEqnH,EAAiDrnH,EAAoB,GACrEwoB,EAA+CxoB,EAAoB,GACnEyoB,EAAuCzoB,EAAoB,IAC3D+xE,EAAyC/xE,EAAoB,GAC7DuuH,EAA0CvuH,EAAoB,IAC9DwuH,EAA6CxuH,EAAoB,IAC3DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgtH,KACpEzuH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOitH,KAUnG,IAAID,EAAuC,SAAU/5G,GAEjD,SAAS+5G,EAAsBh9G,EAAO4S,EAAM9jB,GACxC,IAAIoU,EAAQD,EAAOtU,KAAKR,KAAMykB,EAAM9jB,IAAUX,KAG9C,OAFA+U,EAAMlD,MAAQA,EACdkD,EAAMw0C,WAAW5oD,GACVoU,EASX,OAdA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFyuH,EAAuB/5G,GAOvG9T,OAAOC,eAAe4tH,EAAsBptH,UAAW,UAAW,CAC9DL,IAAK,WACD,OAAOpB,KAAK8pB,IAEhB3oB,YAAY,EACZD,cAAc,IAEX2tH,EAf+B,CAgBxCZ,EAA2D,MAMzDa,EAA4C,SAAUh6G,GAEtD,SAASg6G,EAA2BjuH,GAChC,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAUvC,OATA+U,EAAMlU,KAAOA,EACbkU,EAAMg6G,WAAa,EACnBh6G,EAAMi6G,cAAgB,EACtBj6G,EAAMk6G,gBAAkB,EACxBl6G,EAAMm6G,0BAA2B,EACjCn6G,EAAM8L,wBAAwB,oBAAqB9L,GACnDA,EAAM8L,wBAAwB,sBAAuB9L,GACrDA,EAAM8L,wBAAwB,aAAc9L,GAC5CA,EAAM8L,wBAAwB,gBAAiB9L,GACxCA,EA4pBX,OAxqBA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF0uH,EAA4Bh6G,GAc5Gg6G,EAA2BrtH,UAAUmN,QAAU,WAC3C,MAAO,iBAEX5N,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CACzEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CAKzEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,iBAAiB,IAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,UAAW,CAKnEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,UAAW,KAE5Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,kBAAmB,CAM3EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,oBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,kBAAmB5L,IAE7C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,0BAA2B,CAOnFL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,2BAA2B,IAE5Db,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,0BAA2B5L,IAErD5C,YAAY,EACZD,cAAc,IAElB4tH,EAA2BrtH,UAAUu0B,oBAAsB,WACvD,OAAQlhB,EAAOrT,UAAUu0B,oBAAoBx1B,KAAKR,OAASA,KAAKiM,aAAajM,KAAKmvH,kBAEtFL,EAA2BrtH,UAAUw0B,gBAAkB,WACnD,IAAIj2B,KAAKiM,aAAajM,KAAKmvH,kBACtBnvH,KAAKiM,aAAajM,KAAKkM,eAI5B,GAAKlM,KAAK4rB,WAA8B,GAAjB5rB,KAAKovH,SAA5B,CAGA,IADA,IAAIrjH,EAAW,GACNzL,EAAI,EAAGA,EAAIN,KAAKovH,SAAU9uH,IAC/ByL,EAASpH,KAAK3E,KAAKmvH,iBAEvBnvH,KAAKW,MAAQoL,QATT+I,EAAOrT,UAAUw0B,gBAAgBz1B,KAAKR,OAW9CgB,OAAOC,eAAe6tH,EAA2BrtH,UAAW,WAAY,CAMpEL,IAAK,WACD,OAAOpB,KAAKgvH,eAEhBvjH,IAAK,SAAU1H,GACX,KAAIA,EAAM,GAAKA,EAAM4qH,EAAwC,KAAoB9mG,uBAAjF,CAEA7nB,KAAKkvH,0BAA2B,EAChC,IAAInlE,EAAY/pD,KAAKgvH,cAErB,GADAhvH,KAAKgvH,cAAgBjrH,EACjB/D,KAAKW,OAASX,KAAKW,MAAMyB,OAAS2B,EAAK,CACvC,IAAImlD,EAAOlpD,KAAKW,MAChBuoD,EAAK56C,OAAOvK,GACZ/D,KAAKW,MAAQuoD,EAEjB,GAAIlpD,KAAKge,kBACLhe,KAAKivH,gBAAkBlrH,MAD3B,CAIA,GAAI/D,KAAKmuD,qBAAsB,CAC3BnuD,KAAKmuD,qBAAqB7/C,OAAOvK,GACjC,IAAK,IAAIzD,EAAIypD,EAAWzpD,EAAIyD,EAAKzD,IAAK,CAClC,IAAI+uH,EAASrvH,KAAKutH,gBAAgB,MAClCvtH,KAAKmuD,qBAAqBxpD,KAAK0qH,GAC/BrvH,KAAKsvD,mBAAmB+/D,IAGhCrvH,KAAK00C,mBAETvzC,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,cAAe,CAOvEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAAe,IAEhDb,IAAK,SAAU1H,GACPA,EAAM,IACNA,EAAM,GACV/D,KAAK2P,iBAAiB,cAAe5L,GACjCA,EAAM/D,KAAKsvH,cACXtvH,KAAKsvH,YAAcvrH,GACnB/D,KAAKovH,SAAWrrH,IAChB/D,KAAKovH,SAAWrrH,IAExB5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,cAAe,CAOvEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAAeqiH,EAAwC,KAAoB9mG,wBAE5Gpc,IAAK,SAAU1H,GACPA,GAAO,IAEPA,EAAM4qH,EAAwC,KAAoB9mG,wBAClE9jB,EAAM4qH,EAAwC,KAAoB9mG,uBAClE9jB,GAAO/D,KAAKsvH,cAEhBtvH,KAAK2P,iBAAiB,cAAe5L,GACjCA,EAAM/D,KAAKu+B,cACXv+B,KAAKu+B,YAAcx6B,GACnB/D,KAAKovH,SAAWrrH,IAChB/D,KAAKovH,SAAWrrH,MAExB5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,eAAgB,CAMxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAgB,IAEjDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,eAAgB5L,IAE1C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,kBAAmB,CAM3EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,mBAAmB,IAEpDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,kBAAmB5L,GACpC/D,KAAKge,mBACNhe,KAAKquD,sBAGbltD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,YAAa,CAQrEL,IAAK,WACD,OAAQpB,KAAKuvH,eAAiBvvH,KAAKwlB,YAAcxlB,KAAKovH,SAAWpvH,KAAKsvH,aAE1EnuH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CAOzEL,IAAK,WACD,OAAQpB,KAAKwvH,kBACRxvH,KAAKwlB,YACNxlB,KAAKovH,SAAWpvH,KAAKu+B,aAE7Bp9B,YAAY,EACZD,cAAc,IAElB4tH,EAA2BrtH,UAAUmrD,aAAe,SAAU9sB,GAC1D,OAAK9/B,KAAKqlB,QAEHrlB,KAAKqlB,OAAO0jD,qBAAqB/oE,KAAM8/B,EAAIjuB,MAAOiuB,IAK7DgvF,EAA2BrtH,UAAUs9E,OAAS,WAC1C,IAAIn5E,EAAU,CAAE8W,SAAU1c,KAAMyvH,UAAWzvH,KAAKyvH,WAC1CzvH,KAAKqlB,QACPrlB,KAAKqlB,OAAOsjD,qBAAqB/iE,GAEhCA,EAAQ6pH,YAEbzvH,KAAK8uD,2BACL9uD,KAAK0vH,aACL1vH,KAAK+uD,mBAET+/D,EAA2BrtH,UAAUwrF,eAAiB,WAClD,OAAO,GAEX6hC,EAA2BrtH,UAAUiuH,WAAa,WAC9C,IAAIC,EAAe3vH,KAAKovH,SACxBpvH,KAAKovH,SAAWpvH,KAAKovH,SAAW,EAChC,IAAIljH,EAAelM,KAAK4vH,oBAAmB,GACvC7jH,EAAW,KAQf,GAPK/L,KAAKiM,aAAaC,KACnBH,EAAW/L,KAAKkxD,iBACZnlD,EAAS3J,QAAUpC,KAAKovH,WACxBrjH,EAASA,EAAS3J,OAAS,GAAK8J,EAChClM,KAAKW,MAAQoL,IAGjB/L,KAAKykB,KAAM,CACXzkB,KAAKmwD,kBAAkBnwD,KAAK+rB,wBAAyB/rB,KAAKgsB,6BAC1D,IAAI8T,EAAM9/B,KAAKorD,YAAYprD,KAAKovH,SAAW,GACtCj9C,EAAuC,KAAmBlmE,aAAa6zB,EAAIn/B,SACvEoL,IACDA,EAAW/L,KAAKkxD,kBAEfihB,EAAuC,KAAmBr6D,iBAAiB/L,EAASA,EAAS3J,OAAS,GAAI09B,EAAIn/B,SAC/GoL,EAASA,EAAS3J,OAAS,GAAK09B,EAAIn/B,MACpCX,KAAKW,MAAQoL,IAIrB/L,KAAKqlB,QACDsqG,EAAe,GAAK3vH,KAAKovH,WACzBpvH,KAAKqlB,OAAOujD,eAAe5oE,KAAMA,KAAKorD,YAAYprD,KAAKorD,YAAYhpD,OAAS,IAC5EpC,KAAK00C,kBAIjBo6E,EAA2BrtH,UAAUmuH,mBAAqB,SAAUC,GAEhE,IADA,IAAInrH,EAAM,KACDpE,EAAI,EAAGA,EAAIN,KAAKkyC,QAAQ9vC,OAAQ9B,IAAK,CAC1C,IAAI8yC,EAAIpzC,KAAKkyC,QAAQ5xC,GAAGqkD,iBAClBvR,IAAMpzC,KAAKiM,aAAamnC,EAAEjd,qBAC5BzxB,EAAMA,GAAO,GACbA,EAAI1E,KAAKkyC,QAAQ5xC,GAAGO,MAAQuyC,EAAEjd,mBAGtC,IAAKn2B,KAAKiM,aAAajM,KAAKmvH,iBACxB,IAAK,IAAIxsH,KAAO3C,KAAKmvH,gBACjBzqH,EAAMA,GAAO,GACbA,EAAI/B,GAAO3C,KAAKmvH,gBAAgBxsH,GAGxC,GAAIktH,GAAc7vH,KAAK8vH,wBAAyB,CAC5C,IAAI/rH,EAAM/D,KAAKW,MACf,GAAMoD,GAAOb,MAAMoC,QAAQvB,IAAQA,EAAI3B,QAAUpC,KAAKovH,SAAW,EAAG,CAChE,IAAI7/D,EAAWxrD,EAAI/D,KAAKovH,SAAW,GACnC,IAAK,IAAIzsH,KAAO4sD,EACZ7qD,EAAMA,GAAO,GACbA,EAAI/B,GAAO4sD,EAAS5sD,IAIhC,OAAO+B,GAQXoqH,EAA2BrtH,UAAUi9E,YAAc,SAAU/9E,GACzD,GAAMA,GAAWA,EAAMua,QAAS,CAC5B,IAAIrJ,EAAQ7R,KAAKorD,YAAY1/C,QAAQ/K,GACrC,GAAIkR,EAAQ,EACR,OACJlR,EAAQkR,EAEP7R,KAAK+vH,4BAA4BpvH,KAClCP,EAAoBE,EAAEsuH,EAA2C,KAAjExuH,CAA2FJ,KAAKgwH,oBAChGhwH,KAAKgrF,UAAUrqF,IAGvBmuH,EAA2BrtH,UAAUsuH,4BAA8B,SAAUl+G,GACzE,IAAK7R,KAAK8qF,cACN,OAAO,EACX,GAAIj5E,EAAQ,GAAKA,GAAS7R,KAAKovH,SAC3B,OAAO,EACX,IAAIzuH,EAAQX,KAAKkxD,iBACjB,QAAIihB,EAAuC,KAAmBlmE,aAAatL,KAAWuC,MAAMoC,QAAQ3E,QAEhGkR,GAASlR,EAAMyB,UAEX+vE,EAAuC,KAAmBlmE,aAAatL,EAAMkR,MAMzFi9G,EAA2BrtH,UAAUupF,UAAY,SAAUn5E,GAClD7R,KAAKirD,gBAENp5C,EAAQ,GAAKA,GAAS7R,KAAKovH,WAE/BpvH,KAAK8uD,2BACL9uD,KAAKiwH,cAAcp+G,GACnB7R,KAAKivD,iBAAiBp9C,MAE1Bi9G,EAA2BrtH,UAAUwuH,cAAgB,SAAUp+G,GAC3D,GAAI7R,KAAKqlB,OAAQ,CACb,IAAIya,EAAM9/B,KAAKmuD,qBACTnuD,KAAKmuD,qBAAqBt8C,GAC1B,KACN7R,KAAKqlB,OAAOyjD,iBAAiB9oE,KAAM6R,EAAOiuB,GAM9C,GAJI9/B,KAAKmuD,sBAAwBt8C,EAAQ7R,KAAKmuD,qBAAqB/rD,QAC/DpC,KAAKmuD,qBAAqB7/C,OAAOuD,EAAO,GAE5C7R,KAAKgvH,gBACDhvH,KAAKW,MAAO,CACZ,IAAIoD,EAAM,GAENA,EADAb,MAAMoC,QAAQtF,KAAKW,QAAUkR,EAAQ7R,KAAKW,MAAMyB,OAC1CpC,KAAKq0B,kBAGLr0B,KAAKkxD,iBAEfntD,EAAIuK,OAAOuD,EAAO,GAClB9N,EAAM/D,KAAKwyD,eAAezuD,EAAK,MAC/B/D,KAAK8tD,eAAgB,EACrB9tD,KAAKW,MAAQoD,EACb/D,KAAK8tD,eAAgB,EAEzB9tD,KAAK00C,iBAET1zC,OAAOC,eAAe6tH,EAA2BrtH,UAAW,oBAAqB,CAI7EL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,oBAAqBwZ,EAA6C,KAA8BvkB,UAAU,mBAEnJoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,oBAAqBvL,IAEvD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,uBAAwB,CAChFL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,sBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,sBAAuB,CAK/EL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,sBAAuBwZ,EAA6C,KAA8BvkB,UAAU,yBAErJoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,sBAAuBvL,IAEzD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,yBAA0B,CAClFL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,wBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,aAAc,CAItEL,IAAK,WACD,IAAI8uH,EAAiBlwH,KAAK4qD,yBAA2B,SAAW,YAChE,OAAO5qD,KAAKoP,yBAAyB,aAAcwZ,EAA6C,KAA8BvkB,UAAU6rH,KAE5IzkH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,aAAcvL,IAEhD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CACzEL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,eAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,iBAAkB,CAM1EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,mBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,iBAAkB5L,IAE5C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CACzEL,IAAK,WACD,QAAKpB,KAAKyvH,YAEkB,YAAxBzvH,KAAKmwH,eACwB,aAAtBnwH,KAAK6uD,aACe,WAAxB7uD,KAAKmwH,iBAEhBhvH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,mBAAoB,CAC5EL,IAAK,WACD,QAAKpB,KAAKyvH,YAEkB,YAAxBzvH,KAAKmwH,eACwB,eAAtBnwH,KAAK6uD,aACe,QAAxB7uD,KAAKmwH,iBAEhBhvH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,gBAAiB,CAIzEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAAiBwZ,EAA6C,KAA8BvkB,UAAU,eAE/IoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,gBAAiBvL,IAEnD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6tH,EAA2BrtH,UAAW,mBAAoB,CAC5EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,kBAErChO,YAAY,EACZD,cAAc,IAElB4tH,EAA2BrtH,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GAC7E,IAAI+xB,EAAS1yB,KAAKq0B,kBAClB,IAAK3B,IAAWxvB,MAAMoC,QAAQotB,GAC1B,OAAOA,EAEX,IADA,IAAI2gB,EAAOrzC,KAAKorD,YACP9qD,EAAI,EAAGA,EAAI+yC,EAAKjxC,QAAU9B,EAAIoyB,EAAOtwB,OAAQ9B,IAAK,CACvD,IAAIyD,EAAM2uB,EAAOpyB,GACZyD,IAEL2uB,EAAOpyB,GAAKN,KAAK4xD,mBAAmBve,EAAK/yC,GAAIyD,IAEjD,OAAO2uB,GAEXo8F,EAA2BrtH,UAAUs1B,6BAA+B,SAAUC,EAASvvB,GAEnF,IADA,IAAI8mH,IAAe9mH,GAAUzH,KAAKkyC,QAAQxmC,QAAQjE,IAAY,EACrDnH,EAAI,EAAGA,EAAIN,KAAKkyC,QAAQ9vC,OAAQ9B,IAAK,CAC1C,IAAIghC,EAASthC,KAAKkyC,QAAQ5xC,GAC1B02B,EAAQryB,KAAK,CACT9D,KAAMb,KAAK6qB,eAAiB,OAASyW,EAAOzgC,KAC5C2L,KAAMxM,KAAKi3B,eAAiB,OAASqK,EAAOotF,UAC5ChyG,SAAU1c,OAEVuuH,GAAcjtF,GAAU75B,GACxBuvB,EAAQryB,KAAK,CACT9D,KAAM,OAASygC,EAAOzgC,KACtB2L,KAAM,OAAS80B,EAAOotF,UACtBhyG,SAAU1c,SAK1B8uH,EAA2BrtH,UAAUu4B,2BAA6B,WAC9D,OAAO,GAEXh5B,OAAOC,eAAe6tH,EAA2BrtH,UAAW,aAAc,CACtEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElB4tH,EAA2BrtH,UAAUu2B,iBAAmB,SAAU/iB,EAAQuiB,GACtE1iB,EAAOrT,UAAUu2B,iBAAiBx3B,KAAKR,KAAMiV,EAAQuiB,IAChDA,GAAoBx3B,KAAK0tH,kBAC1Bz4G,EAAOtQ,KAAK,IAAIkkB,EAAqC,KAA4B7oB,KAAKu+B,YAAav+B,QAG3G8uH,EAA2BrtH,UAAU21B,UAAY,SAAU7F,EAAc8F,QAChD,IAAjB9F,IAA2BA,GAAe,QAClC,IAAR8F,IAAkBA,EAAM,MAC5B,IAAI0yB,EAAYj1C,EAAOrT,UAAU21B,UAAU52B,KAAKR,KAAMuxB,EAAc8F,GAChE+4F,EAAepwH,KAAKqwH,oBACxB,OAAOD,GAAgBrmE,GAE3B+kE,EAA2BrtH,UAAUisH,eAAiB,WAClD,GAAI1tH,KAAKu+B,aAAe,IAAMv+B,KAAKmuD,qBAC/B,OAAO,EAGX,IAFA,IACImiE,EAAc,EACTpoE,EAAW,EAAGA,EAAWloD,KAAKmuD,qBAAqB/rD,OAAQ8lD,IAAY,CAC5E,IAAIpoB,EAAM9/B,KAAKmuD,qBAAqBjG,GAC/BpoB,EAAIlU,SACL0kG,IAER,OAAOA,EAActwH,KAAKu+B,aAE9BuwF,EAA2BrtH,UAAU4uH,kBAAoB,WACrD,IAAKrwH,KAAKmoC,UAAYnoC,KAAKmuD,qBACvB,OAAO,EACX,IAAI7sB,EAASthC,KAAK+vD,gBAAgB/vD,KAAKmoC,SACvC,IAAK7G,EACD,OAAO,EAGX,IAFA,IAAIivF,EAAY,GACZ7rH,GAAM,EACDpE,EAAI,EAAGA,EAAIN,KAAKmuD,qBAAqB/rD,OAAQ9B,IAClDoE,EACI1E,KAAKwwH,uBAAuBxwH,KAAKmuD,qBAAqB7tD,GAAIghC,EAAQivF,IAAc7rH,EAExF,OAAOA,GAEXoqH,EAA2BrtH,UAAU+uH,uBAAyB,SAAU1wF,EAAKwB,EAAQivF,GACjF,IAAI7zG,EAAWojB,EAAIipB,oBAAoBznB,GACvC,IAAK5kB,GAAYA,EAASkP,UACtB,OAAO,EAEX,IADA,IAAIjrB,EAAQ+b,EAAS/b,MACZL,EAAI,EAAGA,EAAIiwH,EAAUnuH,OAAQ9B,IAClC,GAAIK,GAAS4vH,EAAUjwH,GAEnB,OADAoc,EAASib,SAAS,IAAI9O,EAAqC,KAA+B7oB,KAAK+qF,oBAAqB/qF,QAC7G,EAIf,OADAuwH,EAAU5rH,KAAKhE,IACR,GAEXmuH,EAA2BrtH,UAAUuvD,aAAe,WAChD,IAAIzsD,EAAS,IAAIrB,MACjB,GAAsB,IAAlBlD,KAAKovH,SACL,OAAO7qH,EAEX,IADA,IAAIR,EAAM/D,KAAKkxD,iBACN5wD,EAAI,EAAGA,EAAIN,KAAKovH,SAAU9uH,IAC/BiE,EAAOI,KAAK3E,KAAKutH,gBAAgBvtH,KAAKywH,mBAAmB1sH,EAAKzD,KAKlE,OAHKN,KAAKiM,aAAajM,KAAK4vH,oBAAmB,MAC3C5vH,KAAKW,MAAQoD,GAEVQ,GAEXuqH,EAA2BrtH,UAAU8rH,gBAAkB,SAAU5sH,GAC7D,OAAO,IAAIkuH,EAAsB7uH,KAAK+uH,aAAc/uH,KAAMW,IAE9DmuH,EAA2BrtH,UAAUqwD,qBAAuB,SAAU/tD,GAClE,GAAKA,GAAQb,MAAMoC,QAAQvB,GAA3B,CAEA,IAAI2sH,EAAc3sH,EAAI3B,OAClBsuH,GAAe1wH,KAAKovH,YAEnBpvH,KAAKkvH,0BAA4BwB,EAAc1wH,KAAKivH,kBAEzDjvH,KAAKkvH,0BAA2B,EAChClvH,KAAKgvH,cAAgB0B,EACjB1wH,KAAKmuD,uBACLnuD,KAAKmuD,qBAAuB,KAC5BnuD,KAAKmuD,qBAAuBnuD,KAAKorD,YACjCprD,KAAK00C,qBAGbo6E,EAA2BrtH,UAAUyvD,eAAiB,WAClD,IAAI3sD,EAASvE,KAAKq0B,kBACb9vB,GAAWrB,MAAMoC,QAAQf,KAC1BA,EAAS,IACTA,EAAOnC,OAASpC,KAAKovH,UACrB7qH,EAAO+J,OAAOtO,KAAKovH,UACvB,IAAI7/D,EAAWvvD,KAAK4vH,oBAAmB,GACvCrgE,EAAWA,GAAY,GACvB,IAAK,IAAIjvD,EAAIiE,EAAOnC,OAAQ9B,EAAIN,KAAKovH,SAAU9uH,IAC3CiE,EAAOI,KAAKwtE,EAAuC,KAAmBr5D,eAAey2C,IAEzF,OAAOhrD,GAEXuqH,EAA2BrtH,UAAU+wD,eAAiB,SAAUzmD,EAAU+zB,GAEtE,IADA,IAAIlU,GAAU,EACLtrB,EAAI,EAAGA,EAAIyL,EAAS3J,OAAQ9B,IACjC,GAAIN,KAAKyyD,SAAS1mD,EAASzL,KAAOU,OAAOwR,KAAKzG,EAASzL,IAAI8B,OAAS,EAAG,CACnEwpB,GAAU,EACV,MAGR,OAAOA,EAAU,KAAO7f,GAE5B+iH,EAA2BrtH,UAAUgvH,mBAAqB,SAAUh3F,EAAe5nB,GAC/E,OAAOA,GAAS,GAAKA,EAAQ4nB,EAAcr3B,OACrCq3B,EAAc5nB,GACd,MAEVi9G,EAA2BrtH,UAAU+vD,gBAAkB,SAAU1xB,EAAKrG,EAAeh3B,GAEjF,QADe,IAAXA,IAAqBA,GAAS,IAC7BzC,KAAKmuD,qBACN,MAAO,GACX,IAAIzpD,EAAM1E,KAAKywH,mBAAmBh3F,EAAez5B,KAAKmuD,qBAAqBziD,QAAQo0B,IAGnF,OAFKp7B,GAAOjC,IACRiC,EAAM,IACHA,GAEJoqH,EAzqBoC,CA0qB7Cb,EAA2D,MAE7DvlG,EAA0C,KAAsBna,SAAS,gBAAiB,CACtF,CAAE1N,KAAM,0BAA2B6M,SAAS,GAC5C,CAAE7M,KAAM,uBAAwBuG,SAAS,GACzC,CAAEvG,KAAM,0BAA2BuG,SAAS,GAC5C,CAAEvG,KAAM,kBAAmBuG,QAAS,EAAGoJ,SAAU,GACjD,CAAE3P,KAAM,qBAAsBuG,QAAS,EAAGoJ,SAAU,GACpD,CACI3P,KAAM,qBACNuG,QAASunH,EAAwC,KAAoB9mG,uBAEzE,CAAEhnB,KAAM,WACR,CACIA,KAAM,sBACN+J,sBAAuB,0BAE3B,2BACA,kCACA,CAAE/J,KAAM,yBACR,CACIA,KAAM,oBACNgQ,UAAW,gBACXtF,UAAW,SAAUa,GACjB,OAAQA,GAAOA,EAAI0+E,eAEvBlgF,sBAAuB,wBAE3B,CACI/J,KAAM,iBACNuG,QAAS,UACTuJ,QAAS,CAAC,UAAW,MAAO,SAAU,cAE1C,CAAE9P,KAAM,aAAc+J,sBAAuB,iBAC7C,CAAE/J,KAAM,gBAAiB+J,sBAAuB,sBACjD,WACC,OAAO,IAAIkkH,EAA2B,MACvC,sBACHrH,EAA+C,KAA2B9rG,SAASR,iBAAiB,iBAAiB,SAAUta,GAC3H,IAAIuyC,EAAI,IAAI07E,EAA2BjuH,GAGvC,OAFAuyC,EAAEziC,QAAU,CAAC,EAAG,EAAG,EAAG,EAAG,GACzBs9G,EAA2D,KAA2Cz/D,kBAAkBpb,GACjHA,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1D2xE,EAAsC3xE,EAAoB,GAC1D8qC,EAA0C9qC,EAAoB,IAC9DuwH,EAA+CvwH,EAAoB,IACnE8xE,EAA4C9xE,EAAoB,GAChEwwH,EAAiDxwH,EAAoB,GACrE+xE,EAAyC/xE,EAAoB,GACvDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgvH,KACpEzwH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOivH,KAQnG,IAAID,EAAuC,SAAU/7G,GAEjD,SAAS+7G,EAAsBhwH,EAAMkvB,QACpB,IAATlvB,IAAmBA,EAAO,WAChB,IAAVkvB,IAAoBA,EAAQ,MAChC,IAAIhb,EAAQD,EAAOtU,KAAKR,OAASA,KASjC,OARA+U,EAAMg8G,YAAch8G,EAAMi8G,aAAanwH,GACvCkU,EAAMk8G,OAAOC,8BAAgC,WACzC,MAAO,IAEXn8G,EAAMk8G,OAAO1kG,cAAgB,OACzBwD,IACAhb,EAAMgb,MAAQA,GAEXhb,EAgRX,OA7RA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFywH,EAAuB/7G,GAevG+7G,EAAsBpvH,UAAUmN,QAAU,WACtC,MAAO,oBAEX5N,OAAOC,eAAe4vH,EAAsBpvH,UAAW,KAAM,CACzDL,IAAK,WACD,OAAOpB,KAAKixH,OAAOnnG,IAEvB3oB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,OAAQ,CAI3DL,IAAK,WACD,OAAOpB,KAAKixH,OAAOpwH,MAEvB4K,IAAK,SAAU1H,GACX/D,KAAKixH,OAAOpwH,KAAOkD,GAEvB5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,WAAY,CAC/DL,IAAK,WACD,OAAOpB,KAAKykB,MAEhBtjB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,SAAU,CAC7DL,IAAK,WACD,OAAOpB,KAAK+wH,aAEhB5vH,YAAY,EACZD,cAAc,IAElB2vH,EAAsBpvH,UAAUuvH,aAAe,SAAUnwH,GACrD,OAAO,IAAI8vH,EAA6C,KAA6B9vH,IAEzFgwH,EAAsBpvH,UAAUwf,eAAiB,SAAUrd,GACvDkR,EAAOrT,UAAUwf,eAAezgB,KAAKR,KAAM4D,GAC3C5D,KAAKixH,OAAOhwG,eAAerd,IAE/BitH,EAAsBpvH,UAAU2c,eAAiB,WAC7CtJ,EAAOrT,UAAU2c,eAAe5d,KAAKR,MACrCA,KAAKixH,OAAO7yG,kBAEhByyG,EAAsBpvH,UAAU2jC,QAAU,SAAU3gB,GAChDzkB,KAAKykB,KAAOA,EACNA,IACFzkB,KAAKixH,OAAO/kH,aAAeuY,EAAK0sG,oBAAoBnxH,KAAKa,MACzDb,KAAKixH,OAAOrsG,cAAc5kB,MAC1BA,KAAKixH,OAAOrpH,OAAS6c,IAG7BzjB,OAAOC,eAAe4vH,EAAsBpvH,UAAW,aAAc,CAIjEL,IAAK,WACD,OAAOpB,KAAKixH,OAAOxnH,YAEvBgC,IAAK,SAAU1H,GACX/D,KAAKixH,OAAOxnH,WAAa1F,GAE7B5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,YAAa,CAIhEL,IAAK,WACD,OAAOpB,KAAKixH,OAAO3+B,WAEvB7mF,IAAK,SAAU1H,GACX/D,KAAKixH,OAAO3+B,UAAYvuF,GAE5B5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,QAAS,CAK5DL,IAAK,WACD,OAAOpB,KAAKixH,OAAOlhG,OAEvBtkB,IAAK,SAAU1H,GACX/D,KAAKixH,OAAOlhG,MAAQhsB,GAExB5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,WAAY,CAC/DL,IAAK,WACD,OAAOpB,KAAKixH,OAAOljG,UAEvB5sB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,YAAa,CAIhEL,IAAK,WACD,OAAOpB,KAAKixH,OAAOvC,WAEvBvtH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,YAAa,CAMhEL,IAAK,WACD,OAAOpB,KAAKixH,OAAO9lH,WAEvBM,IAAK,SAAU1H,GACX/D,KAAKixH,OAAO9lH,UAAYpH,GAE5B5C,YAAY,EACZD,cAAc,IAElB2vH,EAAsBpvH,UAAU6X,aAAe,WAC3C,IAAI+L,EAASrlB,KAAKilB,YAClB,OAAOktD,EAAuC,KAAmB74D,aAAatZ,KAAKmL,UAAWka,EAASA,EAAOmtE,eAAiB,IAEnIxxF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,cAAe,CAIlEL,IAAK,WACD,OAAOpB,KAAKixH,OAAOG,aAEvB3lH,IAAK,SAAU1H,GACX/D,KAAKixH,OAAOG,YAAcrtH,GAE9B5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,iBAAkB,CACrEL,IAAK,WACD,OAAOpB,KAAKixH,OAAOI,gBAEvBlwH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,oBAAqB,CAIxEL,IAAK,WACD,OAAOpB,KAAKixH,OAAO14F,mBAEvB9sB,IAAK,SAAU1H,GACX/D,KAAKixH,OAAO14F,kBAAoBx0B,GAEpC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,uBAAwB,CAC3EL,IAAK,WACD,OAAOpB,KAAKixH,OAAO/rE,sBAEvB/jD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe4vH,EAAsBpvH,UAAW,aAAc,CAIjEL,IAAK,WACD,OAAOpB,KAAKixH,OAAOt6F,YAEvBlrB,IAAK,SAAU1H,GACX/D,KAAKixH,OAAOt6F,WAAa5yB,GAE7B5C,YAAY,EACZD,cAAc,IAElB2vH,EAAsBpvH,UAAUi1B,cAAgB,WAC5C,OAAO12B,KAAK22B,YAEhB31B,OAAOC,eAAe4vH,EAAsBpvH,UAAW,QAAS,CAI5DL,IAAK,WACD,OAAOpB,KAAKykB,KAAOzkB,KAAKykB,KAAK6sG,qBAAqBtxH,KAAKa,MAAQ,MAEnE4K,IAAK,SAAU9K,GACM,MAAbX,KAAKykB,MACLzkB,KAAKykB,KAAK8sG,qBAAqBvxH,KAAKa,KAAMF,IAGlDQ,YAAY,EACZD,cAAc,IAElB2vH,EAAsBpvH,UAAUmqB,QAAU,WACtC,OAAOumD,EAAuC,KAAmBlmE,aAAajM,KAAKW,QAEvFkwH,EAAsBpvH,UAAUw3B,eAAiB,SAAUltB,GACnD/L,KAAK65B,sBACL75B,KAAK65B,qBAAqB9tB,IAGlC8kH,EAAsBpvH,UAAUsjB,aAAe,WAC3C,OAAO/kB,MAEX6wH,EAAsBpvH,UAAUwjB,UAAY,WACxC,OAAOjlB,KAAKykB,KAAOzkB,KAAKykB,KAAKQ,YAAc,MAE/C4rG,EAAsBpvH,UAAU0jB,iBAAmB,WAC/C,OAAOnlB,KAAKykB,KAAOzkB,KAAKykB,KAAKU,mBAAqB,MAGtD0rG,EAAsBpvH,UAAU0K,SAAW,SAAUtL,GACjD,OAAKb,KAAKykB,KAEHzkB,KAAKykB,KAAK6sG,qBAAqBzwH,GAD3B,MAGfgwH,EAAsBpvH,UAAUgL,SAAW,SAAU5L,EAAMF,GACnDX,KAAKykB,MACLzkB,KAAKykB,KAAK8sG,qBAAqB1wH,EAAMF,IAG7CkwH,EAAsBpvH,UAAUmnD,YAAc,SAAU/nD,KAGxDgwH,EAAsBpvH,UAAUonD,YAAc,SAAUhoD,EAAMkL,KAC9D8kH,EAAsBpvH,UAAUsyB,WAAa,SAAUlzB,GACnD,OAAO,MAEXgwH,EAAsBpvH,UAAUm4B,WAAa,SAAU/4B,EAAMkL,KAC7D8kH,EAAsBpvH,UAAUm5B,aAAe,WAC3C,OAAI56B,KAAKykB,KACEzkB,KAAKykB,KAAKmW,eACd56B,KAAKW,OAEhBkwH,EAAsBpvH,UAAUyqB,kBAAoB,WAChD,OAAOlsB,KAAK46B,gBAEhBi2F,EAAsBpvH,UAAU0qB,sBAAwB,WACpD,MAAO,CAAE9G,OAAQrlB,KAAKilB,cAG1B4rG,EAAsBpvH,UAAUk5B,kBAAoB,WAChD,OAAO36B,KAAK+vB,OAEhB/uB,OAAOC,eAAe4vH,EAAsBpvH,UAAW,iBAAkB,CACrEL,IAAK,WACD,OAAOpB,KAAKW,OAEhB8K,IAAK,SAAU1H,GACX/D,KAAKW,MAAQoD,GAEjB5C,YAAY,EACZD,cAAc,IAElB2vH,EAAsBpvH,UAAUsqB,sBAAwB,WACpD,OAAO/rB,KAAKksB,qBAEhB2kG,EAAsBpvH,UAAUuqB,0BAA4B,WACxD,OAAOhsB,KAAKmsB,yBAET0kG,EA9R+B,CA+RxC9+C,EAAoC,MAKlC++C,EAA2C,SAAUh8G,GAErD,SAASg8G,EAA0BjwH,GAC/B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAMy8G,6BAA8B,EACpC,IAAIlwG,EAAOvM,EAUX,OATAA,EAAMxF,eAAe,SAAS,SAAUC,GACpCA,EAAK41B,QAAQ9jB,MAEjBvM,EAAMuL,uCAAuC,SAAS,WAClDgB,EAAKiQ,aAAajQ,EAAK8wB,4BAE3Br9B,EAAMuL,uCAAuC,YAAY,WACrDgB,EAAKiQ,aAAajQ,EAAK8wB,4BAEpBr9B,EAkTX,OAjUA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF0wH,EAA2Bh8G,GAiB3Gg8G,EAA0BrvH,UAAUmN,QAAU,WAC1C,MAAO,gBAEXkiH,EAA0BrvH,UAAUmjB,cAAgB,SAAUjkB,GAC1DmU,EAAOrT,UAAUmjB,cAAcpkB,KAAKR,KAAMW,GAC1C,IAAK,IAAIL,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnCN,KAAKmhB,MAAM7gB,GAAG8kC,QAAQplC,OAG9BgB,OAAOC,eAAe6vH,EAA0BrvH,UAAW,mBAAoB,CAC3EL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6vH,EAA0BrvH,UAAW,iBAAkB,CACzEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElB4vH,EAA0BrvH,UAAUwkB,aAAe,WAC/CjmB,KAAKyxH,sBACL38G,EAAOrT,UAAUwkB,aAAazlB,KAAKR,MACnCA,KAAKuxB,aAAavxB,KAAKoyC,0BAE3B0+E,EAA0BrvH,UAAUi4B,iBAAmB,SAAU3tB,GAC7D+I,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,GAAU,GACvD,IAAK,IAAIzL,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAIkP,EAAOxP,KAAKmhB,MAAM7gB,GAClBkP,EAAKyhH,QACLzhH,EAAKyhH,OAAOr9F,sBAAsBpkB,EAAK7O,OAE/CX,KAAKw2B,oBAETs6F,EAA0BrvH,UAAUkyB,qBAAuB,SAAU5nB,GACjE+I,EAAOrT,UAAUkyB,qBAAqBnzB,KAAKR,KAAM+L,GACjD,IAAK,IAAIzL,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAIkP,EAAOxP,KAAKmhB,MAAM7gB,GAClBkP,EAAKyhH,QACLzhH,EAAKyhH,OAAOt9F,qBAAqBnkB,EAAK7O,SAGlDmwH,EAA0BrvH,UAAUgwH,oBAAsB,WACtD,IAAK,IAAInxH,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAIkP,EAAOxP,KAAKmhB,MAAM7gB,GAClBkP,EAAKyhH,QACLzhH,EAAKyhH,OAAOhrG,iBAIxBjlB,OAAOC,eAAe6vH,EAA0BrvH,UAAW,QAAS,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,UAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,QAAS5L,IAEnC5C,YAAY,EACZD,cAAc,IAOlB4vH,EAA0BrvH,UAAUiwH,QAAU,SAAU7wH,EAAMkvB,QAC5C,IAAVA,IAAoBA,EAAQ,MAChC,IAAIvgB,EAAOxP,KAAK2xH,eAAe9wH,EAAMkvB,GAErC,OADA/vB,KAAKmhB,MAAMxc,KAAK6K,GACTA,GAEXshH,EAA0BrvH,UAAUmwH,cAAgB,SAAU/wH,GAC1D,IAAK,IAAIP,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnC,GAAIN,KAAKmhB,MAAM7gB,GAAGO,MAAQA,EACtB,OAAOb,KAAKmhB,MAAM7gB,GAE1B,OAAO,MAEXwwH,EAA0BrvH,UAAUs1B,6BAA+B,SAAUC,EAASvvB,GAClF,IAAK,IAAInH,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAIkP,EAAOxP,KAAKmhB,MAAM7gB,GACtB02B,EAAQryB,KAAK,CACT9D,KAAMb,KAAK6qB,eAAiB,IAAMrb,EAAK3O,KACvC2L,KAAMxM,KAAKi3B,eAAiB,IAAMznB,EAAKk/G,UACvChyG,SAAU1c,SAItB8wH,EAA0BrvH,UAAUy1B,iBAAmB,SAAUC,EAAUhxB,GAGvE,QAFiB,IAAbgxB,IAAuBA,EAAW,WACzB,IAAThxB,IAAmBA,EAAO,OACzBA,EACD,OAAO2O,EAAOrT,UAAUy1B,iBAAiB12B,KAAKR,MAClD,IAAIwP,EAAOxP,KAAK4xH,cAAczrH,GAC9B,IAAKqJ,EACD,OAAO,KACX,IAAI2D,GAAO,IAAI++D,EAA0C,MAAwB98D,aAAa5F,GAE9F,OADA2D,EAAK,QAAU,OACRA,GAEX29G,EAA0BrvH,UAAU2c,eAAiB,WACjDtJ,EAAOrT,UAAU2c,eAAe5d,KAAKR,MACrC,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnCN,KAAKmhB,MAAM7gB,GAAG8d,kBAGtB0yG,EAA0BrvH,UAAUu4B,2BAA6B,WAC7D,IAAK,IAAI15B,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnC,GAAIN,KAAKmhB,MAAM7gB,GAAGsrB,UACd,OAAO,EAEf,OAAO,GAEX5qB,OAAOC,eAAe6vH,EAA0BrvH,UAAW,WAAY,CAInEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACPA,EAAM,GAAKA,EAAM,GAErB/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe6vH,EAA0BrvH,UAAW,WAAY,CAInEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAKlB4vH,EAA0BrvH,UAAUsrH,QAAU,WAK1C,IAJA,IAAIp7E,EAAW3xC,KAAK2xC,SAChBxwB,EAAQnhB,KAAKmhB,MACbkyB,EAAO,GACPxhC,EAAQ,EACHvR,EAAI,EAAGA,EAAI6gB,EAAM/e,OAAQ9B,IACjB,GAATuR,GACAwhC,EAAK1uC,KAAK,IAEd0uC,EAAKA,EAAKjxC,OAAS,GAAGuC,KAAKwc,EAAM7gB,IACjCuR,IACIA,GAAS8/B,IACT9/B,EAAQ,GAGhB,OAAOwhC,GAEXy9E,EAA0BrvH,UAAUw3B,eAAiB,WACjDnkB,EAAOrT,UAAUw3B,eAAez4B,KAAKR,MACrCA,KAAK6xH,sBAETf,EAA0BrvH,UAAUkwH,eAAiB,SAAU9wH,EAAMkvB,GACjE,OAAO,IAAI8gG,EAAsBhwH,EAAMkvB,IAE3C+gG,EAA0BrvH,UAAUowH,mBAAqB,WACrD,IAAI7xH,KAAKwxH,4BAET,IAAK,IAAIlxH,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAIuiC,EAAY,KACZ7iC,KAAKW,OAASX,KAAKmhB,MAAM7gB,GAAGO,QAAQb,KAAKW,QACzCkiC,EAAY7iC,KAAKW,MAAMX,KAAKmhB,MAAM7gB,GAAGO,OAEzCb,KAAKmhB,MAAM7gB,GAAG24B,eAAe4J,KAGrCiuF,EAA0BrvH,UAAU+2B,uBAAyB,WACzD,GAAI1jB,EAAOrT,UAAU+2B,uBAAuBh4B,KAAKR,MAC7C,OAAO,EACX,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnC,GAAIN,KAAKmhB,MAAM7gB,GAAG2wH,OAAOn4F,oBACrB,OAAO,EAEf,OAAO,GAEXg4F,EAA0BrvH,UAAU21B,UAAY,SAAU7F,EAAc8F,GACpE,IAAItiB,EAAQ/U,UACS,IAAjBuxB,IAA2BA,GAAe,QAClC,IAAR8F,IAAkBA,EAAM,MAE5B,IADA,IAAI3yB,GAAM,EACDpE,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnCN,KAAKmhB,MAAM7gB,GAAG2wH,OAAOp4F,2BAA6B,SAAUzB,GACxDriB,EAAM6jB,mCAEJvB,IACuB,IAAzBA,EAAIG,kBACJx3B,KAAKmhB,MAAM7gB,GAAG2wH,OAAOrlG,YAEzBlnB,EAAM1E,KAAKmhB,MAAM7gB,GAAG2wH,OAAO75F,UAAU7F,EAAc8F,IAAQ3yB,GAE/D,OAAOoQ,EAAOrT,UAAU21B,UAAU52B,KAAKR,KAAMuxB,IAAiB7sB,GAElEosH,EAA0BrvH,UAAU4rB,aAAe,WAE/C,IADA,IAAI9oB,EAASuQ,EAAOrT,UAAU4rB,aAAa7sB,KAAKR,MACvCM,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAI2U,EAASjV,KAAKmhB,MAAM7gB,GAAG2wH,OAAO5jG,eAC9BpY,GAAUA,EAAO7S,OAAS,IAC1BmC,EAASA,EAAOkE,OAAOwM,IAG/B,OAAO1Q,GAEXusH,EAA0BrvH,UAAU24B,YAAc,WAC9CtlB,EAAOrT,UAAU24B,YAAY55B,KAAKR,MAClC,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IACnCN,KAAKmhB,MAAM7gB,GAAG2wH,OAAO72F,eAG7B02F,EAA0BrvH,UAAUokB,kBAAoB,WACpD,IAAInhB,EAAMoQ,EAAOrT,UAAUokB,kBAAkBrlB,KAAKR,MAClD,GAAI0E,EACA,OAAOA,EAEX,IADA,IAAIyc,EAAQnhB,KAAKmhB,MACR7gB,EAAI,EAAGA,EAAI6gB,EAAM/e,OAAQ9B,IAC9B,GAAI6gB,EAAM7gB,GAAG2wH,OAAOjhG,eAChB,OAAO,EAEf,OAAO,GAEX8gG,EAA0BrvH,UAAUg1B,cAAgB,WAChD,IAAK3hB,EAAOrT,UAAUg1B,cAAcj2B,KAAKR,MACrC,OAAO,EACX,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmhB,MAAM/e,OAAQ9B,IAAK,CACxC,IAAI2wH,EAASjxH,KAAKmhB,MAAM7gB,GAAG2wH,OAC3B,GAAIA,EAAOzjH,YAAcyjH,EAAO/gG,WAC5B,OAAO,EAEf,OAAO,GAGX4gG,EAA0BrvH,UAAU6vH,qBAAuB,SAAUzwH,GACjE,OAAKb,KAAKW,MAEHX,KAAKW,MAAME,GADP,MAGfiwH,EAA0BrvH,UAAU8vH,qBAAuB,SAAU1wH,EAAMF,GACvEX,KAAKwxH,6BAA8B,EACnC,IAAIzlH,EAAW/L,KAAKW,MACfoL,IACDA,EAAW,IAEfA,EAASlL,GAAQF,EACjBX,KAAKk0B,YAAYnoB,GACjB/L,KAAKwxH,6BAA8B,GAEvCV,EAA0BrvH,UAAU0vH,oBAAsB,SAAUtwH,GAChE,OAASb,KAAKkM,aAAelM,KAAKkM,aAAarL,GAAQ,MAE3DiwH,EAA0BrvH,UAAUwjB,UAAY,WAC5C,OAAOjlB,KAAKqlB,QAEhByrG,EAA0BrvH,UAAU0jB,iBAAmB,WACnD,OAAOnlB,KAAKwmB,eAEhBsqG,EAA0BrvH,UAAUm5B,aAAe,WAC/C,OAAO56B,KAAKykB,KAAOzkB,KAAKykB,KAAKmW,eAAiB,MAElDk2F,EAA0BrvH,UAAUqwH,kBAAoB,WACpD,OAAO9xH,KAAKqlB,OAASrlB,KAAKqlB,OAAOqS,aAAe,IAGpDo5F,EAA0BrvH,UAAUslB,WAAa,SAAUgT,EAASloB,KACpEi/G,EAA0BrvH,UAAUqlB,cAAgB,SAAUiT,GAC1D,OAAO,GAEX+2F,EAA0BrvH,UAAUorB,yBAA2B,WAC3D,MAAO,QAEXikG,EAA0BrvH,UAAU6xB,sBAAwB,WACxD,OAAOtzB,KAAKqzB,iBAEhBy9F,EAA0BrvH,UAAU4pB,sBAAwB,WACxD,MAAO,OAEXylG,EAA0BrvH,UAAU+oB,oBAAsB,SAAU3G,KACpE7iB,OAAOC,eAAe6vH,EAA0BrvH,UAAW,WAAY,CACnEL,IAAK,WACD,MAAO,IAEXD,YAAY,EACZD,cAAc,IAElB4vH,EAA0BrvH,UAAUiK,QAAU,SAAUmY,GACpD,OAAQ,GAELitG,EAlUmC,CAmU5C5lF,EAAwC,MAE1CgnC,EAA0C,KAAsB3jE,SAAS,mBAAoB,CACzF,OACA,qBACA,CAAE1N,KAAM,cAAe+J,sBAAuB,kBAC9C,CACI/J,KAAM,YACNuG,QAAS,OACTuJ,QAAS,CACL,QACA,OACA,WACA,iBACA,QACA,QACA,SACA,WACA,QACA,MACA,OACA,OACA,MACA,SAGR,CAAE9P,KAAM,QAAS+J,sBAAuB,YACxC,CAAE/J,KAAM,mBAAoBuG,SAAU,GACtC,CACIvG,KAAM,yBACN+J,sBAAuB,wBAE3B,CACI/J,KAAM,wBACN6J,cAAe,kBACfD,cAAe,eAEpB,WACC,OAAO,IAAIomH,EAAsB,OAErC3+C,EAA0C,KAAsB3jE,SAAS,eAAgB,CACrF,CAAE1N,KAAM,mBAAoB0J,UAAW,oBACvC,CAAE1J,KAAM,kBAAmBuG,QAAS,GAAIoJ,SAAU,GAClD,CAAE3P,KAAM,kBAAmBuG,QAAS,EAAGuJ,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,MAC9D,WACC,OAAO,IAAImgH,EAA0B,MACtC,YACHF,EAA+C,KAA2Bj1G,SAASR,iBAAiB,gBAAgB,SAAUta,GAC1H,IAAIuyC,EAAI,IAAI09E,EAA0BjwH,GAGtC,OAFAuyC,EAAEs+E,QAAQ,SACVt+E,EAAEs+E,QAAQ,SACHt+E,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DuI,EAAyCvI,EAAoB,GAC7D2xH,EAA+C3xH,EAAoB,GACnE4xH,EAAkD5xH,EAAoB,IACtE6xH,EAAuD7xH,EAAoB,IAC3E8xH,EAA0C9xH,EAAoB,IAC9D+xH,EAAuC/xH,EAAoB,IAC3DgyH,EAA4ChyH,EAAoB,GAChEgjD,EAAiDhjD,EAAoB,GACrEiyH,EAAuCjyH,EAAoB,IAC3D8oB,EAA2C9oB,EAAoB,IAC/DkyH,EAA8ClyH,EAAoB,IAC5DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO0wH,KAEpEnyH,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO2wH,KAanG,IAAID,EAA0C,WAC1C,SAASA,EAAyB9tG,EAAMwb,GACpCjgC,KAAKykB,KAAOA,EACZzkB,KAAKyyH,WAAaxyF,EAClB,IAAI3e,EAAOthB,KACXA,KAAK2nD,iBAAmB,IAAIqqE,EAAgD,KAC5EhyH,KAAK2nD,iBAAiB7L,UAAY,SAAUhqB,GACxCxQ,EAAKuQ,sBAAsBC,IAE/B9xB,KAAK4kB,gBAgHT,OA9GA5jB,OAAOC,eAAesxH,EAAyB9wH,UAAW,QAAS,CAC/DL,IAAK,WACD,OAAOpB,KAAKyyH,YAEhBtxH,YAAY,EACZD,cAAc,IAElBqxH,EAAyB9wH,UAAUmjB,cAAgB,WAC/C5kB,KAAKigC,MAAMrb,cAAc5kB,OAE7BuyH,EAAyB9wH,UAAU0K,SAAW,SAAUtL,GACpD,IAAI6xB,EAAS1yB,KAAK46B,eAClB,OAAOlI,EAAO7xB,IAElB0xH,EAAyB9wH,UAAUgL,SAAW,SAAU5L,EAAMkL,GAC1D/L,KAAKykB,KAAKiuG,iBAAiB1yH,KAAMa,EAAMkL,IAE3CwmH,EAAyB9wH,UAAUmnD,YAAc,SAAU/nD,KAG3D0xH,EAAyB9wH,UAAUonD,YAAc,SAAUhoD,EAAMkL,KACjEwmH,EAAyB9wH,UAAUsyB,WAAa,SAAUlzB,GACtD,IAAI0D,EAASvE,KAAKmM,SAAStL,EAAOqoB,EAAyC,KAAoBrL,eAC/F,OAAOtZ,GAAkB,IAE7BguH,EAAyB9wH,UAAUm4B,WAAa,SAAU/4B,EAAMkL,EAAU+8C,GACtE9oD,KAAKyM,SAAS5L,EAAOqoB,EAAyC,KAAoBrL,cAAe9R,IAErGwmH,EAAyB9wH,UAAUm5B,aAAe,WAC9C,OAAO56B,KAAKykB,KAAKkuG,iBAAiB3yH,OAEtCuyH,EAAyB9wH,UAAUyqB,kBAAoB,WACnD,IAAIwG,EAAS,GACTkgG,EAAiB5yH,KAAKykB,MAAUzkB,KAAKykB,KAAKouG,cACxC7yH,KAAKykB,KAAKouG,cAAc3mG,oBACxB,GACN,IAAK,IAAIvpB,KAAOiwH,EACZlgG,EAAO/vB,GAAOiwH,EAAajwH,GAG/B,OADA+vB,EAAO6/F,EAAyBO,kBAAoB9yH,KAAK46B,eAClDlI,GAEX6/F,EAAyB9wH,UAAU0qB,sBAAwB,WACvD,OAAMnsB,KAAKykB,MAAUzkB,KAAKykB,KAAKouG,cACpB7yH,KAAKykB,KAAKouG,cAAc1mG,wBAC5B,CAAE9G,OAAQrlB,KAAKilB,cAE1BstG,EAAyB9wH,UAAUsjB,aAAe,WAC9C,OAAO/kB,MAEXuyH,EAAyB9wH,UAAUwjB,UAAY,WAC3C,OAAOjlB,KAAKykB,KAAOzkB,KAAKykB,KAAKQ,YAAc,MAE/CstG,EAAyB9wH,UAAU0jB,iBAAmB,WAClD,OAAOnlB,MAGXuyH,EAAyB9wH,UAAUowB,sBAAwB,SAAUC,GACjE,GAAKA,EAAL,CAEA,IAAI8mB,EAAe54C,KAAKykB,KAAOzkB,KAAKykB,KAAKsuG,aAAa/yH,OAAS,EAC/D,GAAI8xB,EAAUjxB,MAAQ0xH,EAAyBtqE,kBAG3C,OAFAn2B,EAAUC,UAAW,OACrBD,EAAUnxB,MAAQi4C,EAAa,GAGnC,IAAI8Q,GAAY,IAAIuoE,EAAqD,MAA0B3qF,aAAaxV,EAAUjxB,MAG1H,GAFAixB,EAAUC,SAAW23B,GAAa6oE,EAAyBO,iBAC3DhhG,EAAU4pB,WAAa5pB,EAAUC,SAC5BD,EAAU4pB,WAAf,CAGA5pB,EAAUjxB,KAAOixB,EAAUjxB,KAAKmM,QAAQulH,EAAyBO,iBAAmB,IAAK,IACrFppE,GAAY,IAAIuoE,EAAqD,MAA0B3qF,aAAaxV,EAAUjxB,MAA1H,IACI6b,EAAW1c,KAAKigC,MAAMmV,uBAAuBsU,IAC5ChtC,GAAYk8B,GAAc,IAC3Bl8B,EAAW1c,KAAKykB,KAAKuuG,2BAA2BtpE,EAAW9Q,IAE/D,IAAIlmB,EAAS,GACb,GAAIhW,EACAgW,EAAOg3B,GAAa53B,EAAU2pB,mBACxB/+B,EAAS2Y,aACT3Y,EAAS/b,UAEd,CACD,IAAIonD,EAAY/nD,KAAK46B,eACjBmtB,IACAr1B,EAAOg3B,GAAa3B,EAAU2B,IAGtC53B,EAAUnxB,OAAQ,IAAIsxH,EAAqD,MAA0B9lH,SAAS2lB,EAAUjxB,KAAM6xB,MAElI6/F,EAAyB9wH,UAAUglB,YAAc,SAAUja,EAAMivC,GAC7DjvC,EAAOxM,KAAK2nD,iBAAiBhM,QAAQnvC,EAAMivC,GAC3C,IAAIp2B,EAASrlB,KAAKilB,YAClB,OAAOI,EAASA,EAAOoB,YAAYja,EAAMivC,GAAsBjvC,GAEnE+lH,EAAyB9wH,UAAUkoD,cAAgB,SAAUn9C,EAAMivC,GAC/DjvC,EAAOxM,KAAKymB,YAAYja,EAAMivC,GAC9B,IAAImO,EAAwB5pD,KAAK2nD,iBAAiBiC,sBAC9CllD,EAAM,CAAEklD,uBAAuB,EAAMp9C,KAAMA,GAM/C,OALIxM,KAAKilB,cACLvgB,EAAM1E,KAAKilB,YAAY0kC,cAAcn9C,EAAMivC,GAAoB,IAEnE/2C,EAAIklD,sBACAllD,EAAIklD,uBAAyBA,EAC1BllD,GAEX6tH,EAAyBO,iBAAmB,QAC5CP,EAAyBtqE,kBAAoB,aACtCsqE,EAzHkC,GA4HzCU,EAAwD,WACxD,SAASA,EAAuCxuG,GAC5CzkB,KAAKykB,KAAOA,EAWhB,OATAwuG,EAAuCxxH,UAAUsjB,aAAe,WAC5D,OAAO,MAEXkuG,EAAuCxxH,UAAUwjB,UAAY,WACzD,OAAOjlB,KAAKykB,KAAKQ,aAErBguG,EAAuCxxH,UAAU0jB,iBAAmB,WAChE,OAAO,MAEJ8tG,EAbgD,GAoBvDT,EAA2C,SAAU19G,GAErD,SAAS09G,EAA0B3xH,GAC/B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAMm+G,kBAAoB,EAC1Bn+G,EAAMo+G,mBAAqB,EAC3Bp+G,EAAMq+G,mBAAoB,EAC1Br+G,EAAMxF,eAAe,UACrBwF,EAAMs+G,cAAgBt+G,EAAMu+G,+BAC5Bv+G,EAAMqpD,SAASxqB,YAAc,OAC7B7+B,EAAMqpD,SAASm1D,wBAA0Bx+G,EACzC,IAAIuM,EAAOvM,EAiBX,OAhBAA,EAAMqpD,SAAS9mB,mBAAqB,SAAUvd,GAC1CzY,EAAKkyG,6BAA6Bz5F,GAClCzY,EAAKmyG,iBAET1+G,EAAMqpD,SAASzmB,sBAAwB,SAAU5d,GAC7CzY,EAAKmyG,iBAET1+G,EAAM8L,wBAAwB,oBAAqB9L,GACnDA,EAAM8L,wBAAwB,sBAAuB9L,GACrDA,EAAM8L,wBAAwB,eAAgB9L,GAC9CA,EAAM8L,wBAAwB,kBAAmB9L,GACjDA,EAAM8L,wBAAwB,gBAAiB9L,GAC/CA,EAAM8L,wBAAwB,gBAAiB9L,GAC/CA,EAAMuL,uCAAuC,eAAe,WACxDgB,EAAKoyG,oBAEF3+G,EA+8CX,OA3+CA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFoyH,EAA2B19G,GA8B3G9T,OAAOC,eAAeuxH,EAA0B/wH,UAAW,iBAAkB,CACzEL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUmjB,cAAgB,SAAUjkB,GAC1DmU,EAAOrT,UAAUmjB,cAAcpkB,KAAKR,KAAMW,GAC1CX,KAAK2zH,6BACL3zH,KAAK4zH,uBAETpB,EAA0B/wH,UAAUoyH,kCAAoC,WAEpE,IADA,IAAIxvG,EAAWrkB,KAAKo+D,SAAS/5C,SACpB/jB,EAAI,EAAGA,EAAI+jB,EAASjiB,OAAQ9B,IACjCN,KAAKwzH,6BAA6BnvG,EAAS/jB,KAGnDkyH,EAA0B/wH,UAAU+xH,6BAA+B,SAAUz5F,GACzE,IAAIzY,EAAOthB,KACX+5B,EAAQrc,kBAAkB3V,KAAI,SAAUgyB,EAASn0B,GAC7C0b,EAAKwyG,iCAAiC/5F,EAASn0B,MAE/Cm0B,EAAQ+a,UACR/a,EAAQud,mBAAqB,SAAUvd,GACnCzY,EAAKkyG,6BAA6Bz5F,MAI9Cy4F,EAA0B/wH,UAAUqyH,iCAAmC,SAAU/5F,EAASn0B,GACtF,IAAI5F,KAAKge,oBAAqBhe,KAAKslB,cAAsC,GAAtBtlB,KAAKmlE,OAAO/iE,OAA/D,CAEA,IAAIZ,EAAW4wH,EAA0C,KAAsBphH,aAAa+oB,EAAQnrB,UAAWhJ,EAAQ/E,MACvH,GAAKW,EAGL,IADA,IAAI2jE,EAASnlE,KAAKmlE,OACT7kE,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAAK,CACpC,IAAIoc,EAAWyoD,EAAO7kE,GAAG20C,kBAAkBlb,EAAQl5B,MAC7C6b,GAAYA,EAAS9W,EAAQ/E,QAAU+E,EAAQmG,WACjD2Q,EAAS9W,EAAQ/E,MAAQ+E,EAAQmG,aAI7CymH,EAA0B/wH,UAAUmN,QAAU,WAC1C,MAAO,gBAEX5N,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAC9EL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAU04B,yBAA2B,WAC3Dn6B,KAAKmlE,OAAO/lD,SAAQ,SAAU6gB,GAC1BA,EAAM9F,+BAGdn5B,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAC3EL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUqlB,cAAgB,SAAUiT,GAC1D,OAAO/5B,KAAKo+D,SAASt3C,cAAciT,IAEvC/4B,OAAOC,eAAeuxH,EAA0B/wH,UAAW,WAAY,CAOnEL,IAAK,WACD,OAAOpB,KAAKqzH,eAEhBlyH,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAU0pB,SAAW,WAC3C,OAAOnrB,KAAKo+D,UAEhBp9D,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAO3EL,IAAK,WACD,OAAOpB,KAAKo+D,SAAS/5C,UAEzBljB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAOxEL,IAAK,WACD,OAAOpB,KAAKo+D,SAASruC,OAEzBtkB,IAAK,SAAUM,GACX/L,KAAKo+D,SAASruC,MAAQhkB,GAE1B5K,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAC3EL,IAAK,WACD,OAAOpB,KAAKo+D,SAASrwC,UAEzB5sB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAQ9EL,IAAK,WACD,OAAOpB,KAAKo+D,SAASzpD,aAEzBlJ,IAAK,SAAUM,GACX/L,KAAKo+D,SAASzpD,YAAc5I,GAEhC5K,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,yBAA0B,CACjFL,IAAK,WACD,OAAOpB,KAAKo+D,SAAS21D,gBAEzB5yH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,QAAS,CAChEL,IAAK,WAED,IADA,IAAIsD,EAAM,GACDpE,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCoE,EAAIC,KAAK3E,KAAKmlE,OAAO7kE,GAAGmkB,MAE5B,OAAO/f,GAEXvD,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,SAAU,CAMjEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAEjCnL,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,eAAgB,CAQvEL,IAAK,WACD,OAAIpB,KAAK8/E,kBACG,EACR9/E,KAAKslB,aACE,GACPtlB,KAAKmzH,kBAAoB,GAAKnzH,KAAKwgF,WAAa,IAChDxgF,KAAKmzH,kBAAoB,GAEzBnzH,KAAKmzH,mBAAqBnzH,KAAKwgF,aAC/BxgF,KAAKmzH,kBAAoBnzH,KAAKwgF,WAAa,GAExCxgF,KAAKmzH,oBAEhB1nH,IAAK,SAAU1H,GACP/D,KAAKmzH,oBAAsBpvH,IACvBA,GAAO/D,KAAKwgF,aACZz8E,EAAM/D,KAAKwgF,WAAa,GAC5BxgF,KAAKmzH,kBAAoBpvH,EACzB/D,KAAKuxB,aAAavxB,KAAKg0H,+BAG/B7yH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,eAAgB,CAQvEL,IAAK,WACD,IAAIyQ,EAAQ7R,KAAK+gF,aACjB,OAAIlvE,EAAQ,GAAKA,GAAS7R,KAAKmlE,OAAO/iE,OAC3B,KACJpC,KAAKmlE,OAAOtzD,IAEvB1Q,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAKxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,iBAAiB,IAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,UAAW,CAKlEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,UAAW,KAE5Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,oBAAqB,CAI5EL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,oBAAqB2iH,EAA6C,KAA8B1tH,UAAU,mBAEnJoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,oBAAqBvL,IAEvD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,uBAAwB,CAC/EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,sBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAK9EL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,sBAAuB2iH,EAA6C,KAA8B1tH,UAAU,yBAErJoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,sBAAuBvL,IAEzD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,yBAA0B,CACjFL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,wBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAOxEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAAiB2iH,EAA6C,KAA8B1tH,UAAU,kBAE/IoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,gBAAiBvL,IAEnD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAC3EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,kBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAOxEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,gBAAiB2iH,EAA6C,KAA8B1tH,UAAU,kBAE/IoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,gBAAiBvL,IAEnD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAC3EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,kBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,eAAgB,CAIvEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,eAAgB2iH,EAA6C,KAA8B1tH,UAAU,cAE9IoH,IAAK,SAAU9K,GACXX,KAAKsP,yBAAyB,eAAgB3O,IAElDQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,kBAAmB,CAC1EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,iBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,kBAAmB,CAI1EL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,kBAAmB2iH,EAA6C,KAA8B1tH,UAAU,iBAEjJoH,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,kBAAmBvL,IAErD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,qBAAsB,CAC7EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,oBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,uBAAwB,CAI/EL,IAAK,WACD,MAA2B,eAAnBpB,KAAKmgF,YAAkD,qBAAnBngF,KAAKmgF,YAErDh/E,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,0BAA2B,CAIlFL,IAAK,WACD,MAA2B,kBAAnBpB,KAAKmgF,YACU,qBAAnBngF,KAAKmgF,YAEbh/E,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAM9EL,IAAK,WACD,OAAOpB,KAAK+gF,aAAe,GAE/B5/E,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAO9EL,IAAK,WACD,OAAOpB,KAAK+gF,cAAgB,GAAK/gF,KAAK+gF,aAAe/gF,KAAKwgF,WAAa,GAE3Er/E,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,iBAAkB,CAIzEL,IAAK,WACD,OAAQpB,KAAKi0H,qBAAuBj0H,KAAK+gF,cAAgB,GAAK/gF,KAAKwgF,WAAa,GAEpFr/E,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUqkB,oBAAsB,SAAUC,GAEhE,YADsB,IAAlBA,IAA4BA,GAAgB,GACzCA,EAAgB,CAAC/lB,KAAKo+D,UAAYp+D,KAAKk0H,kBAElD1B,EAA0B/wH,UAAU0yH,6BAA+B,WAC/Dn0H,KAAKo0H,qBAAuBp0H,KAAKW,MACjCX,KAAKozH,mBAAoB,EACzBpzH,KAAKq0H,yBAA0B,GAEnC7B,EAA0B/wH,UAAU6yH,4BAA8B,WAC9Dt0H,KAAKozH,mBAAoB,EACrBpzH,KAAKq0H,0BACLr0H,KAAKu0H,2BAA4B,EACjCv0H,KAAKW,MAAQX,KAAKo0H,qBAClBp0H,KAAKu0H,2BAA4B,IAGzC/B,EAA0B/wH,UAAUwyB,aAAe,WAC/C,OAAOj0B,KAAKozH,kBACNpzH,KAAKo0H,qBACLt/G,EAAOrT,UAAUwyB,aAAazzB,KAAKR,OAE7CwyH,EAA0B/wH,UAAU+3B,aAAe,SAAUztB,GACrD/L,KAAKozH,mBACLpzH,KAAKq0H,yBAA0B,EAC/Br0H,KAAKo0H,qBAAuBroH,GAG5B+I,EAAOrT,UAAU+3B,aAAah5B,KAAKR,KAAM+L,IAGjD/K,OAAOC,eAAeuxH,EAA0B/wH,UAAW,aAAc,CAUrEL,IAAK,WACD,OAAOpB,KAAKge,mBAAqBhe,KAAKslB,aAChCtlB,KAAKkzH,kBACLlzH,KAAKmlE,OAAO/iE,QAEtBqJ,IAAK,SAAU1H,GACX,KAAIA,EAAM,GAEV,GAAI/D,KAAKge,mBAAqBhe,KAAKslB,aAC/BtlB,KAAKkzH,kBAAoBnvH,OAG7B,GAAIA,GAAO/D,KAAKmlE,OAAO/iE,SAAUpC,KAAKslB,aAAtC,CAEAtlB,KAAKm0H,+BACL,IAAK,IAAI7zH,EAAIN,KAAKwgF,WAAYlgF,EAAIyD,EAAKzD,IAAK,CACxC,IAAI2/B,EAAQjgC,KAAKm5C,iBACjBn5C,KAAKmlE,OAAOxgE,KAAKs7B,GACM,QAAnBjgC,KAAKmgF,YAA4C,WAApBngF,KAAKw0H,cACT,WAArBx0H,KAAKw0H,YACLv0F,EAAMya,SAGAza,EAAMlQ,OACRkQ,EAAMwa,YAKlB12C,EAAM/D,KAAKwgF,YACXxgF,KAAKmlE,OAAO72D,OAAOvK,EAAK/D,KAAKwgF,WAAaz8E,GAC9C/D,KAAKs0H,8BACLt0H,KAAKy0H,4BACLz0H,KAAK00H,iBACL10H,KAAKuxB,aAAavxB,KAAK20H,6BAE3BxzH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,cAAe,CAUtEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,cAAe5L,IAEzC5C,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUkyH,2BAA6B,WAC7D3zH,KAAKo+D,SAASx5C,cAAc5kB,KAAKslB,aAC3BtlB,KAAKmwC,WACL,IAAI8iF,EAAuCjzH,QAErDwyH,EAA0B/wH,UAAUmyH,oBAAsB,WACtD,IAAK,IAAItzH,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAAK,CACzC,IAAI2/B,EAAQjgC,KAAKmlE,OAAO7kE,GACpB2/B,GAASjgC,KAAKo+D,UAElBn+B,EAAMrb,cAAcqb,EAAMxb,QAGlC+tG,EAA0B/wH,UAAUiyH,eAAiB,WACjD,IAAI1zH,KAAKslB,cAAmC,QAAnBtlB,KAAKmgF,YAAyBngF,KAAK40H,cAE5D,IAAK,IAAIt0H,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAAK,CACzC,IAAIk6C,EAAQx6C,KAAKw0H,YACH,kBAAVh6E,IACAA,EAAc,IAANl6C,EAAU,WAAa,aAEnCN,KAAKmlE,OAAO7kE,GAAGk6C,MAAQA,IAG/Bg4E,EAA0B/wH,UAAUgzH,0BAA4B,WAC5D,IAAI9zH,EAAQX,KAAKW,MAGjB,GAFKA,GAAUuC,MAAMoC,QAAQ3E,KACzBA,EAAQ,IACRA,EAAMyB,QAAUpC,KAAKwgF,WAAzB,CAEA,IAAK,IAAIlgF,EAAIK,EAAMyB,OAAQ9B,EAAIN,KAAKwgF,WAAYlgF,IAC5CK,EAAMgE,KAAK,IACXhE,EAAMyB,OAASpC,KAAKwgF,YACpB7/E,EAAM2N,OAAOtO,KAAKwgF,WAAY7/E,EAAMyB,OAASpC,KAAKwgF,YAEtDxgF,KAAKu0H,2BAA4B,EACjCv0H,KAAKW,MAAQA,EACbX,KAAKu0H,2BAA4B,IAErCvzH,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAMxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAiB,IAElDb,IAAK,SAAU1H,GACPA,EAAM,IACNA,EAAM,GACNA,GAAO/D,KAAK60H,gBAEhB70H,KAAK2P,iBAAiB,gBAAiB5L,GACnCA,EAAM/D,KAAK80H,gBACX90H,KAAK80H,cAAgB/wH,GACrB/D,KAAKwgF,WAAaz8E,IAClB/D,KAAKwgF,WAAaz8E,KAE1B5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAMxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAiB4c,EAAyC,KAAoBpB,yBAE/Grc,IAAK,SAAU1H,GACPA,GAAO,IAEPA,EAAMmlB,EAAyC,KAAoBpB,yBACnE/jB,EAAMmlB,EAAyC,KAAoBpB,wBACnE/jB,GAAO/D,KAAK80H,gBAEhB90H,KAAK2P,iBAAiB,gBAAiB5L,GACnCA,EAAM/D,KAAK60H,gBACX70H,KAAK60H,cAAgB9wH,GACrB/D,KAAKwgF,WAAaz8E,IAClB/D,KAAKwgF,WAAaz8E,MAE1B5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,gBAAiB,CAKxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,kBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAK3EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,qBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,mBAAoB5L,IAE9C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,wBAAyB,CAMhFL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,0BAEjCb,IAAK,SAAU9K,GACXX,KAAK2P,iBAAiB,wBAAyBhP,EAAMkM,gBAEzD1L,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAK9EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,wBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,sBAAuB5L,IACxC/D,KAAKge,mBAAqBhe,KAAKqlB,QAChCrlB,KAAKqlB,OAAOmH,0BAA0BxsB,KAAMA,KAAK0N,UAGzDvM,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,sBAAuB,CAM9EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,uBAAuB,IAExDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,sBAAuB5L,GAC7C/D,KAAKuxB,aAAavxB,KAAKg0H,8BAE3B7yH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,aAAc,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,eAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,GACpC/D,KAAKuxB,aAAavxB,KAAK+0H,4BAE3B5zH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,mBAAoB,CAK3EL,IAAK,WACD,MAA0B,QAAnBpB,KAAKmgF,YAEhBh/E,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAU0kB,gBAAkB,SAAUxlB,GAC5D,IAAKX,KAAKwN,UACN,OAAO,EAEX,IADA,IAAIkM,EAAyC,YAA5B1Z,KAAKi7B,oBAAoCt6B,EAAQ,EACzDL,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAAK,CACzC,IAAIkzC,EAAUxzC,KAAKg1H,qBAAqBh1H,KAAKmlE,OAAO7kE,GAAIoZ,EAAwC,OAA5B1Z,KAAKi7B,qBACzC,YAA5Bj7B,KAAKi7B,sBACLvhB,GAAc85B,GAItB,OADA1+B,EAAOrT,UAAU0kB,gBAAgB3lB,KAAKR,KAAkC,YAA5BA,KAAKi7B,oBAAoCt6B,GAAS,GAC3D,YAA5BX,KAAKi7B,oBAAoC,EAAIvhB,EAAa/Y,GAErE6xH,EAA0B/wH,UAAUuzH,qBAAuB,SAAU/0F,EAAOpuB,EAAO86D,GAC/E,OAAKA,EAIE1sC,EAAM9Z,gBAAgBtU,IAHzBouB,EAAM9Z,iBAAiB,GAChB,IAIfnlB,OAAOC,eAAeuxH,EAA0B/wH,UAAW,cAAe,CAOtEL,IAAK,WACD,QAAIpB,KAAKqlB,SAAUrlB,KAAKqlB,OAAOC,gBAEvBtlB,KAAKi1H,gBACRj1H,KAAKwlB,YACNxlB,KAAKwgF,WAAaxgF,KAAK80H,gBAE/B3zH,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,iBAAkB,CAOzEL,IAAK,WACD,QAAIpB,KAAKqlB,SAAUrlB,KAAKqlB,OAAOC,gBAEvBtlB,KAAKk1H,mBACRl1H,KAAKwlB,YACNxlB,KAAKwgF,WAAaxgF,KAAK60H,gBAE/B1zH,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUgyH,cAAgB,WAChD,IAAIrtH,EACJ,IAAIpG,KAAKge,kBAAT,CAEAhe,KAAKm0H,+BACL,IAAIhvD,EAAS,GACb,GAAInlE,KAAKslB,aACL,IAAIitG,EAAyBvyH,KAAMA,KAAKo+D,UACxC+G,EAAOxgE,KAAK3E,KAAKo+D,eAGjB,IAAK,IAAI99D,EAAI,EAAGA,EAAIN,KAAKwgF,WAAYlgF,IACjC6kE,EAAOxgE,KAAK3E,KAAKm5C,mBAGxB/yC,EAAKpG,KAAKmlE,QAAQ72D,OAAO8N,MAAMhW,EAAIhG,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAqF,CAAC,EAAGJ,KAAKmlE,OAAO/iE,QAAS+iE,IAClJnlE,KAAKs0H,8BACLt0H,KAAK0zH,iBACL1zH,KAAK00H,iBACL10H,KAAKuxB,aAAavxB,KAAK20H,6BAE3B3zH,OAAOC,eAAeuxH,EAA0B/wH,UAAW,oBAAqB,CAM5EL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,sBAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,oBAAqB5L,IAE/C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeuxH,EAA0B/wH,UAAW,4BAA6B,CAOpFL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,6BAA6B,IAE9Db,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,4BAA6B5L,IAEvD5C,YAAY,EACZD,cAAc,IAElBsxH,EAA0B/wH,UAAUu0B,oBAAsB,WACtD,OAAQlhB,EAAOrT,UAAUu0B,oBAAoBx1B,KAAKR,OAASA,KAAKiM,aAAajM,KAAKm1H,oBAEtF3C,EAA0B/wH,UAAUw0B,gBAAkB,WAClD,IAAIj2B,KAAKiM,aAAajM,KAAKm1H,oBACtBn1H,KAAKiM,aAAajM,KAAKkM,eAI5B,GAAKlM,KAAK4rB,WAAgC,GAAnB5rB,KAAKwgF,WAA5B,CAGA,IADA,IAAIz0E,EAAW,GACNzL,EAAI,EAAGA,EAAIN,KAAKwgF,WAAYlgF,IACjCyL,EAASpH,KAAK3E,KAAKm1H,mBAEvBn1H,KAAKW,MAAQoL,QATT+I,EAAOrT,UAAUw0B,gBAAgBz1B,KAAKR,OAW9CwyH,EAA0B/wH,UAAUmqB,QAAU,WAC1C,IAAI7nB,EAAM/D,KAAKW,MACf,IAAKoD,IAAQb,MAAMoC,QAAQvB,GACvB,OAAO,EACX,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAI3B,OAAQ9B,IAC5B,IAAKN,KAAKo1H,WAAWrxH,EAAIzD,IACrB,OAAO,EAEf,OAAO,GAEXkyH,EAA0B/wH,UAAU2zH,WAAa,SAAUrxH,GACvD,IAAK,IAAI0B,KAAQ1B,EACb,GAAIA,EAAIrC,eAAe+D,GACnB,OAAO,EAEf,OAAO,GASX+sH,EAA0B/wH,UAAUg/E,WAAa,WAC7C,IAAKzgF,KAAKq1H,YACN,OAAO,KACX,IAAIC,EAAWt1H,KAAKg5C,WAIpB,MAHwB,SAApBh5C,KAAKmgF,YAA8C,YAArBngF,KAAKw0H,aACnCc,EAAS56E,SAEN46E,GAQX9C,EAA0B/wH,UAAUu3C,SAAW,WAC3Ch5C,KAAKwgF,aACAxgF,KAAK8/E,mBACN9/E,KAAK+gF,aAAe/gF,KAAKwgF,WAAa,GAE1C,IAAIz0E,EAAW/L,KAAKW,MAChB40H,GAAc,EAsBlB,OArBKv1H,KAAKiM,aAAajM,KAAKm1H,oBAClBppH,GACF7I,MAAMoC,QAAQyG,IACdA,EAAS3J,QAAUpC,KAAKwgF,aACxB+0C,GAAc,EACdv1H,KAAKw1H,UAAUzpH,EAASA,EAAS3J,OAAS,GAAIpC,KAAKm1H,oBAGvDn1H,KAAKy1H,2BACH1pH,GACF7I,MAAMoC,QAAQyG,IACdA,EAAS3J,OAAS,GAClB2J,EAAS3J,QAAUpC,KAAKwgF,aACxB+0C,GAAc,EACdv1H,KAAKw1H,UAAUzpH,EAASA,EAAS3J,OAAS,GAAI2J,EAASA,EAAS3J,OAAS,KAEzEmzH,IACAv1H,KAAKW,MAAQoL,GAEb/L,KAAKqlB,QACLrlB,KAAKqlB,OAAO6jD,kBAAkBlpE,MAC3BA,KAAKmlE,OAAOnlE,KAAKwgF,WAAa,IAEzCgyC,EAA0B/wH,UAAU+zH,UAAY,SAAUnzG,EAAKC,GAC3D,IAAK,IAAI3f,KAAO2f,EACZD,EAAI1f,GAAO2f,EAAK3f,IAYxB6vH,EAA0B/wH,UAAU8/E,cAAgB,SAAU5gF,GACrDX,KAAK01H,iBAEL11H,KAAK8qF,gBAAiB1qF,EAAoBE,EAAEgyH,EAA4C,KAAlElyH,CAA4FJ,KAAKgwH,oBACxHhwH,KAAKirF,YAAYtqF,KAOzB6xH,EAA0B/wH,UAAUo/E,cAAgB,WACxB,SAApB7gF,KAAKmgF,YAAyBngF,KAAK+/E,aAAa3oD,aAEpDp3B,KAAK+gF,gBAMTyxC,EAA0B/wH,UAAUk/E,cAAgB,WAChD3gF,KAAK+gF,gBAQTyxC,EAA0B/wH,UAAUwpF,YAAc,SAAUtqF,GACxD,IAAIkR,EAAQ7R,KAAK21H,cAAch1H,GAC/B,KAAIkR,EAAQ,GAAKA,GAAS7R,KAAKwgF,YAA/B,CAEA,IAAIvgD,EAAQjgC,KAAKmlE,OAAOtzD,GACxB7R,KAAKmlE,OAAO72D,OAAOuD,EAAO,GACtBlR,EAAQX,KAAKW,OACZA,IAAUuC,MAAMoC,QAAQ3E,IAAUkR,GAASlR,EAAMyB,SAEtDpC,KAAKu0H,2BAA4B,EACjC5zH,EAAM2N,OAAOuD,EAAO,GACpB7R,KAAKW,MAAQA,EACbX,KAAKuxB,aAAavxB,KAAK20H,2BACnB30H,KAAKqlB,QACLrlB,KAAKqlB,OAAO8jD,oBAAoBnpE,KAAM6R,EAAOouB,GACjDjgC,KAAKu0H,2BAA4B,KAErC/B,EAA0B/wH,UAAUk0H,cAAgB,SAAU5xH,GAC1D,GAAI4E,EAAuC,KAAmByQ,SAASrV,GACnE,OAAOA,EAEX,IADA,IAAIod,EAAQnhB,KAAKmhB,MACR7gB,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpC,GAAIN,KAAKmlE,OAAO7kE,KAAOyD,GAAOod,EAAM7gB,KAAOyD,EACvC,OAAOzD,EAEf,OAAQ,GAEZkyH,EAA0B/wH,UAAU2c,eAAiB,WACjDtJ,EAAOrT,UAAU2c,eAAe5d,KAAKR,MAErC,IADA,IAAImlE,EAASnlE,KAAKmlE,OACT7kE,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAC/B6kE,EAAO7kE,GAAG8d,kBAGlBo0G,EAA0B/wH,UAAUy4B,qBAAuB,WACvD,IAAK,IAAI55B,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAK41H,4BAA4Bt1H,IAGzCkyH,EAA0B/wH,UAAU24B,YAAc,WAC9CtlB,EAAOrT,UAAU24B,YAAY55B,KAAKR,MAClC,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAKmlE,OAAO7kE,GAAG85B,eAGvBo4F,EAA0B/wH,UAAUy0B,qBAAuB,SAAUr1B,EAAMgR,GACvE,OAAIA,GAAS7R,KAAKwgF,WACP,KACJxgF,KAAKmlE,OAAOtzD,GAAOojC,kBAAkBp0C,IAEhD2xH,EAA0B/wH,UAAUm0H,4BAA8B,SAAU/jH,GACxE,IAAIouB,EAAQjgC,KAAKmlE,OAAOtzD,GACxBouB,EAAM/F,uBACN,IAAIn2B,EAAM/D,KAAKW,MACX+xB,EAAW3uB,GAAO8N,EAAQ9N,EAAI3B,OAAS2B,EAAI8N,GAAS,KACxD,GAAK6gB,EAAL,CAEA,IAAI+6D,GAAY,EAChB,IAAK,IAAI9qF,KAAO+vB,EACPuN,EAAMgV,kBAAkBtyC,IACxB3C,KAAKgzH,2BAA2BrwH,EAAKkP,YAC/B6gB,EAAO/vB,GACd8qF,GAAY,GAGhBA,IACA1pF,EAAI8N,GAAS6gB,EACb1yB,KAAKW,MAAQoD,KAGrByuH,EAA0B/wH,UAAUuxH,2BAA6B,SAAUnyH,EAAM+3C,GAC7E,OAAS54C,KAAKqlB,QAAYrlB,KAAKiO,UACxBjO,KAAKqlB,OAAOiuC,gCAAgCtzD,KAAKiO,UAAWpN,EAAM+3C,GACnE,MAEV45E,EAA0B/wH,UAAUs1B,6BAA+B,SAAUC,EAASvvB,GAQlF,IAPA,IAAI8mH,IAAe9mH,GACbzH,KAAKo+D,SAASppB,UAAUtpC,QAAQjE,IAAY,EAE9C+mH,EAAaxuH,KAAK6qB,eAAiB,OACnCgrG,EAAa71H,KAAKi3B,eAAiB,OACnC6+F,EAAY,IAAI5yH,MAChB8xC,EAAYh1C,KAAKo+D,SAASppB,UACrB10C,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAClC00C,EAAU10C,GAAGy2B,6BAA6B++F,EAAWruH,GAEzD,IAASnH,EAAI,EAAGA,EAAIw1H,EAAU1zH,OAAQ9B,IAClC02B,EAAQryB,KAAK,CACT9D,KAAM2tH,EAAasH,EAAUx1H,GAAGO,KAChC2L,KAAMqpH,EAAaC,EAAUx1H,GAAGkM,KAChCkQ,SAAUo5G,EAAUx1H,GAAGoc,WAG/B,GAAI6xG,EACA,IAASjuH,EAAI,EAAGA,EAAIw1H,EAAU1zH,OAAQ9B,IAC9Bw1H,EAAUx1H,GAAGoc,UAAYjV,GAE7BuvB,EAAQryB,KAAK,CACT9D,KAAM,SAAWi1H,EAAUx1H,GAAGO,KAC9B2L,KAAM,SAAWspH,EAAUx1H,GAAGkM,KAC9BkQ,SAAUo5G,EAAUx1H,GAAGoc,YAKvC81G,EAA0B/wH,UAAUy1B,iBAAmB,SAAUC,EAAUhxB,GAGvE,QAFiB,IAAbgxB,IAAuBA,EAAW,WACzB,IAAThxB,IAAmBA,EAAO,OACzBA,EACD,OAAO2O,EAAOrT,UAAUy1B,iBAAiB12B,KAAKR,KAAMm3B,EAAUhxB,GAClE,IAAIyjE,EAAezjE,EACfi+D,EAAMj+D,EAAKuF,QAAQ,KACnB04D,GAAO,IACPwF,EAAezjE,EAAKwF,OAAO,EAAGy4D,GAC9Bj+D,EAAOA,EAAKwF,OAAOy4D,EAAM,IAE7B,IAAI1nD,EAAW1c,KAAKo+D,SAASnpB,kBAAkB20B,GAC/C,OAAKltD,EAEEA,EAASwa,iBAAiBC,EAAUhxB,GADhC,MAGfqsH,EAA0B/wH,UAAUiiB,kBAAoB,WACpD,IAAIhT,EAAW1Q,KAAKwlB,WACpBxlB,KAAKo+D,SAAS1tD,SAAWA,EACzB,IAAK,IAAIpQ,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAKmlE,OAAO7kE,GAAGoQ,SAAWA,EAE9BoE,EAAOrT,UAAUiiB,kBAAkBljB,KAAKR,OAE5CwyH,EAA0B/wH,UAAUwkB,aAAe,WAC/CjmB,KAAKo+D,SAAS1tD,SAAW1Q,KAAKwlB,WAC9BxlB,KAAKo+D,SAASn4C,eACVjmB,KAAKkzH,kBAAoB,IACzBlzH,KAAKwgF,WAAaxgF,KAAKkzH,mBAEvBlzH,KAAKslB,cACLtlB,KAAKyzH,gBAETzzH,KAAK4zH,sBACL5zH,KAAK0zH,iBACL1zH,KAAK6zH,oCACL/+G,EAAOrT,UAAUwkB,aAAazlB,KAAKR,OAEvCwyH,EAA0B/wH,UAAUykB,iBAAmB,WACnDlmB,KAAKo+D,SAASl4C,mBACd,IAAK,IAAI5lB,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAKmlE,OAAO7kE,GAAG4lB,mBAEnBpR,EAAOrT,UAAUykB,iBAAiB1lB,KAAKR,OAE3CwyH,EAA0B/wH,UAAUqqB,aAAe,SAAU4G,EAAQvkB,GACjE2G,EAAOrT,UAAUqqB,aAAatrB,KAAKR,KAAM0yB,EAAQvkB,GACjDnO,KAAK+1H,mBAAmBrjG,EAAQvkB,IAEpCqkH,EAA0B/wH,UAAUizH,eAAiB,WAC5C10H,KAAKykB,MAEVzkB,KAAK8rB,aAAa9rB,KAAK+rB,wBAAyB/rB,KAAKgsB,8BAEzDwmG,EAA0B/wH,UAAUs0H,mBAAqB,SAAUrjG,EAAQvkB,GACvE,IAAImiC,EAAe,GACf5d,GAAUA,aAAkB1xB,SAC5BsvC,EAAev3B,KAAKC,MAAMD,KAAKE,UAAUyZ,KAE7C,IAAK,IAAIpyB,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAAK,CACzC,IAAI01H,EAAch2H,KAAK2yH,iBAAiB3yH,KAAKmlE,OAAO7kE,GAAGmkB,MAEnD6rC,EAAY3nD,EAAuC,KAAmBuQ,WAAWo3B,GACrFggB,EAAUiiE,EAAyBO,iBAAiBjmH,eAAiBmpH,EACrE1lE,EAAUiiE,EAAyBtqE,kBAAkBp7C,eAAiBvM,EACtEN,KAAKmlE,OAAO7kE,GAAGwrB,aAAawkC,EAAWniD,KAG/CqkH,EAA0B/wH,UAAU64B,kBAAoB,SAAUz5B,GAC9DiU,EAAOrT,UAAU64B,kBAAkB95B,KAAKR,KAAMa,GAC9C,IAAK,IAAIP,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAKmlE,OAAO7kE,GAAGg6B,kBAAkBz5B,GACjCb,KAAKmlE,OAAO7kE,GAAGg6B,kBAAkBi4F,EAAyBO,mBAGlEN,EAA0B/wH,UAAUw0H,kBAAoB,SAAU1kG,EAAc8F,QAChE,IAARA,IAAkBA,EAAM,MAG5B,IAFA,IACI3yB,EADA6rH,EAAY,GAEPjwH,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCoE,EACI1E,KAAKqwH,kBAAkBrwH,KAAKmlE,OAAO7kE,GAAIiwH,EAAWl5F,EAAK9F,IACnD7sB,EAEZ,OAAOA,GAEX8tH,EAA0B/wH,UAAUy0H,2BAA6B,WAC7D,IAAIx5G,EAAW1c,KAAKm2H,sBAChBvuH,EAAS8U,EAAS9U,OACtB,MAASA,EACLA,EAAOge,uBACPhe,EAASA,EAAOA,OAEpB5H,KAAK4lB,wBAET4sG,EAA0B/wH,UAAU21B,UAAY,SAAU7F,EAAc8F,GAGpE,QAFqB,IAAjB9F,IAA2BA,GAAe,QAClC,IAAR8F,IAAkBA,EAAM,MACxBr3B,KAAKu0H,0BACL,OAAO,EACX,IAAI7vH,GAAM,EACV,GAAM1E,KAAKm2H,sBAAuB,CAC1BzxH,EAAM1E,KAAKm2H,sBAAsB/+F,UAAU7F,EAAc8F,GAG7D,OAFA3yB,EAAM1E,KAAKi2H,kBAAkB1kG,EAAc8F,IAAQ3yB,EACnD1E,KAAKk2H,6BACExxH,EAGP,IAAI0xH,EAAgBp2H,KAAKq2H,iBAAiB9kG,EAAc8F,GACxD,OAAOviB,EAAOrT,UAAU21B,UAAU52B,KAAKR,KAAMuxB,IAAiB6kG,GAGtE5D,EAA0B/wH,UAAUokB,kBAAoB,WACpD,IAAInhB,EAAMoQ,EAAOrT,UAAUokB,kBAAkBrlB,KAAKR,MAClD,GAAI0E,EACA,OAAOA,EAEX,IADA,IAAIygE,EAASnlE,KAAKmlE,OACT7kE,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAC/B,GAAI6kE,EAAO7kE,GAAG0vB,eACV,OAAO,EAEf,OAAO,GAEXwiG,EAA0B/wH,UAAUg1B,cAAgB,WAChD,IAAK3hB,EAAOrT,UAAUg1B,cAAcj2B,KAAKR,MACrC,OAAO,EAEX,IADA,IAAImlE,EAASnlE,KAAKmlE,OACT7kE,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAAK,CACpC,IAAIg2H,EAAmB,GACvBnxD,EAAO7kE,GAAG01C,mBAAmBsgF,GAAkB,GAC/C,IAAK,IAAIjzH,EAAI,EAAGA,EAAIizH,EAAiBl0H,OAAQiB,IACzC,IAAKizH,EAAiBjzH,GAAG6sB,WACrB,OAAO,EAGnB,OAAO,GAEXsiG,EAA0B/wH,UAAUkzB,sBAAwB,WACxD,IAAK,IAAIr0B,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAEpC,IADA,IAAI00C,EAAYh1C,KAAKmlE,OAAO7kE,GAAG00C,UACtB3xC,EAAI,EAAGA,EAAI2xC,EAAU5yC,OAAQiB,IAClC2xC,EAAU3xC,GAAGsxB,wBAGrB7f,EAAOrT,UAAUkzB,sBAAsBn0B,KAAKR,OAEhDwyH,EAA0B/wH,UAAU+2B,uBAAyB,WACzD,GAAI1jB,EAAOrT,UAAU+2B,uBAAuBh4B,KAAKR,MAC7C,OAAO,EACX,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAEpC,IADA,IAAI00C,EAAYh1C,KAAKmlE,OAAO7kE,GAAG00C,UACtB3xC,EAAI,EAAGA,EAAI2xC,EAAU5yC,OAAQiB,IAClC,GAAI2xC,EAAU3xC,GAAGy1B,oBACb,OAAO,EAGnB,OAAO,GAEX05F,EAA0B/wH,UAAU4rB,aAAe,WAE/C,IADA,IAAI9oB,EAASuQ,EAAOrT,UAAU4rB,aAAa7sB,KAAKR,MACvCM,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAEpC,IADA,IAAI00C,EAAYh1C,KAAKmlE,OAAO7kE,GAAG00C,UACtB3xC,EAAI,EAAGA,EAAI2xC,EAAU5yC,OAAQiB,IAAK,CACvC,IAAI4R,EAAS+/B,EAAU3xC,GAAGgqB,eACtBpY,GAAUA,EAAO7S,OAAS,IAC1BmC,EAASA,EAAOkE,OAAOwM,IAInC,OAAO1Q,GAEXiuH,EAA0B/wH,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GAC5E,IAAI+xB,EAAS1yB,KAAKq0B,kBAClB,IAAK3B,IAAWxvB,MAAMoC,QAAQotB,GAC1B,OAAOA,EACX,IAAK,IAAIpyB,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,QAAU9B,EAAIoyB,EAAOtwB,OAAQ9B,IAAK,CAC9D,IAAIyD,EAAM2uB,EAAOpyB,GACZyD,IAEL2uB,EAAOpyB,GAAKN,KAAKu2H,qBAAqBj2H,EAAGyD,EAAK8wB,IAElD,OAAOnC,GAEX8/F,EAA0B/wH,UAAU80H,qBAAuB,SAAU39E,EAAY70C,EAAK8wB,GAClF,IAAK9wB,EACD,OAAOA,EACX,IAAIk8B,EAAQjgC,KAAKmlE,OAAOvsB,GACxB,IAAK,IAAIj2C,KAAOoB,EAAK,CACjB,IAAI2Y,EAAWujB,EAAMmV,uBAAuBzyC,GACvC+Z,IACDA,EAAW1c,KAAKgzH,2BAA2BrwH,EAAKi2C,IAE9Cl8B,IACF3Y,EAAIpB,GAAO+Z,EAASkY,gBAAgBC,IAG5C,OAAO9wB,GAEXyuH,EAA0B/wH,UAAU40H,iBAAmB,SAAU9kG,EAAc8F,GAI3E,IAHA,IAAI3yB,GAAM,EACNygE,EAASnlE,KAAKmlE,OACdorD,EAAY,GACPjwH,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAC/BN,KAAKw2H,0BAA0BrxD,EAAO7kE,IAE1C,IAASA,EAAI,EAAGA,EAAI6kE,EAAO/iE,OAAQ9B,IAAK,CACpC,IAAIm2H,EAAWtxD,EAAO7kE,GAAG82B,UAAU7F,IAAgB8F,GAAOA,EAAIoe,mBAAoBpe,GAClFo/F,EAAWz2H,KAAKqwH,kBAAkBlrD,EAAO7kE,GAAIiwH,EAAWl5F,IAAQo/F,EAC3Dz2H,KAAK8/E,mBAAoB22C,GAAa/xH,IACvC1E,KAAK+gF,aAAezgF,GAExBoE,EAAM+xH,GAAY/xH,EAEtB,OAAOA,GAEX8tH,EAA0B/wH,UAAU+0H,0BAA4B,SAAUv2F,GAGtE,IAFA,IAAIlrB,EAAQ/U,KACRg1C,EAAY/U,EAAM+U,UACb10C,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAClC00C,EAAU10C,GAAGu4B,2BAA6B,SAAUzB,GAChDriB,EAAM6jB,oCAIlB45F,EAA0B/wH,UAAU4uH,kBAAoB,SAAUpwF,EAAOswF,EAAWl5F,EAAK9F,GACrF,IAAKvxB,KAAKmoC,QACN,OAAO,EACX,IAAIzrB,EAAWujB,EAAMmV,uBAAuBp1C,KAAKmoC,SACjD,IAAKzrB,GAAYA,EAASkP,UACtB,OAAO,EACX,IAAIjrB,EAAQ+b,EAAS/b,MACfX,KAAKm2H,uBACPz5G,GAAY1c,KAAKm2H,uBACjBz5G,EAAS0a,UAAU7F,EAAc8F,GAErC,IAAK,IAAI/2B,EAAI,EAAGA,EAAIiwH,EAAUnuH,OAAQ9B,IAClC,GAAIK,GAAS4vH,EAAUjwH,GAKnB,OAJAoc,EAASib,SAAS,IAAI06F,EAAqC,KAA+BryH,KAAK+qF,oBAAqB/qF,OAC9Gq3B,IAAQA,EAAIqe,qBACdre,EAAIqe,mBAAqBh5B,IAEtB,EAIf,OADA6zG,EAAU5rH,KAAKhE,IACR,GAEX6xH,EAA0B/wH,UAAU03C,eAAiB,WACjD,IAAIlZ,EAAQjgC,KAAKszH,+BACbngH,EAAOnT,KAAKo+D,SAAS7lD,SAMzB,OALA,IAAI65G,EAA0C,MAAwB78G,SAASpC,EAAM8sB,GACrFA,EAAM2T,YAAc,OACpB3T,EAAMja,sBACN,IAAIusG,EAAyBvyH,KAAMigC,GACnCA,EAAM/Z,mBACC+Z,GAEXuyF,EAA0B/wH,UAAU6xH,6BAA+B,WAC/D,IAAIrzF,EAAQjgC,KAAK02H,uBACbp1G,EAAOthB,KAIX,OAHAigC,EAAM4W,2BAA6B,WAC/B,OAAOv1B,EAAKq1G,oCAET12F,GAEXuyF,EAA0B/wH,UAAUk1H,iCAAmC,WACnE,MAAqC,WAA9B32H,KAAK42H,sBACN52H,KAAK42H,sBACL52H,KAAK2sB,wBAEf6lG,EAA0B/wH,UAAUi1H,qBAAuB,WACvD,OAAO,IAAIvE,EAAqC,MAEpDK,EAA0B/wH,UAAUo1H,0BAA4B,WAC5D,IAAI72H,KAAKu0H,0BAAT,CAEA,IAAIxwH,EAAM/D,KAAKW,MACXm2H,EAAgB/yH,GAAOb,MAAMoC,QAAQvB,GAAOA,EAAI3B,OAAS,EACxC,GAAjB00H,GAAsB92H,KAAKkzH,kBAAoB,IAC/C4D,EAAgB92H,KAAKkzH,mBAEzBlzH,KAAKwgF,WAAas2C,IAEtBtE,EAA0B/wH,UAAUi4B,iBAAmB,SAAU3tB,GAC7D+I,EAAOrT,UAAUi4B,iBAAiBl5B,KAAKR,KAAM+L,GAAU,GACvD/L,KAAK62H,4BACL,IAAK,IAAIv2H,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAK+2H,2BAA2B/2H,KAAKmlE,OAAO7kE,IAEhDN,KAAKw2B,oBAETg8F,EAA0B/wH,UAAUkyB,qBAAuB,SAAU5nB,GACjE+I,EAAOrT,UAAUkyB,qBAAqBnzB,KAAKR,KAAM+L,GACjD,IAAK,IAAIzL,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IACpCN,KAAKg3H,wBAAwBh3H,KAAKmlE,OAAO7kE,SAE5BkE,IAAbuH,GACA/L,KAAKy0H,6BAGbjC,EAA0B/wH,UAAUs1H,2BAA6B,SAAU92F,GAGvE,IAFA,IAAI+U,EAAY/U,EAAM+U,UAClBtiB,EAAS1yB,KAAK2yH,iBAAiB1yF,EAAMxb,MAChCnkB,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAAK,CACvC,IAAI8yC,EAAI4B,EAAU10C,GAClB8yC,EAAExf,sBAAsBlB,EAAO0gB,EAAEvoB,iBACjCuoB,EAAEtf,wBAAwBpB,EAAO0gB,EAAEvoB,eAAiB3B,EAAyC,KAAoBrL,kBAGzH20G,EAA0B/wH,UAAUu1H,wBAA0B,SAAU/2F,GAGpE,IAFA,IAAI+U,EAAY/U,EAAM+U,UAClBtiB,EAAS1yB,KAAK2yH,iBAAiB1yF,EAAMxb,MAChCnkB,EAAI,EAAGA,EAAI00C,EAAU5yC,OAAQ9B,IAAK,CACvC,IAAI8yC,EAAI4B,EAAU10C,GAClB8yC,EAAEzf,qBAAqBjB,EAAO0gB,EAAEvoB,mBAGxC2nG,EAA0B/wH,UAAU2jB,UAAY,WAC5CtQ,EAAOrT,UAAU2jB,UAAU5kB,KAAKR,MAC5BA,KAAKslB,eACLtlB,KAAK2zH,6BACL3zH,KAAKyzH,kBAIbjB,EAA0B/wH,UAAUsxH,aAAe,SAAUvjH,GACzD,OAAOxP,KAAKmhB,MAAMzV,QAAQ8D,IAE9BgjH,EAA0B/wH,UAAUkxH,iBAAmB,SAAUnjH,GAC7D,IAAI2R,EAAQnhB,KAAKmhB,MACbtP,EAAQsP,EAAMzV,QAAQ8D,GACtBynH,EAASj3H,KAAKW,MAIlB,OAHIkR,EAAQ,GAAK3O,MAAMoC,QAAQ2xH,IAAWA,EAAO70H,OAAS+e,EAAM/e,SAC5DyP,EAAQsP,EAAM/e,QAEdyP,EAAQ,IAEPolH,IAAW/zH,MAAMoC,QAAQ2xH,IAAWA,EAAO70H,QAAUyP,EAD/C,GAGJolH,EAAOplH,IAElB2gH,EAA0B/wH,UAAUixH,iBAAmB,SAAUljH,EAAM3O,EAAMkD,GACzE,IAAIod,EAAQnhB,KAAKmhB,MACbtP,EAAQsP,EAAMzV,QAAQ8D,GACtBqC,EAAQ,IACRA,EAAQsP,EAAM/e,QAClB,IAAI60H,EAAStuH,EAAuC,KAAmBmQ,eAAe9Y,KAAKW,OAI3F,GAHKs2H,GAAW/zH,MAAMoC,QAAQ2xH,KAC1BA,EAAS,IAETA,EAAO70H,QAAUyP,EACjB,IAAK,IAAIvR,EAAI22H,EAAO70H,OAAQ9B,GAAKuR,EAAOvR,IACpC22H,EAAOtyH,KAAK,IAgBpB,GAbKsyH,EAAOplH,KACRolH,EAAOplH,GAAS,IACf7R,KAAKiM,aAAalI,UAIZkzH,EAAOplH,GAAOhR,GAHrBo2H,EAAOplH,GAAOhR,GAAQkD,EAKtB8N,GAAS,GAAKA,EAAQ7R,KAAKmlE,OAAO/iE,SAClCpC,KAAKm2H,sBAAwBn2H,KAAKmlE,OAAOtzD,GAAOujC,uBAAuBv0C,IAE3Eb,KAAKW,MAAQs2H,EACbj3H,KAAKm2H,sBAAwB,KACzBn2H,KAAKqlB,OAAQ,CACb,IAAIzf,EAAU,CACV8W,SAAU1c,KACVigC,MAAOzwB,EAAKywB,MACZp/B,KAAMA,EACNq2H,UAAWrlH,EACXgxB,UAAWo0F,EAAOplH,GAClBlR,MAAOoD,GAEX/D,KAAKqlB,OAAO+jD,6BAA6BppE,KAAM4F,KAGvD4sH,EAA0B/wH,UAAUwjB,UAAY,WAC5C,OAAOjlB,KAAKqlB,QAEhBmtG,EAA0B/wH,UAAUoxH,YAAc,WAC9C,OAAO7yH,KAAKykB,MAEhB+tG,EAA0B/wH,UAAUwzB,aAAe,SAAUrvB,QACzC,IAAZA,IAAsBA,EAAU,CAChCsvB,cAAc,IAElB,IAAIE,EAAoBtgB,EAAOrT,UAAUwzB,aAAaz0B,KAAKR,KAAM4F,GAuBjE,OAtBMwvB,IACFA,EAAkBE,QAAS,EAC3BF,EAAkB3Q,KAAOzkB,KAAKmlE,OAAO1yD,KAAI,SAAUwtB,EAAOpuB,GACtD,IAAIslH,EAAgB,CAChBt2H,KAAMo/B,EAAMp/B,MAAQgR,EACpBke,MAAOkQ,EAAMlQ,OAAS,QACtBpvB,MAAOs/B,EAAM9zB,WACbkpB,aAAc4K,EAAM9zB,WACpB9H,UAAW,SAAUN,GACjB,MAAsB,kBAARA,EAAmBgV,KAAKE,UAAUlV,GAAOA,GAE3DuxB,QAAQ,EACR7Q,KAAMwb,EAAM+U,UACPviC,KAAI,SAAUiK,GAAY,OAAOA,EAASuY,aAAarvB,MACvDmtC,QAAO,SAAUnyC,GAAK,QAASA,MAKxC,OAHCgF,EAAQ2vB,cAAgB,IAAInW,SAAQ,SAAUoW,GAC3C2hG,EAAc3hG,EAAYnnB,cAAgB4xB,EAAMzK,EAAYnnB,iBAEzD8oH,MAGR/hG,GAEXo9F,EAA0B/wH,UAAUikB,iBAAmB,WACnD5Q,EAAOrT,UAAUikB,iBAAiBllB,KAAKR,MACvC,IAAK,IAAIM,EAAI,EAAGA,EAAIN,KAAKmlE,OAAO/iE,OAAQ9B,IAAK,CACzC,IAAIujB,EAAK7jB,KAAKmlE,OAAO7kE,GACrBujB,EAAG6B,qBAGX1kB,OAAOC,eAAeuxH,EAA0B/wH,UAAW,eAAgB,CACvEL,IAAK,WACD,IAAIggF,EAAWphF,KAAKwgF,WACpB,OAAOuxC,EAA6C,KAC/C1tH,UAAU,4BAA4B,UAAUrE,KAAK+gF,aAAe,EAAGK,IAEhFjgF,YAAY,EACZD,cAAc,IAEXsxH,EA5+CmC,CA6+C5CN,EAAwC,MAE1CE,EAA0C,KAAsB7jH,SAAS,eAAgB,CACrF,CACI1N,KAAM,mBACN2J,gBAAiB,YACjBkD,SAAS,EACTtD,qBAAqB,GAEzB,CAAEvJ,KAAM,qBAAsB+J,sBAAuB,oBACrD,CACI/J,KAAM,2BACN+J,sBAAuB,0BAE3B,CAAE/J,KAAM,wBAAyBuG,SAAS,GAC1C,CAAEvG,KAAM,2BAA4BuG,SAAS,GAC7C,CACIvG,KAAM,oBACNuG,QAAS,EACTuJ,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAE5C,CAAE9P,KAAM,uBAAwBuG,QAAS,EAAGoJ,SAAU,GACtD,CACI3P,KAAM,uBACNuG,QAAS8hB,EAAyC,KAAoBpB,wBAE1E,+BACA,oCACA,CACIjnB,KAAM,cACNuG,QAAS,UACTuJ,QAAS,CAAC,UAAW,YAAa,WAAY,kBAElD,CAAE9P,KAAM,WACR,CACIA,KAAM,sBACN+J,sBAAuB,0BAE3B,CAAE/J,KAAM,yBACR,CACIA,KAAM,oBACN+J,sBAAuB,wBAE3B,CAAE/J,KAAM,eAAgB+J,sBAAuB,mBAC/C,CAAE/J,KAAM,kBAAmB+J,sBAAuB,sBAClD,CAAE/J,KAAM,gBAAiB+J,sBAAuB,oBAChD,CAAE/J,KAAM,gBAAiB+J,sBAAuB,oBAChD,CACI/J,KAAM,sBACNuG,QAAS,MACTuJ,QAAS,CAAC,MAAO,UAAW,aAEhC,CAAE9P,KAAM,8BAA+BuG,SAAS,GAChD,CACIvG,KAAM,aACNuG,QAAS,OACTuJ,QAAS,CAAC,OAAQ,cAAe,iBAAkB,sBAEvD,CACI9P,KAAM,wBACNuG,QAAS,UACTuJ,QAAS,CAAC,UAAW,MAAO,SAAU,WAE3C,WACC,OAAO,IAAI6hH,EAA0B,MACtC,YACHpvE,EAA+C,KAA2BznC,SAASR,iBAAiB,gBAAgB,SAAUta,GAC1H,OAAO,IAAI2xH,EAA0B3xH,OAMnC,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE6wF,EAAiD7wF,EAAoB,GACrE8wF,EAAqD9wF,EAAoB,IACzEwoB,EAA+CxoB,EAAoB,GACnE+wF,EAA2C/wF,EAAoB,IACzDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOu1H,KAUnG,IAAIA,EAAyC,SAAUtiH,GAEnD,SAASsiH,EAAwBv2H,GAC7B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAEvC,OADA+U,EAAMlU,KAAOA,EACNkU,EAsDX,OA1DA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFg3H,EAAyBtiH,GAMzG9T,OAAOC,eAAem2H,EAAwB31H,UAAW,WAAY,CACjEL,IAAK,WACD,MAAO,cAEXD,YAAY,EACZD,cAAc,IAElBk2H,EAAwB31H,UAAUmN,QAAU,WACxC,MAAO,cAEXwoH,EAAwB31H,UAAU6vB,uBAAyB,WACvD,OAAOtxB,KAAK4xB,QAAU,MAE1B5wB,OAAOC,eAAem2H,EAAwB31H,UAAW,eAAgB,CACrEL,IAAK,WACD,OAAIpB,KAAK4rB,UACE,KACJulE,EAAyC,KAAqB3rD,eAAexlC,KAAKmvC,eAAgBnvC,KAAKW,QAElHQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAem2H,EAAwB31H,UAAW,kBAAmB,CAIxEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,mBAAmB,IAEpDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,kBAAmB5L,IAE7C5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAem2H,EAAwB31H,UAAW,qBAAsB,CAC3EL,IAAK,WACD,OAAOpB,KAAKq3H,kBAAoBr3H,KAAKwlB,YAEzCrkB,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAem2H,EAAwB31H,UAAW,qBAAsB,CAC3EL,IAAK,WACD,OAAOwnB,EAA6C,KAA8BvkB,UAAU,iBAEhGlD,YAAY,EACZD,cAAc,IAElBk2H,EAAwB31H,UAAUu4B,2BAA6B,WAC3D,OAAO,GAEJo9F,EA3DiC,CA4D1ClmC,EAAmD,MAErDr2E,EAA0C,KAAsBtM,SAAS,aAAc,CAAC,CAAE1N,KAAM,0BAA2BuG,SAAS,KAAU,WAC1I,OAAO,IAAIgwH,EAAwB,MACpC,gBACHnmC,EAA+C,KAA2Bt1E,SAASR,iBAAiB,cAAc,SAAUta,GACxH,IAAIuyC,EAAI,IAAIgkF,EAAwBv2H,GAEpC,OADAuyC,EAAEziC,QAAUsgF,EAA+C,KAA2BQ,eAC/Er+C,MAML,SAAUtzC,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DqsF,EAA2CrsF,EAAoB,IAC/D8qC,EAA0C9qC,EAAoB,IAC9D6c,EAA4C7c,EAAoB,GAChEsxF,EAAiDtxF,EAAoB,GACrEwjF,EAA0CxjF,EAAoB,IACxDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOy1H,KAUnG,IAAIA,EAAqC,SAAUxiH,GAE/C,SAASwiH,EAAoBz2H,GACzB,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KACvC+U,EAAMlU,KAAOA,EACbkU,EAAMsM,iBAAiB,SACvB,IAAIC,EAAOvM,EACXA,EAAMuL,uCAAuC,SAAS,WAClDgB,EAAKiQ,aAAajQ,EAAKi2G,8BAE3BxiH,EAAM2I,kBAAkB3V,KAAI,SAAU4X,EAAQ/Z,GACtB,WAAhBA,EAAQ/E,MACQ,WAAhB+E,EAAQ/E,MACQ,YAAhB+E,EAAQ/E,MACRygB,EAAKiQ,aAAajQ,EAAKi2G,8BAG/B,IAAIC,EAA6BziH,EAAM8L,wBAAwB,qBAAsB9L,GAAO,GACxF0iH,EAA6B1iH,EAAM8L,wBAAwB,qBAAsB9L,GAAO,GAO5F,OANAyiH,EAA2BrtG,kBAAoB,SAAU3d,GACrD,OAAOA,EAAOA,EAAO,IAAMA,GAE/BirH,EAA2BttG,kBAAoB,SAAU3d,GACrD,OAAOA,EAAO,IAAMA,EAAOA,GAExBuI,EAmKX,OA3LA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFk3H,EAAqBxiH,GA0BrGwiH,EAAoB71H,UAAUwkB,aAAe,WACzCnR,EAAOrT,UAAUwkB,aAAazlB,KAAKR,MACnCA,KAAKuxB,aAAavxB,KAAKu3H,4BAE3Bv2H,OAAOC,eAAeq2H,EAAoB71H,UAAW,aAAc,CAO/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,UAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,QAAS5L,IAEnC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,UAAW,CAO5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,YAEjCb,IAAK,SAAU1H,IACN/D,KAAKge,mBAAqBja,EAAM/D,KAAK03H,QAAU13H,KAAK23H,WACrD5zH,EAAM/D,KAAK03H,QAAU13H,KAAK23H,UAC9B33H,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,UAAW,CAO5DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,YAEjCb,IAAK,SAAU1H,IACN/D,KAAKge,mBAAqBja,EAAM/D,KAAK43H,QAAU53H,KAAK23H,WACrD5zH,EAAM/D,KAAK43H,QAAU53H,KAAK23H,UAC9B33H,KAAK2P,iBAAiB,UAAW5L,IAErC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,WAAY,CAO7DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACPA,GAAO,IACPA,EAAM,IACL/D,KAAKge,mBAAqBja,EAAM/D,KAAK03H,QAAU13H,KAAK43H,UACrD7zH,EAAM/D,KAAK03H,QAAU13H,KAAK43H,SAC9B53H,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBo2H,EAAoB71H,UAAUszB,oBAAsB,SAAUF,EAAYl0B,GACtE,IAAI+D,EAAM+nF,EAAyC,KAAqBhnD,qBAAqBzlC,KAAK63H,kBAAmBl3H,GACrH,OAAS+D,GAAY/D,GAEzBK,OAAOC,eAAeq2H,EAAoB71H,UAAW,oBAAqB,CACtEL,IAAK,WACD,GAAIpB,KAAK83H,WAAW11H,OAAS,EACzB,OAAOpC,KAAK83H,WAChB,IAAIpzH,EAAM,GACN/D,EAAQX,KAAK43H,QACbrlC,EAAOvyF,KAAK23H,SAChB,MAAOh3H,GAASX,KAAK03H,SACjBhzH,EAAItC,OAASwhF,EAAwC,KAAoB77D,4BACzErjB,EAAIC,KAAK,IAAI8nF,EAAyC,KAAqB9rF,IAC3EA,EAAQX,KAAK+3H,aAAap3H,EAAQ4xF,EAAMA,GAE5C,OAAO7tF,GAEXvD,YAAY,EACZD,cAAc,IAElBo2H,EAAoB71H,UAAUs2H,aAAe,SAAUp3H,EAAO4xF,GAC1D,IAAK5xF,EACD,OAAOA,EACX,GAAI+X,KAAKs/G,MAAMr3H,IAAUA,EACrB,OAAOA,EACX,IAAIs3H,EAAK,EACT,MAAOv/G,KAAKs/G,MAAMzlC,IAASA,EACvBA,GAAQ,GACR0lC,IAEJ,OAAO7/G,WAAWzX,EAAMy9B,QAAQ65F,KAEpCX,EAAoB71H,UAAUmN,QAAU,WACpC,MAAO,UAEX0oH,EAAoB71H,UAAUu4B,2BAA6B,WACvD,OAAO,GAEXs9F,EAAoB71H,UAAUwwB,eAAiB,WAC3C,OAAO,GAEXqlG,EAAoB71H,UAAUywB,aAAe,WACzC,OAAO,GAEXlxB,OAAOC,eAAeq2H,EAAoB71H,UAAW,qBAAsB,CAIvEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,uBAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,qBAAsBvL,IAExD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,wBAAyB,CAC1EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,uBAErChO,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,qBAAsB,CAIvEL,IAAK,WACD,OAAOpB,KAAKoP,yBAAyB,uBAEzC3D,IAAK,SAAU1H,GACX/D,KAAKsP,yBAAyB,qBAAsBvL,IAExD5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeq2H,EAAoB71H,UAAW,wBAAyB,CAC1EL,IAAK,WACD,OAAOpB,KAAKmP,qBAAqB,uBAErChO,YAAY,EACZD,cAAc,IAEXo2H,EA5L6B,CA6LtCpsF,EAAwC,MAE1CjuB,EAA0C,KAAsB1O,SAAS,SAAU,CAC/E,CAAE1N,KAAM,oBAAqBuK,OAAQ,OACrC,CACIvK,KAAM,cACNgQ,UAAW,aACXtF,UAAW,SAAUa,GACjB,OAAOA,EAAIgmB,YAEfxnB,sBAAuB,iBACvBQ,OAAQ,OAEZ,CACIvK,KAAM,0BAEV,CAAEA,KAAM,iBAAkBuG,QAAS,GACnC,CAAEvG,KAAM,iBAAkBuG,QAAS,GACnC,CAAEvG,KAAM,kBAAmBuG,QAAS,EAAGoJ,SAAU,IACjD,CACI3P,KAAM,qBACN2J,gBAAiB,yBACjBI,sBAAuB,yBAE3B,CACI/J,KAAM,qBACN2J,gBAAiB,yBACjBI,sBAAuB,2BAE5B,WACC,OAAO,IAAI0sH,EAAoB,MAChC,YACH5lC,EAA+C,KAA2B/1E,SAASR,iBAAiB,UAAU,SAAUta,GACpH,OAAO,IAAIy2H,EAAoBz2H,OAM7B,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1Dya,EAA4Cza,EAAoB,GAChE8qC,EAA0C9qC,EAAoB,IAC9D6xE,EAA+C7xE,EAAoB,GACnE83H,EAA8C93H,EAAoB,KAClEwwH,EAAiDxwH,EAAoB,GAC/DA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOs2H,KAOnG,IAAIC,EAAe,IACfC,EAAgB,IACpB,SAASC,EAAanxB,GAClB,IAAI1/F,EAAU0/F,EAAOa,WAAW,MAC5BwC,EAAmBhmE,OAAOgmE,kBAAoB,EAC9C+tB,EAAoB9wH,EAAQ+wH,8BAC5B/wH,EAAQgxH,2BACRhxH,EAAQixH,0BACRjxH,EAAQkxH,yBACRlxH,EAAQmxH,wBACR,EACAruB,EAAQC,EAAmB+tB,EAC3BM,EAAW1xB,EAAOn4E,MAClB8pG,EAAY3xB,EAAO6C,OACvB7C,EAAOn4E,MAAQ6pG,EAAWtuB,EAC1BpD,EAAO6C,OAAS8uB,EAAYvuB,EAC5BpD,EAAO9yC,MAAMrlC,MAAQ6pG,EAAW,KAChC1xB,EAAO9yC,MAAM21C,OAAS8uB,EAAY,KAClCrxH,EAAQsxH,MAAMxuB,EAAOA,GAKzB,IAAI4tB,EAA2C,SAAUrjH,GAErD,SAASqjH,EAA0Bt3H,GAC/B,IAAIkU,EAAQD,EAAOtU,KAAKR,KAAMa,IAASb,KAEvC,OADA+U,EAAMlU,KAAOA,EACNkU,EA6IX,OAjJA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF+3H,EAA2BrjH,GAM3GqjH,EAA0B12H,UAAU+sB,WAAa,SAAUC,GACvD,IAAItd,EAAU2D,EAAOrT,UAAU+sB,WAAWhuB,KAAKR,KAAMyuB,GAIrD,MAHI,GAAKzuB,KAAKgvB,QAAU,QACpB7d,GAAW,IAAMsd,EAAWM,OAEzB5d,GAEXgnH,EAA0B12H,UAAUmN,QAAU,WAC1C,MAAO,gBAEXupH,EAA0B12H,UAAUkb,2BAA6B,SAAUkH,GACjEA,GACF7jB,KAAKg5H,iBAAiBn1G,GAE1B/O,EAAOrT,UAAUkb,2BAA2Bnc,KAAKR,KAAM6jB,IAE3Ds0G,EAA0B12H,UAAUqb,4BAA8B,SAAU+G,GAClEA,GACF7jB,KAAKi5H,oBAAoBp1G,IAGjCs0G,EAA0B12H,UAAUu3H,iBAAmB,SAAUn1G,GAC7D,IAAI9O,EAAQ/U,KACRmnG,EAAStjF,EAAGq1G,qBAAqB,UAAU,GAC3CC,EAAWt1G,EAAGq1G,qBAAqB,UAAU,GAC7CE,EAAe,IAAIlB,EAA4C,KAAmB/wB,GAClFnnG,KAAKwlB,YACL4zG,EAAarjD,MAEjBojD,EAASE,QAAU,WACftkH,EAAMpU,WAAQ6D,GAElBxE,KAAKylB,wBAA0B,YACtB1Q,EAAMukH,YAAcvkH,EAAMyQ,YAC3B4zG,EAAarjD,MACbojD,EAAS9kE,MAAMklE,QAAU,SAGzBH,EAAaxjD,KACbujD,EAAS9kE,MAAMklE,QAAU,UAGjCH,EAAa1xB,SAAW1nG,KAAK0nG,SAC7B0xB,EAAaxxB,QAAU,WACnBT,EAAOxiF,SAEXy0G,EAAavxB,MAAQ,WACjB,IAAIpjF,EAAO20G,EAAa1uB,YACxB31F,EAAMpU,MAAQ8jB,GAElB,IAAI+0G,EAAqB,WACrB,IAAI/0G,EAAO1P,EAAMpU,MACjBwmG,EAAOn4E,MAAQja,EAAMia,OAASopG,EAC9BjxB,EAAO6C,OAASj1F,EAAMi1F,QAAUquB,EAChCC,EAAanxB,GACbiyB,EAAa/uB,YAAY5lF,GAAQ,6CAErCzkB,KAAK65B,qBAAuB2/F,EAC5BA,IACAx5H,KAAKylB,0BACLzlB,KAAKo5H,aAAeA,EACpB,IAAIK,EAAyB,SAAU95G,EAAQ/Z,GACtB,UAAjBA,EAAQ/E,MAAqC,WAAjB+E,EAAQ/E,MACpC24H,KAGRx5H,KAAK0d,kBAAkB3V,IAAI0xH,GAC3Bz5H,KAAKo5H,aAAaK,uBAAyBA,GAE/CtB,EAA0B12H,UAAUw3H,oBAAsB,SAAUp1G,GAC5D7jB,KAAKo5H,eACLp5H,KAAK0d,kBAAkB0J,OAAOpnB,KAAKo5H,aAAaK,wBAChDz5H,KAAKo5H,aAAarjD,OAEtB/1E,KAAKylB,wBAA0B,KAC/BzlB,KAAKo5H,aAAe,MAExBp4H,OAAOC,eAAek3H,EAA0B12H,UAAW,QAAS,CAIhEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,QAAS,MAE1Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,QAAS5L,IAEnC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAek3H,EAA0B12H,UAAW,SAAU,CAIjEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,SAAU,MAE3Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,SAAU5L,IAEpC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAek3H,EAA0B12H,UAAW,aAAc,CAIrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAAc,IAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAek3H,EAA0B12H,UAAW,WAAY,CAInEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAAY,YAE7Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAek3H,EAA0B12H,UAAW,qBAAsB,CAI7EL,IAAK,WACD,OAAO6wE,EAA6C,KAA8B5tE,UAAU,iBAEhGlD,YAAY,EACZD,cAAc,IAEXi3H,EAlJmC,CAmJ5CjtF,EAAwC,MAE1CrwB,EAA0C,KAAsBtM,SAAS,eAAgB,CACrF,CACI1N,KAAM,qBACNuG,SAAS,GAEb,CACIvG,KAAM,eACNuG,QAAS,KAEb,CACIvG,KAAM,gBACNuG,QAAS,KAEb,CACIvG,KAAM,WACNuG,QAAS,aAEd,WACC,OAAO,IAAI+wH,EAA0B,MACtC,YACHvH,EAA+C,KAA2Bj1G,SAASR,iBAAiB,gBAAgB,SAAUta,GAC1H,OAAO,IAAIs3H,EAA0Bt3H,OAMnC,SAAUf,EAAQ+B,EAAqBzB,GAE7C,aACqB,IAAIsI,EAAsCtI,EAAoB,GAC1DuI,EAAyCvI,EAAoB,GAC7D48B,EAAsC58B,EAAoB,GAC1D6c,EAA4C7c,EAAoB,GAChEwkC,EAA4CxkC,EAAoB,IAChEs5H,EAAyDt5H,EAAoB,IAC7E8iD,EAAuD9iD,EAAoB,IAC3EuuH,EAA0CvuH,EAAoB,IACxDA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO83H,KACpEv5H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAO+3H,KACpEx5H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOg4H,KACpEz5H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOi4H,KACpE15H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOk4H,KAEpE35H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOm4H,KACpE55H,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOo4H,KAcnG,IAAIN,EAAyB,SAAU7kH,GAEnC,SAAS6kH,IACL,IAAI5kH,EAAQD,EAAOtU,KAAKR,OAASA,KACjC+U,EAAMmlH,UAAY,GAClB,IAAI54G,EAAOvM,EAOX,OANAA,EAAMwL,yCAAyC,CAAC,WAAY,QAAS,SAAS,WAC1Ee,EAAK64G,0BAETplH,EAAMuL,uCAAuC,cAAc,WACvDgB,EAAK84G,yBAEFrlH,EAkMX,OA7MA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFu5H,EAAS7kH,GAazF9T,OAAOC,eAAe04H,EAAS,YAAa,CACxCv4H,IAAK,WACD,OAA8B,MAA1Bu4H,EAAQU,iBAEZV,EAAQU,eAAiB,CACrBx7E,MAAO,SAAUl+C,EAAO25H,GACpB,OAAQ35H,GAEZm+C,SAAU,SAAUn+C,EAAO25H,GACvB,QAAS35H,GAEbi/C,MAAO,SAAUj/C,EAAO25H,GACpB,OAAO35H,GAAS25H,GAEpBx6E,SAAU,SAAUn/C,EAAO25H,GACvB,OAAO35H,GAAS25H,GAEpBv6E,SAAU,SAAUp/C,EAAO25H,GACvB,OAAO35H,GAASA,EAAM,YAAcA,EAAM+K,QAAQ4uH,IAAkB,GAExEr6E,YAAa,SAAUt/C,EAAO25H,GAC1B,OAAS35H,IAAUA,EAAM,aAA+C,GAAjCA,EAAM+K,QAAQ4uH,IAEzD76E,QAAS,SAAU9+C,EAAO25H,GACtB,OAAO35H,EAAQ25H,GAEnB56E,KAAM,SAAU/+C,EAAO25H,GACnB,OAAO35H,EAAQ25H,GAEnB36E,eAAgB,SAAUh/C,EAAO25H,GAC7B,OAAO35H,GAAS25H,GAEpBz6E,YAAa,SAAUl/C,EAAO25H,GAC1B,OAAO35H,GAAS25H,KA9BbX,EAAQU,gBAmCvBl5H,YAAY,EACZD,cAAc,IAElBy4H,EAAQl4H,UAAUmN,QAAU,WACxB,MAAO,eAEX+qH,EAAQl4H,UAAU0U,SAAW,WACzB,IAAIzR,EAAM1E,KAAK4O,UAAU5B,QAAQ,UAAW,IACxCutH,EAAQv6H,KAAK8yB,WAAa9yB,KAAK8yB,WAAa9yB,KAAKw6H,kBAIrD,OAHID,IACA71H,GAAO,KAAO61H,GAEX71H,GAEX1D,OAAOC,eAAe04H,EAAQl4H,UAAW,WAAY,CACjDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAAY,UAE7Cb,IAAK,SAAU9K,GACNA,IAELA,EAAQA,EAAMkM,cACT8sH,EAAQc,UAAU95H,IAEvBX,KAAK2P,iBAAiB,WAAYhP,KAEtCQ,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe04H,EAAQl4H,UAAW,QAAS,CAC9CL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,QAAS,OAE1Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,QAAS5L,IAEnC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe04H,EAAQl4H,UAAW,OAAQ,CAC7CL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,OAAQ,KAEzCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,OAAQ5L,IAElC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe04H,EAAQl4H,UAAW,aAAc,CACnDL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAAc,KAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElBy4H,EAAQl4H,UAAUgqE,gBAAkB,SAAUj5D,EAAMkgB,EAAQvkB,QACrC,IAAfA,IAAyBA,EAAa,MACrCnO,KAAK06H,gBAAgBloH,IAEpBxS,KAAKopB,iBACPppB,KAAK26H,QAAQjoG,EAAQvkB,IAG7BwrH,EAAQl4H,UAAUm5H,MAAQ,SAAUj6H,GAChC,IAAIk6H,EAAgBlB,EAAQc,UAAUz6H,KAAKm3B,UAAUx2B,EAAOX,KAAKW,OAC7Dk6H,EACA76H,KAAK86H,UAAU,GAAI,MAGnB96H,KAAK+6H,aAGbpB,EAAQl4H,UAAUk5H,QAAU,SAAUjoG,EAAQvkB,GAC1C,IAAI4G,EAAQ/U,KACZA,KAAKopB,gBAAgB2J,cAAgB,SAAUruB,GAC3CqQ,EAAM8lH,cAAcn2H,EAAKguB,EAAQvkB,IAErCnO,KAAKopB,gBAAgB4J,IAAIN,EAAQvkB,IAErCwrH,EAAQl4H,UAAUo5H,cAAgB,SAAUn2H,EAAKguB,EAAQvkB,GACjDzJ,EACA1E,KAAK86H,UAAUpoG,EAAQvkB,GAGvBnO,KAAK+6H,aAGbpB,EAAQl4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,KAChDwrH,EAAQl4H,UAAUs5H,UAAY,aAC9BpB,EAAQl4H,UAAU2U,mBAAqB,WACnCtB,EAAOrT,UAAU2U,mBAAmB5V,KAAKR,MACzCA,KAAKm6H,wBAETR,EAAQl4H,UAAU04H,qBAAuB,WACrCn6H,KAAKo6H,uBAETT,EAAQl4H,UAAU24H,oBAAsB,WACpCp6H,KAAKk6H,UAAY,GACjBl6H,KAAK+7B,aAAc,EACnB/7B,KAAKopB,gBAAkB,MAE3BuwG,EAAQl4H,UAAU+4H,gBAAkB,WAChC,OAAKx6H,KAAKa,KAEN8H,EAAuC,KAAmBsD,aAAajM,KAAKW,QAAUX,KAAKg7H,eACpF,GACH,IACJh7H,KAAKa,KACL,KACAb,KAAKm3B,SACL,IACAuiG,EAAuD,KAAwBj7E,gBAAgBz+C,KAAKW,OAR7F,IAUfg5H,EAAQl4H,UAAUi5H,gBAAkB,SAAUloH,GAC1C,IAAKA,EACD,OAAO,EAEX,GADAxS,KAAKi7H,kBACoB,IAArBj7H,KAAK+7B,YACL,OAAO,EACX,IAAK,IAAIz7B,EAAI,EAAGA,EAAIN,KAAKk6H,UAAU93H,OAAQ9B,IACvC,GAAIkS,EAAK9Q,eAAe1B,KAAKk6H,UAAU55H,IACnC,OAAO,EAEf,OAAO,GAEXq5H,EAAQl4H,UAAUw5H,eAAiB,WAC/B,IAAMj7H,KAAKopB,gBAAX,CAEA,IAAI0J,EAAa9yB,KAAK8yB,WAItB,GAHKA,IACDA,EAAa9yB,KAAKw6H,mBAEjB1nG,EAAL,CAEA9yB,KAAKopB,gBAAkB,IAAIwb,EAA0C,KAA2B9R,GAChG9yB,KAAK+7B,YAAc/7B,KAAKopB,gBAAgB2S,cACxC/7B,KAAKk6H,UAAYl6H,KAAKopB,gBAAgB6S,eAEtC,IADA,IAAIV,EAAe,IAAI2nB,EAAqD,KACnE5iD,EAAI,EAAGA,EAAIN,KAAKk6H,UAAU93H,OAAQ9B,IACvCN,KAAKk6H,UAAU55H,GAAKi7B,EAAa+L,aAAatnC,KAAKk6H,UAAU55H,OAGrEU,OAAOC,eAAe04H,EAAQl4H,UAAW,iBAAkB,CACvDL,IAAK,WACD,MAAyB,UAAlBpB,KAAKm3B,UAAyC,YAAjBn3B,KAAKm3B,UAE7Ch2B,YAAY,EACZD,cAAc,IAElBy4H,EAAQU,eAAiB,KAClBV,EA9MiB,CA+M1B38F,EAAoC,MAKlC48F,EAA+B,SAAU9kH,GAEzC,SAAS8kH,IACL,IAAI7kH,EAAQD,EAAOtU,KAAKR,OAASA,KAEjC,OADA+U,EAAMmmH,WAAa,KACZnmH,EAmBX,OAvBA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFw5H,EAAe9kH,GAM/F9T,OAAOC,eAAe24H,EAAcn4H,UAAW,QAAS,CACpDL,IAAK,WACD,OAAOpB,KAAKk7H,YAEhB/5H,YAAY,EACZD,cAAc,IAElB04H,EAAcn4H,UAAUy6D,SAAW,SAAUp7C,GACzC9gB,KAAKk7H,WAAap6G,GAEtB9f,OAAOC,eAAe24H,EAAcn4H,UAAW,eAAgB,CAC3DL,IAAK,WACD,OAAO,GAEXD,YAAY,EACZD,cAAc,IAEX04H,EAxBuB,CAyBhCD,GAMEE,EAAsC,SAAU/kH,GAEhD,SAAS+kH,IACL,IAAI9kH,EAAQD,EAAOtU,KAAKR,OAASA,KAGjC,OAFA+U,EAAMgmB,MAAQ,GACdhmB,EAAMigC,UAAY,GACXjgC,EAyBX,OA9BA3U,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFy5H,EAAsB/kH,GAOtG+kH,EAAqBp4H,UAAUmN,QAAU,WACrC,MAAO,kBAEXirH,EAAqBp4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GACzDnO,KAAKm7H,UAAUn7H,KAAKo7H,gBAExBvB,EAAqBp4H,UAAUs5H,UAAY,WACvC/6H,KAAKm7H,UAAUn7H,KAAKq7H,gBAExBxB,EAAqBp4H,UAAU05H,UAAY,SAAUh8G,GACjD,GAAKnf,KAAK8gB,MAGV,IADA,IAAIkW,EAAUh3B,KAAK8gB,MAAMkvD,WAAWhwE,KAAK+6B,MAAO/6B,KAAKg1C,WAC5C10C,EAAI,EAAGA,EAAI02B,EAAQ50B,OAAQ9B,IAChC6e,EAAK6X,EAAQ12B,KAGrBu5H,EAAqBp4H,UAAU25H,cAAgB,SAAU5rH,GACrDA,EAAK9B,SAAU,GAEnBmsH,EAAqBp4H,UAAU45H,cAAgB,SAAU7rH,GACrDA,EAAK9B,SAAU,GAEZmsH,EA/B8B,CAgCvCD,GAKEE,EAAuC,SAAUhlH,GAEjD,SAASglH,IACL,OAAOhlH,EAAOtU,KAAKR,OAASA,KAgBhC,OAlBAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF05H,EAAuBhlH,GAIvGglH,EAAsBr4H,UAAUmN,QAAU,WACtC,MAAO,mBAEX5N,OAAOC,eAAe64H,EAAsBr4H,UAAW,eAAgB,CACnEL,IAAK,WACD,OAAQutH,EAAwC,KAAoBvmG,sCAExEjnB,YAAY,EACZD,cAAc,IAElB44H,EAAsBr4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GACtDnO,KAAK8gB,OACL9gB,KAAK8gB,MAAMqmD,gBAEZ2yD,EAnB+B,CAoBxCF,GAKEG,EAAuC,SAAUjlH,GAEjD,SAASilH,IACL,OAAOjlH,EAAOtU,KAAKR,OAASA,KAwChC,OA1CAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF25H,EAAuBjlH,GAIvGilH,EAAsBt4H,UAAUmN,QAAU,WACtC,MAAO,mBAEX5N,OAAOC,eAAe84H,EAAsBt4H,UAAW,YAAa,CAChEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,YAAa,KAE9Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe84H,EAAsBt4H,UAAW,WAAY,CAC/DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,aAEjCb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe84H,EAAsBt4H,UAAW,aAAc,CACjEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,cAAc,IAE/Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,aAAc5L,IAExC5C,YAAY,EACZD,cAAc,IAElB64H,EAAsBt4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GACrDnO,KAAKs7H,WAAct7H,KAAK8gB,OAE7B9gB,KAAK8gB,MAAMmvD,gBAAgBjwE,KAAKs7H,UAAWt7H,KAAKyM,SAAUzM,KAAKkwE,aAE5D6pD,EA3C+B,CA4CxCH,GAKE2B,EAAmC,SAAUzmH,GAE7C,SAASymH,IACL,OAAOzmH,EAAOtU,KAAKR,OAASA,KAoBhC,OAtBAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgFm7H,EAAmBzmH,GAInGymH,EAAkB95H,UAAUmN,QAAU,WAClC,MAAO,eAEX5N,OAAOC,eAAes6H,EAAkB95H,UAAW,WAAY,CAC3DL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAAY,KAE7Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElBq6H,EAAkB95H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GACjDnO,KAAKw7H,UAAax7H,KAAK8gB,OAE5B9gB,KAAK8gB,MAAMuvD,cAAcrwE,KAAKw7H,WAE3BD,EAvB2B,CAwBpC3B,GAKEI,EAA4C,SAAUllH,GAEtD,SAASklH,IACL,OAAOllH,EAAOtU,KAAKR,OAASA,KA0ChC,OA5CAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF45H,EAA4BllH,GAI5GklH,EAA2Bv4H,UAAUmN,QAAU,WAC3C,MAAO,wBAEX5N,OAAOC,eAAe+4H,EAA2Bv4H,UAAW,YAAa,CACrEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,YAAa,KAE9Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAe+4H,EAA2Bv4H,UAAW,gBAAiB,CACzEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,gBAAiB,KAElDb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,gBAAiB5L,IAE3C5C,YAAY,EACZD,cAAc,IAElB84H,EAA2Bv4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GAC/D,IAAI4G,EAAQ/U,KACZ,GAAKA,KAAK8gB,OAAU9gB,KAAK69D,cAAzB,CAEA,IAAI/qC,EAAa,IAAI8R,EAA0C,KAA4B5kC,KAAK69D,eAC5F/qC,EAAWgJ,SACXhJ,EAAWC,cAAgB,SAAUruB,GACjCqQ,EAAM0mH,wBAAwB/2H,IAElCouB,EAAWE,IAAIN,EAAQvkB,MAG/B6rH,EAA2Bv4H,UAAUg6H,wBAA0B,SAAU1vH,GAChE/L,KAAKs7H,gBAA0B92H,IAAbuH,GACnB/L,KAAK8gB,MAAMmvD,gBAAgBjwE,KAAKs7H,UAAWvvH,GAAU,IAGtDiuH,EA7CoC,CA8C7CJ,GAKEK,EAAwC,SAAUnlH,GAElD,SAASmlH,IACL,OAAOnlH,EAAOtU,KAAKR,OAASA,KA8BhC,OAhCAI,EAAoBE,EAAEoI,EAAoC,KAA1DtI,CAAgF65H,EAAwBnlH,GAIxG9T,OAAOC,eAAeg5H,EAAuBx4H,UAAW,YAAa,CACjEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,YAAa,KAE9Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,YAAa5L,IAEvC5C,YAAY,EACZD,cAAc,IAElBF,OAAOC,eAAeg5H,EAAuBx4H,UAAW,WAAY,CAChEL,IAAK,WACD,OAAOpB,KAAKsM,iBAAiB,WAAY,KAE7Cb,IAAK,SAAU1H,GACX/D,KAAK2P,iBAAiB,WAAY5L,IAEtC5C,YAAY,EACZD,cAAc,IAElB+4H,EAAuBx4H,UAAUmN,QAAU,WACvC,MAAO,oBAEXqrH,EAAuBx4H,UAAUq5H,UAAY,SAAUpoG,EAAQvkB,GACtDnO,KAAKs7H,WAAct7H,KAAK8gB,OAE7B9gB,KAAK8gB,MAAMqvD,iBAAiBnwE,KAAKs7H,UAAWt7H,KAAKowE,WAE9C6pD,EAjCgC,CAkCzCL,GAEF38G,EAA0C,KAAsB1O,SAAS,UAAW,CAChF,CAAE1N,KAAM,WAAYuG,QAAS,QAASsG,SAAS,GAC/C,CAAE7M,KAAM,QAAS6M,SAAS,GAC1B,yBAEJuP,EAA0C,KAAsB1O,SAAS,gBAAiB,CAAC,CAAE1N,KAAM,OAAQ6M,SAAS,IAAU,KAAM,WACpIuP,EAA0C,KAAsB1O,SAAS,iBAAkB,CAAC,cAAe,wBAAwB,WAC/H,OAAO,IAAIsrH,IACZ,iBACH58G,EAA0C,KAAsB1O,SAAS,kBAAmB,IAAI,WAC5F,OAAO,IAAIurH,IACZ,iBACH78G,EAA0C,KAAsB1O,SAAS,kBAAmB,CACxF,CAAE1N,KAAM,4BACR,CACIA,KAAM,wBACNgQ,UAAW,YACXtF,UAAW,SAAUa,GACjB,QAASA,KAASA,EAAI,eAG9B,CAAEvL,KAAM,qBAAsB6M,SAAS,KACxC,WACC,OAAO,IAAIqsH,IACZ,iBACH98G,EAA0C,KAAsB1O,SAAS,mBAAoB,CAAC,CAAE1N,KAAM,4BAA8B,CAAEA,KAAM,6BAA8B,WACtK,OAAO,IAAIo5H,IACZ,iBACHh9G,EAA0C,KAAsB1O,SAAS,cAAe,CAAC,CAAE1N,KAAM,wBAAyB,WACtH,OAAO,IAAI06H,IACZ,iBACHt+G,EAA0C,KAAsB1O,SAAS,uBAAwB,CAAC,CAAE1N,KAAM,2BAA6B,6BAA6B,WAChK,OAAO,IAAIm5H,IACZ,kBAKG,SAAUl6H,EAAQC,EAASK,GAEjC,cAC4B,SAASu7C,GASrC,SAAS92C,EAAiBC,GAAM,OAAQA,GAAqB,kBAAPA,GAAoB,YAAaA,EAAMA,EAAG,WAAaA;;;;;;AAF7G9D,OAAOC,eAAelB,EAAS,aAAc,CAAEY,OAAO,IAItD,IAAIoE,EAAMF,EAAgBzE,EAAoB,IAE9C,SAAS+E,EAAgBtF,GACrB,OAAO,SAAUylG,EAAG3iG,EAAKkP,GACA,kBAAVA,IACPA,OAAQrN,GAEZk3H,EAAgB/2H,MAAK,SAAUiB,GAAW,OAAO/F,EAAQ+F,EAASjD,EAAKkP,OAG/E,SAAS8pH,EAAKjnH,GACa,qBAAZknH,SACPA,QAAQD,KAAK,yBAA2BjnH,GAIhD,SAASmnH,EAA2BC,EAAIp1H,GACpCA,EAAUjF,UAAUs6H,MAAQ,WACxB,IAAIhnH,EAAQ/U,KACRwS,EAAOxR,OAAOg7H,oBAAoBF,GACtC,GAAIA,EAAG5zH,SAASlC,MACZ,IAAK,IAAIrD,KAAOm5H,EAAG5zH,SAASlC,MACnB81H,EAAGp6H,eAAeiB,IACnB6P,EAAK7N,KAAKhC,GAItB6P,EAAK4M,SAAQ,SAAUzc,GACG,MAAlBA,EAAIu+G,OAAO,IACXlgH,OAAOC,eAAe8T,EAAOpS,EAAK,CAC9BvB,IAAK,WAAc,OAAO06H,EAAGn5H,IAC7B8I,IAAK,SAAU9K,GAAS,OAAOm7H,EAAGn5H,GAAOhC,SAKzD,IAAI8jB,EAAO,IAAI/d,EACXu1H,EAAY,GAYhB,OAXAj7H,OAAOwR,KAAKiS,GAAMrF,SAAQ,SAAUzc,QACd6B,IAAdigB,EAAK9hB,KACLs5H,EAAUt5H,GAAO8hB,EAAK9hB,OAGD,eAAzBg5C,EAAQ65B,IAAI0mD,YACNx1H,EAAUjF,qBAAqBsD,IAAQ/D,OAAOwR,KAAKypH,GAAW75H,OAAS,GACzEu5H,EAAK,yFAINM,EAGX,IAAIE,EAAiB,CACjB,OACA,eACA,UACA,cACA,UACA,gBACA,YACA,eACA,UACA,YACA,cACA,UAEAT,EAAkB,GACtB,SAASU,EAAiB11H,EAAWd,QACjB,IAAZA,IAAsBA,EAAU,IACpCA,EAAQ/E,KAAO+E,EAAQ/E,MAAQ6F,EAAU21H,cACzC,IAAIh4B,EAAQ39F,EAAUjF,UACtBT,OAAOg7H,oBAAoB33B,GAAOjlF,SAAQ,SAAUzc,GAChD,GAAY,gBAARA,EAGJ,GAAIw5H,EAAezwH,QAAQ/I,IAAQ,EAC/BiD,EAAQjD,GAAO0hG,EAAM1hG,OADzB,CAIA,IAAIm/F,EAAa9gG,OAAO8B,yBAAyBuhG,EAAO1hG,GACxB,oBAArBm/F,EAAWnhG,OACjBiF,EAAQ02H,UAAY12H,EAAQ02H,QAAU,KAAK35H,GAAOm/F,EAAWnhG,OAEzDmhG,EAAW1gG,KAAO0gG,EAAWr2F,QACjC7F,EAAQ22H,WAAa32H,EAAQ22H,SAAW,KAAK55H,GAAO,CACjDvB,IAAK0gG,EAAW1gG,IAChBqK,IAAKq2F,EAAWr2F,WAI3B7F,EAAQ42H,SAAW52H,EAAQ42H,OAAS,KAAK73H,KAAK,CAC3C8f,KAAM,WACF,OAAOo3G,EAA2B77H,KAAM0G,MAGhDg1H,EAAgBt8G,SAAQ,SAAUq9G,GAAM,OAAOA,EAAG72H,MAClD81H,EAAkB,GAClB,IAAIgB,EAAa17H,OAAO8gB,eAAepb,EAAUjF,WAC7Ck7H,EAAQD,aAAsB33H,EAC5B23H,EAAWl6H,YACXuC,EACN,OAAO43H,EAAMC,OAAOh3H,GAGxB,SAASc,EAAUd,GACf,MAAuB,oBAAZA,EACAw2H,EAAiBx2H,GAErB,SAAUc,GACb,OAAO01H,EAAiB11H,EAAWd,KAG3C,SAAWc,GACP,SAASm2H,EAAcrqH,GACnB2pH,EAAex3H,KAAKyX,MAAM+/G,EAAgB3pH,GAE9C9L,EAAUm2H,cAAgBA,GAJ9B,CAKGn2H,IAAcA,EAAY,KAC7B,IAAIo2H,EAAcp2H,EAElB3G,EAAQ,WAAa+8H,EACrB/8H,EAAQoF,gBAAkBA,IAEG3E,KAAKT,EAASK,EAAoB,MAIzD,SAAUN,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MAAQ,CACxDm9H,EAAIM,GAAG,GACPN,EAAIO,GAAG,KACPJ,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW0V,UAAY,CACrD+4F,EACE,SACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWsU,YAC/Bw6F,MAAO,CAAE13H,KAAM,SAAUkqB,MAAOgtG,EAAIrgH,SAAS8gH,qBAE/C,CAACT,EAAIO,GAAG,YAKZx2H,EAAkB,CACpB,WACE,IAAIi2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAACA,EAAG,SAAU,CAAEK,MAAO,CAAEE,SAAU,WAGxD52H,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,QAERp2H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,WACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACEs9H,EAAG,SAAU,CACXK,MAAO,CAAE,aAAcR,EAAIrgH,SAASqR,SAASC,gBAE/C+uG,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASyyB,gBAAgB,SAAS3/B,EAAMqC,GACjD,OAAQkrH,EAAIrgH,SAASg1B,WAMjBqrF,EAAIa,KALJV,EAAG,yBAA0B,CAC3Bv6H,IAAK6M,EAAK7O,MACVy8H,MAAOL,EAAI/kD,aAAaxoE,GACxB+tH,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,SAAUlN,KAAMA,EAAMqC,MAAOA,QAI5DkrH,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASw1B,SAAS,SAAS5Q,EAAQ0wB,GAC5C,OAAO+qE,EAAIrgH,SAASg1B,WAChBwrF,EACE,MACA,CAAEE,MAAOL,EAAIrgH,SAAS80B,kBACtBurF,EAAIY,GAAGr8F,GAAQ,SAAS9xB,EAAMqC,GAC5B,OAAOqrH,EAAG,yBAA0B,CAClCv6H,IAAK6M,EAAK7O,MACVy8H,MAAOL,EAAI/kD,aAAaxoE,GACxB+tH,MAAO,CACL7gH,SAAUqgH,EAAIrgH,SACdlN,KAAMA,EACNqC,MAAO,GAAKmgD,EAAWngD,SAK/BkrH,EAAIa,QAEVb,EAAIO,GAAG,KACPP,EAAIrgH,SAASmhH,mBACTX,EAAG,MAAO,CACRA,EAAG,QAAS,CACVE,MAAOL,EAAIrgH,SAAS+R,WAAWsU,YAC/Bw6F,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAIrgH,SAAS8gH,oBAC7C5nD,GAAI,CACFkoD,MAAO,WACLf,EAAIrgH,SAASyX,mBAKrB4oG,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CACfE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,KAC/Bm+H,SAAU,CAAEhuB,UAAWgtB,EAAIiB,GAAGjB,EAAIrgH,SAAS2uG,QAAQr9F,kBAGnDlnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CACdH,EAAIrgH,SAASkO,sBA2BVmyG,EAAIa,KA1BJV,EAAG,WAAY,CACbE,MAAOL,EAAIrgH,SAAS+R,WAChBsuG,EAAIrgH,SAAS+R,WAAW7uB,KACxB,qBACJ29H,MAAO,CACL13H,KAAM,OACNo4H,SAAUlB,EAAIrgH,SAAS8I,WACvB8d,SAAUy5F,EAAIrgH,SAAS8I,WACvBsE,GAAIizG,EAAIrgH,SAASkV,QACjBssG,UAAWnB,EAAIrgH,SAASpD,eACxBq2C,KAAMotE,EAAIrgH,SAASizC,KACnB,aAAcotE,EAAIrgH,SAASqR,SAASC,aACpCqlB,KAAM0pF,EAAIrgH,SAAS22B,KACnB8qF,YAAapB,EAAIrgH,SAAS8I,WACtB,GACAu3G,EAAIrgH,SAAS00G,YACjB,gBAAiB2L,EAAIrgH,SAASjT,WAC9B,eAAgBszH,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CAAEp9H,MAAOo8H,EAAIrgH,SAAS/b,OAChCi1E,GAAI,CAAE2C,OAAQwkD,EAAIxkD,OAAQC,MAAOukD,EAAIvkD,SAG3CukD,EAAIO,GAAG,KACPJ,EAAG,MAAO,CACRH,EAAIrgH,SAASkO,sBACTsyG,EAAG,MAAO,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS/b,UACtCo8H,EAAIa,UAIV92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAE7oE,MAAO,CAAE+pE,UAAWrB,EAAIrgH,SAAS2hH,iBAAmB,SAAW,KACjE,CAACnB,EAAG,qBAAsB,CAAEK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,aACnD,IAGA5V,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOD,EAAIrgH,SAASlP,UAChB0vH,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMrZ,UACrCytC,MAAO0oE,EAAIuB,WAEb,CACEpB,EACE,KACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIhwG,SACX+F,WAAY,aAGhBsqG,MAAOL,EAAIxgD,gBACX3G,GAAI,CAAEkoD,MAAOf,EAAIzgD,iBAEnB,CACEygD,EAAIrgH,SAAS+hH,GACTvB,EAAG,OAAQ,CAAEwB,YAAa,CAAEC,SAAU,WAAc,CAClD5B,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS+hH,OAE7B1B,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASqR,YAEnCgvG,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CACTqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI8B,SACX/rG,WAAY,aAGhBsqG,MAAOL,EAAI+B,WAGf,GAEF/B,EAAIO,GAAG,KACPJ,EACE,MACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMtrB,aACvC,CACEuoH,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASq3G,mBAGrC,GAEFgJ,EAAIO,GAAG,KACPJ,EAAG,gBAAiB,CAAEK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAC7CqgH,EAAIO,GAAG,KACPJ,EACE,MACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,OAAQo8H,EAAIhiF,YACZjoB,WAAY,iBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMtQ,QACrC0kC,MAAO,CAAEvjC,YAAaisG,EAAIrgH,SAASu+B,mBAErC,CACE8hF,EAAIY,GAAGZ,EAAI1pF,MAAM,SAASvT,EAAKjuB,GAC7B,OAAOiuB,EAAIpyB,QACPwvH,EACE,MACA,CACEv6H,IAAKo6H,EAAIrgH,SAASoN,GAAK,IAAMjY,EAC7BurH,MAAOL,EAAI5uG,IAAI2R,KAEjB,CACEo9F,EAAG,aAAc,CACfK,MAAO,CAAEz9F,IAAKA,EAAKza,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,QAGpD,GAEF4uG,EAAIa,QAEVb,EAAIO,GAAG,KACPP,EAAIrgH,SAAS0+B,cACT8hF,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMpB,QAAU,CACzDq+F,EAAG,QAAS,CACVE,MAAOL,EAAI13G,OAAO05G,kBAClBxB,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAI13G,OAAOyjE,UAC3ClT,GAAI,CAAEkoD,MAAOf,EAAI5hF,mBAGrB4hF,EAAIa,MAEV,IAGJ,GAEFb,EAAIa,MAEN92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIvwH,UAElC1F,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,WACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACEs9H,EAAG,SAAU,CACXK,MAAO,CAAE,aAAcR,EAAIrgH,SAASqR,SAASC,gBAE/C+uG,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASyyB,gBAAgB,SAAS3/B,EAAMqC,GACjD,OAAOqrH,EAAG,MAAO,CAAEv6H,IAAK6M,EAAK7O,MAAOy8H,MAAOL,EAAI/kD,aAAaxoE,IAAS,CACnE0tH,EAAG,QAAS,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWmS,OAAS,CACpDm8F,EAAIrgH,SAAS+uG,YACTyR,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAAS/b,MACpBmyB,WAAY,mBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwS,YAC/By9F,YAAa,CAAEnF,QAAS,QACxBgE,MAAO,CACL13H,KAAM,WACNhF,KAAMk8H,EAAIrgH,SAAS7b,KAAO,IAAMk8H,EAAIrgH,SAASoN,GAC7CA,GAAIizG,EAAIrgH,SAASkV,QAAU,IAAMpiB,EAAK7O,MACtC2iC,SAAUy5F,EAAIrgH,SAAS8I,aAAehW,EAAK42B,UAC3C,gBAAiB22F,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CACRp9H,MAAO6O,EAAK7O,MACZq2E,QAAS9zE,MAAMoC,QAAQy3H,EAAIrgH,SAAS/b,OAChCo8H,EAAI56G,GAAG46G,EAAIrgH,SAAS/b,MAAO6O,EAAK7O,QAAU,EAC1Co8H,EAAIrgH,SAAS/b,OAEnBi1E,GAAI,CACFkoD,MAAO,SAASkB,GACd,IAAIC,EAAMlC,EAAIrgH,SAAS/b,MACrBu+H,EAAOF,EAAO98H,OACdi9H,IAAMD,EAAKloD,QACb,GAAI9zE,MAAMoC,QAAQ25H,GAAM,CACtB,IAAIG,EAAM5vH,EAAK7O,MACb0+H,EAAMtC,EAAI56G,GAAG88G,EAAKG,GAChBD,EACFE,EAAM,IAAMtC,EAAIrgH,SAAS/b,MAAQs+H,EAAIx2H,OAAO22H,IAE5CC,GAAO,IACJtC,EAAIrgH,SAAS/b,MAAQs+H,EACnB/tH,MAAM,EAAGmuH,GACT52H,OAAOw2H,EAAI/tH,MAAMmuH,EAAM,UAG9BtC,EAAIrgH,SAAS/b,MAAQw+H,MAK7BjC,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAAS/b,MACpBmyB,WAAY,mBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwS,YAC/By9F,YAAa,CAAEnF,QAAS,QACxBgE,MAAO,CACL13H,KAAM,QACNhF,KAAMk8H,EAAIrgH,SAAS7b,KAAO,IAAMk8H,EAAIrgH,SAASoN,GAC7CA,GAAIizG,EAAIrgH,SAASkV,QAAU,IAAMpiB,EAAK7O,MACtC2iC,SAAUy5F,EAAIrgH,SAAS8I,aAAehW,EAAK42B,UAC3C,gBAAiB22F,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CACRp9H,MAAO6O,EAAK7O,MACZq2E,QAAS+lD,EAAIuC,GAAGvC,EAAIrgH,SAAS/b,MAAO6O,EAAK7O,QAE3Ci1E,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIrgH,SAAS/b,MAAQ6O,EAAK7O,UAIpCo8H,EAAIO,GAAG,KACPJ,EAAG,MAAO,CACqB,UAA7BH,EAAIrgH,SAAS6iH,YACTrC,EAAG,MAAO,CACRE,MAAOL,EAAIrgH,SAAS+R,WAAWgT,MAC/B4yB,MAAO,CAAEmrE,UAAWzC,EAAIrgH,SAAS+iH,UACjClC,MAAO,CACLl7G,IAAK7S,EAAKkwH,UACV1wG,MAAO+tG,EAAIrgH,SAASijH,WAChB5C,EAAIrgH,SAASijH,WAAa,UAC1Bn7H,EACJwlG,OAAQ+yB,EAAIrgH,SAASkjH,YACjB7C,EAAIrgH,SAASkjH,YAAc,UAC3Bp7H,EACJq7H,IAAKrwH,EAAKhD,MAAQgD,EAAK7O,SAG3Bo8H,EAAIa,KACRb,EAAIO,GAAG,KACsB,UAA7BP,EAAIrgH,SAAS6iH,YACTrC,EAAG,QAAS,CACVE,MAAOL,EAAIrgH,SAAS+R,WAAWgT,MAC/B4yB,MAAO,CAAEmrE,UAAWzC,EAAIrgH,SAAS+iH,UACjClC,MAAO,CACLl7G,IAAK7S,EAAKkwH,UACV1wG,MAAO+tG,EAAIrgH,SAASijH,WAChB5C,EAAIrgH,SAASijH,WAAa,UAC1Bn7H,EACJwlG,OAAQ+yB,EAAIrgH,SAASkjH,YACjB7C,EAAIrgH,SAASkjH,YAAc,UAC3Bp7H,KAGRu4H,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIrgH,SAAS6uG,UACT2R,EACE,OACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWwU,SAC/Bs6F,MAAO,CAAExtG,MAAOvgB,EAAKhD,MAAQgD,EAAK7O,QAEpC,CAACo8H,EAAIO,GAAGP,EAAIiB,GAAGxuH,EAAKhD,MAAQgD,EAAK7O,UAEnCo8H,EAAIa,eAMlB,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,eAAgB,CACxBK,MAAO,CAAE7gH,SAAUqgH,EAAIrkD,aAAcvqD,IAAK4uG,EAAI5uG,QAG9CrnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWjiB,MAAQ,CACxDuwH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS2Y,kBAG3BvuB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MAAQ,CAC3B,UAA7Bm9H,EAAIrgH,SAAS6iH,YACTrC,EAAG,MAAO,CACRE,MAAOL,EAAIrgH,SAAS+R,WAAWgT,MAC/B4yB,MAAO,CAAEmrE,UAAWzC,EAAIrgH,SAAS+iH,UACjClC,MAAO,CACLl7G,IAAK06G,EAAIrgH,SAASgjH,UAClB1wG,MAAO+tG,EAAIrgH,SAASijH,WAChB5C,EAAIrgH,SAASijH,WAAa,UAC1Bn7H,EACJwlG,OAAQ+yB,EAAIrgH,SAASkjH,YACjB7C,EAAIrgH,SAASkjH,YAAc,UAC3Bp7H,KAGRu4H,EAAIa,KACRb,EAAIO,GAAG,KACsB,UAA7BP,EAAIrgH,SAAS6iH,YACTrC,EAAG,QAAS,CACVE,MAAOL,EAAIrgH,SAAS+R,WAAWgT,MAC/B4yB,MAAO,CAAEmrE,UAAWzC,EAAIrgH,SAAS+iH,UACjClC,MAAO,CACLl7G,IAAK06G,EAAIrgH,SAASgjH,UAClB1wG,MAAO+tG,EAAIrgH,SAASijH,WAChB5C,EAAIrgH,SAASijH,WAAa,UAC1Bn7H,EACJwlG,OAAQ+yB,EAAIrgH,SAASkjH,YACjB7C,EAAIrgH,SAASkjH,YAAc,UAC3Bp7H,KAGRu4H,EAAIa,QAGR92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEH,EAAIj0F,QACAo0F,EAAG,MAAO,CAAEa,SAAU,CAAEhuB,UAAWgtB,EAAIiB,GAAGjB,EAAI+C,eAC9C/C,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIgD,iBACA7C,EAAGH,EAAIiD,cAAe,CACpBC,IAAK,YACL1C,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,SAAUyR,IAAK4uG,EAAI5uG,OAE5C4uG,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MAAQ,CACxDs9H,EAAG,QAAS,CAAEE,MAAOL,EAAIhmD,WAAa,CACpCmmD,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAASm6D,aACpB/jD,WAAY,0BAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAW6R,QAC/Bi9F,MAAO,CACL13H,KAAM,WACNhF,KAAMk8H,EAAIrgH,SAAS7b,KACnBipB,GAAIizG,EAAIrgH,SAASkV,QACjB0R,SAAUy5F,EAAIrgH,SAAS8I,WACvB,gBAAiBu3G,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EAAI26H,EAAIrgH,SAASoN,GAAK,UAAY,MAEnEi0G,SAAU,CACRp9H,MAAOo8H,EAAIrgH,SAASm6D,aACpBqpD,cAAenD,EAAIrgH,SAAS26D,gBAC5BL,QAAS9zE,MAAMoC,QAAQy3H,EAAIrgH,SAASm6D,cAChCkmD,EAAI56G,GAAG46G,EAAIrgH,SAASm6D,aAAckmD,EAAIrgH,SAASm6D,eAAiB,EAChEkmD,EAAIrgH,SAASm6D,cAEnBjB,GAAI,CACFkoD,MAAO,SAASkB,GACd,IAAIC,EAAMlC,EAAIrgH,SAASm6D,aACrBqoD,EAAOF,EAAO98H,OACdi9H,IAAMD,EAAKloD,QACb,GAAI9zE,MAAMoC,QAAQ25H,GAAM,CACtB,IAAIG,EAAMrC,EAAIrgH,SAASm6D,aACrBwoD,EAAMtC,EAAI56G,GAAG88G,EAAKG,GAChBD,EACFE,EAAM,IAAMtC,EAAIrgH,SAASm6D,aAAeooD,EAAIx2H,OAAO22H,IAEnDC,GAAO,IACJtC,EAAIrgH,SAASm6D,aAAeooD,EAC1B/tH,MAAM,EAAGmuH,GACT52H,OAAOw2H,EAAI/tH,MAAMmuH,EAAM,UAG9BtC,EAAIrgH,SAASm6D,aAAesoD,MAKpCpC,EAAIO,GAAG,KACPJ,EACE,OACA,CACEE,MAAOL,EAAInrF,eAAc,GACzBgkC,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIllD,aAAamnD,GAAQ,MAI/B,CAACjC,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS8oG,cAAcx3F,iBAE5C+uG,EAAIO,GAAG,KACPJ,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWiS,OAC/Bk1C,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAI3lD,cAAc4nD,MAIxB,CAAC9B,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWkS,WAE/Co8F,EAAIO,GAAG,KACPJ,EACE,OACA,CACEE,MAAOL,EAAInrF,eAAc,GACzBgkC,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIllD,aAAamnD,GAAQ,MAI/B,CAACjC,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS+oG,aAAaz3F,sBAK7ClnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MAAQ,CACvDm9H,EAAIrgH,SAAS8I,WAmBVu3G,EAAIa,KAlBJV,EAAG,QAAS,CACVE,MAAOL,EAAIrgH,SAAS+R,WAAWiV,UAC/B65F,MAAO,CACL13H,KAAM,OACNikB,GAAIizG,EAAIrgH,SAASkV,QACjB,gBAAiBmrG,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,KACNq2G,SAAUpD,EAAIrgH,SAAS6+D,cAAgB,gBAAa/2E,EACpDurB,MAAOgtG,EAAIrgH,SAAS0jH,WACpBC,OAAQtD,EAAIrgH,SAAS4jH,eAEvB1qD,GAAI,CAAE2C,OAAQwkD,EAAIriD,YAGxBqiD,EAAIO,GAAG,KACPP,EAAIrgH,SAAS8I,WACT03G,EAAG,QAAS,CACVE,MAAOL,EAAI1hD,sBACXqjD,YAAa,CAAE/yB,MAAO,eACtB4xB,MAAO,CAAE13H,KAAM,OAAQy9B,SAAU,GAAI66F,YAAapB,EAAIrgH,SAASqT,SAEjEgtG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWoV,cAC/B+xC,GAAI,CAAE2qD,KAAMxD,EAAIxiD,OAAQimD,SAAUzD,EAAIziD,aAExC,CACE4iD,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW8lE,SAAW,CACpD2oC,EACE,QACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAWuV,YACvB+4F,EAAIrgH,SAAS8I,WACV,IAAMu3G,EAAIrgH,SAAS+R,WAAW6U,SAC9B,IACNi6F,MAAO,CACLkD,KAAM,SACNC,IAAK3D,EAAIrgH,SAASkV,QAClB,aAAcmrG,EAAIrgH,SAASikH,sBAG/B,CAAC5D,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASikH,wBAE9B5D,EAAIO,GAAG,KACPP,EAAIrgH,SAASkP,UACTsxG,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWwV,cAAgB,CAC1D84F,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASkkH,wBAE7B7D,EAAIa,SAIdb,EAAIO,GAAG,KACNP,EAAIrgH,SAAS8I,YAAeu3G,EAAIrgH,SAASkP,UAUtCmxG,EAAIa,KATJV,EACE,SACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWgV,aAC/B85F,MAAO,CAAE13H,KAAM,UACf+vE,GAAI,CAAEkoD,MAAOf,EAAIniD,UAEnB,CAACmiD,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASmkH,uBAGlC9D,EAAIO,GAAG,KACNP,EAAIrgH,SAASkP,UAuHVmxG,EAAIa,KAtHJV,EACE,MACAH,EAAIY,GAAGZ,EAAIrgH,SAASutG,cAAc,SAASlmH,EAAK8N,GAC9C,OAAOqrH,EACL,OACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOoD,EACP+uB,WAAY,QAGhBnwB,IAAKo6H,EAAIrgH,SAASkV,QAAU,IAAM/f,EAClCurH,MAAOL,EAAIrgH,SAAS+R,WAAW8Q,SAEjC,CACEx7B,EAAIlD,KACAq8H,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW6lE,UAAY,CACrD4oC,EACE,IACA,CACEK,MAAO,CACLpgE,KAAMp5D,EAAI4rB,QACVI,MAAOhsB,EAAIlD,KACXigI,SAAU/8H,EAAIlD,KACdmuB,MAAO+tG,EAAIrgH,SAASijH,YAEtB/pD,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAI3hD,eAAe4jD,EAAQj7H,MAIjC,CAACg5H,EAAIO,GAAGP,EAAIiB,GAAGj6H,EAAIlD,WAGvBk8H,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIrgH,SAASiuG,gBAAgB5mH,GACzBm5H,EAAG,MAAO,CACRK,MAAO,CACLl7G,IAAKte,EAAI4rB,QACTq6E,OAAQ+yB,EAAIrgH,SAASkjH,YACrB5wG,MAAO+tG,EAAIrgH,SAASijH,WACpBE,IAAK,kBAGT9C,EAAIa,KACRb,EAAIO,GAAG,KACPv5H,EAAIlD,OAASk8H,EAAIrgH,SAAS8I,WACtB03G,EAAG,MAAO,CACRA,EACE,OACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWkV,WAC/BiyC,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAI7hD,aAAan3E,MAIvB,CAACg5H,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASyvE,sBAE9B4wC,EAAIO,GAAG,KACPJ,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWmV,cAC/B25F,MAAO,CAAEwD,QAAS,aAClBnrD,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAI7hD,aAAan3E,MAIvB,CACEm5H,EAAG,OAAQ,CACTK,MAAO,CACL38H,EACE,4HAMZm8H,EAAIa,KACRb,EAAIO,GAAG,KACPv5H,EAAIlD,KACAq8H,EACE,MACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWqV,gBACjC,CACEo5F,EACE,IACA,CACEK,MAAO,CACLpgE,KAAMp5D,EAAI4rB,QACVI,MAAOhsB,EAAIlD,KACXigI,SAAU/8H,EAAIlD,KACdmuB,MAAO+tG,EAAIrgH,SAASijH,YAEtB/pD,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAI3hD,eAAe4jD,EAAQj7H,MAIjC,CAACg5H,EAAIO,GAAGP,EAAIiB,GAAGj6H,EAAIlD,WAIzBk8H,EAAIa,WAMpBb,EAAIO,GAAG,KACNP,EAAIrgH,SAAS8I,YAAeu3G,EAAIrgH,SAASkP,UAUtCmxG,EAAIa,KATJV,EACE,SACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWsV,mBAC/Bw5F,MAAO,CAAE13H,KAAM,UACf+vE,GAAI,CAAEkoD,MAAOf,EAAIniD,UAEnB,CAACmiD,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASmkH,0BAKlC/5H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIjjD,eAAeijD,EAAIhjG,UAAY,CAC3DgjG,EAAIhjG,QAAQhN,SACRmwG,EACE,KACA,CACEE,MAAOL,EAAInjD,cAAcmjD,EAAIhjG,SAC7BwjG,MAAO,CACL,aAAcR,EAAIhjG,QAAQhM,SAASC,aACnClE,GAAIizG,EAAIhjG,QAAQinG,cAGpB,CACEjE,EAAIhjG,QAAQknG,qBACR/D,EAAG,OAAQ,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAWiJ,cAAgB,CACzDqlG,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIhjG,QAAQrC,iBAE5BqlG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIhjG,QAAQ0kG,GACRvB,EACE,OACA,CACEE,MAAOL,EAAIhjG,QAAQtL,WAAW9T,OAC9B+jH,YAAa,CAAEC,SAAU,WAE3B,CAAC5B,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIhjG,QAAQ0kG,OAE7B1B,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIhjG,QAAQmnG,yBACRhE,EAAG,OAAQ,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAWiJ,cAAgB,CACzDqlG,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIhjG,QAAQrC,iBAE5BqlG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW7B,EAAIhjG,QAAQhM,YACtDgvG,EAAIO,GAAG,KACPP,EAAIhjG,QAAQonG,wBACRjE,EAAG,OAAQ,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAWiJ,cAAgB,CACzDqlG,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIhjG,QAAQrC,iBAE5BqlG,EAAIa,MAEV,GAEFb,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIhjG,QAAQqnG,yBACRlE,EACE,MACA,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAW9Z,aAChC,CACEuoH,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIhjG,QAAQg6F,mBAGpC,GAEFgJ,EAAIa,QAGR92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAIsR,UAAY,CAC5Cy9F,EACE,MACA,CACEE,MAAOL,EAAI5uG,IAAIuR,YACf20B,MAAO,CAAErlC,MAAO+tG,EAAIt9F,UACpB89F,MAAO,CACLkD,KAAM,cACN,gBAAiB,IACjB,gBAAiB,QAGrB,CACEvD,EACE,OACA,CAAEE,MAAOL,EAAI5uG,IAAIuU,aAAe,IAAMq6F,EAAI5uG,IAAIwR,mBAC9C,CAACo9F,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAI13G,OAAOqd,mBAIhCq6F,EAAIO,GAAG,KACPJ,EACE,OACA,CAAEE,MAAOL,EAAI5uG,IAAIuU,aAAe,IAAMq6F,EAAI5uG,IAAI4lE,sBAC9C,CAACgpC,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAI13G,OAAOqd,oBAI5B57B,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEmE,YAAa,cAAgB,CAC7CtE,EAAIrgH,SAASkO,sBAaVmyG,EAAIa,KAZJV,EAAG,WAAY,CACbE,MAAOL,EAAIrgH,SAAS+R,WAAW4S,OAAS07F,EAAIuE,aAC5C/D,MAAO,CACLU,SAAUlB,EAAIrgH,SAAS8I,WACvB8d,SAAUy5F,EAAIrgH,SAAS8I,WACvB04G,UAAWnB,EAAIrgH,SAASgV,qBACxBysG,YAAapB,EAAIrgH,SAAS6kH,iBAC1B,aAAcxE,EAAIrgH,SAASqR,SAASC,cAEtC+vG,SAAU,CAAEp9H,MAAOo8H,EAAIrgH,SAAS0X,SAChCwhD,GAAI,CAAE2C,OAAQwkD,EAAIxkD,OAAQC,MAAOukD,EAAIvkD,SAG3CukD,EAAIO,GAAG,KACPP,EAAIrgH,SAASkO,sBACTsyG,EAAG,MAAO,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS0X,YACtC2oG,EAAIa,QAGR92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,KACA,CACEE,MAAOL,EAAIx+C,eACXlqB,MAAO0oE,EAAIv+C,eACX++C,MAAO,CAAEiE,QAASzE,EAAIz+C,eAExB,CACEy+C,EAAIh7F,KAAKsoB,YACL6yE,EACE,MACA,CACEH,EAAI0E,eACAvE,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUqgH,EAAIh7F,KAAKrlB,SAAUgQ,SAAU,SAElDqwG,EAAIa,KACRb,EAAIO,GAAG,KACNP,EAAIh7F,KAAKooB,SAaN4yE,EAAIa,KAZJV,EAAGH,EAAIlkD,uBAAuBkkD,EAAIh7F,KAAKrlB,UAAW,CAChD6hH,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIvvH,UACXslB,WAAY,cAGhBmtG,IAAK,YACL1C,MAAO,CAAE7gH,SAAUqgH,EAAIh7F,KAAKrlB,YAGlCqgH,EAAIO,GAAG,KACPP,EAAIh7F,KAAKooB,WAAa4yE,EAAIh7F,KAAK2/F,WAC3BxE,EAAG,yBAA0B,CAC3Bv6H,IAAKo6H,EAAIh7F,KAAKvyB,KAAK7O,MACnBy8H,MAAOL,EAAI/kD,aAAa+kD,EAAIh7F,KAAKvyB,MACjC+tH,MAAO,CACL7gH,SAAUqgH,EAAIh7F,KAAKrlB,SACnBlN,KAAMutH,EAAIh7F,KAAKvyB,KACfqC,MAAO,GAAKkrH,EAAIh7F,KAAKlwB,MACrB8vH,WAAW,KAGf5E,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIh7F,KAAKooB,UAAY4yE,EAAIh7F,KAAK2/F,WAC1BxE,EAAG,uBAAwB,CACzBv6H,IAAKo6H,EAAIh7F,KAAKvyB,KAAK7O,MACnBy8H,MAAOL,EAAI/kD,aAAa+kD,EAAIh7F,KAAKvyB,MACjC+tH,MAAO,CACL7gH,SAAUqgH,EAAIh7F,KAAKrlB,SACnBlN,KAAMutH,EAAIh7F,KAAKvyB,KACfqC,MAAO,GAAKkrH,EAAIh7F,KAAKlwB,MACrB8vH,WAAW,KAGf5E,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI6E,kBACA1E,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUqgH,EAAIh7F,KAAKrlB,SAAUgQ,SAAU,YAElDqwG,EAAIa,MAEV,GAEFb,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIh7F,KAAK8rB,YACLqvE,EACE,SACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAWwT,OACxB,IACA86F,EAAIrgH,SAAS+R,WAAW0T,aAC1Bo7F,MAAO,CAAE13H,KAAM,UACf+vE,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIt+C,oBAIV,CACEy+C,EAAG,OAAQ,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASmlH,kBACvC9E,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW4T,eAGhD06F,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIh7F,KAAKhV,SACLmwG,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW7B,EAAIh7F,KAAKhU,YACnDgvG,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,QAAS,CACjBE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,KAC/B29H,MAAO,CACLj6F,SAAUy5F,EAAIrgH,SAAS8I,WACvB3f,KAAMk3H,EAAIrgH,SAAS41E,UACnB4rC,UAAWnB,EAAIrgH,SAASpD,eACxB+nC,IAAK07E,EAAIrgH,SAAS2kC,IAClBC,IAAKy7E,EAAIrgH,SAAS4kC,IAClBixC,KAAMwqC,EAAIrgH,SAAS61E,KACnBoP,KAAMo7B,EAAIrgH,SAASilF,KACnB73E,GAAIizG,EAAIrgH,SAASkV,QACjBusG,YAC6B,UAA3BpB,EAAIrgH,SAAS41E,WAAyByqC,EAAIrgH,SAAS8I,WAC/C,GACAu3G,EAAIrgH,SAAS00G,YACnB,gBAAiB2L,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EAAI26H,EAAIrgH,SAASoN,GAAK,UAAY,MAEnEi0G,SAAU,CAAEp9H,MAAOo8H,EAAIrgH,SAAS/b,OAChCi1E,GAAI,CAAE2C,OAAQwkD,EAAIxkD,OAAQC,MAAOukD,EAAIvkD,UAGrC1xE,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAEE,MAAOL,EAAIvoG,KAAK/F,WAAW+F,KAAK50B,MAClC,CACEm9H,EAAIpxE,WACAuxE,EACE,KACA,CAAEE,MAAOL,EAAIvoG,KAAK/F,WAAW+F,KAAKzE,OAClC,CAACmtG,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW7B,EAAIvoG,KAAKzG,aACpD,GAEFgvG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI+E,gBACA5E,EACE,MACA,CAAEE,MAAOL,EAAIvoG,KAAK/F,WAAW+F,KAAK7f,aAClC,CACEuoH,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIvoG,KAAKu/F,mBAGjC,GAEFgJ,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAI1pF,MAAM,SAASvT,EAAKjuB,GAC7B,OAAOiuB,EAAIpyB,QACPwvH,EACE,MACA,CAAEv6H,IAAKo6H,EAAIvoG,KAAK1K,GAAK,IAAMjY,EAAOurH,MAAOL,EAAI5uG,IAAI2R,KACjD,CACEo9F,EAAG,aAAc,CACfK,MAAO,CAAEz9F,IAAKA,EAAKza,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,QAGpD,GAEF4uG,EAAIa,SAGZ,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIgF,OACXjvG,WAAY,WAGhBsqG,MAAOL,EAAI5rH,QACXosH,MAAO,CAAEkD,KAAM,QAAS32G,GAAIizG,EAAIrgH,SAASoN,GAAK,YAEhDizG,EAAIY,GAAGZ,EAAIrgH,SAASzH,QAAQ,SAASS,GACnC,OAAOwnH,EAAG,MAAO,CACfA,EAAG,OAAQ,CACTE,MAAOL,EAAIrgH,SAAS+R,WAChBsuG,EAAIrgH,SAAS+R,WAAW/Y,MAAMyqB,KAC9B,mBACJo9F,MAAO,CAAE,cAAe,UAE1BR,EAAIO,GAAG,KACPJ,EACE,OACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAChBsuG,EAAIrgH,SAAS+R,WAAW/Y,MAAMlG,KAC9B,oBAEN,CAAC0tH,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAWlpH,EAAMooB,YACjD,UAMNh3B,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEA,EAAG,QAAS,CAAEE,MAAOL,EAAInrF,cAAcmrF,EAAIvtH,OAAS,CAClD0tH,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAASywB,cACpBra,WAAY,2BAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwS,YAC/Bs8F,MAAO,CACL13H,KAAM,QACNhF,KAAMk8H,EAAIrgH,SAAS7b,KAAO,IAAMk8H,EAAIrgH,SAASoN,GAC7CA,GAAIizG,EAAIrgH,SAASkV,QAAU,IAAMmrG,EAAIlrH,MACrC4uH,KAAM,QACNn9F,SAAUy5F,EAAIrgH,SAAS8I,aAAeu3G,EAAIvtH,KAAK42B,UAC/C,gBAAiB22F,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIvtH,KAAKsuB,QAAQ9P,aAC/B,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CACRp9H,MAAOo8H,EAAIvtH,KAAK7O,MAChBq2E,QAAS+lD,EAAIuC,GAAGvC,EAAIrgH,SAASywB,cAAe4vF,EAAIvtH,KAAK7O,QAEvDi1E,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIrgH,SAASywB,cAAgB4vF,EAAIvtH,KAAK7O,UAI5Co8H,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2S,mBAAqB,CAC/D87F,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWyS,cAC/Bq8F,MAAO,CAAEwD,QAAS,kBAEpB,CAAC7D,EAAG,SAAU,CAAEK,MAAO,CAAE16H,EAAG,IAAKymG,GAAI,IAAKE,GAAI,WAGlDuzB,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEmE,YAAa,UAC1BtE,EAAIO,GAAG,KACNP,EAAI4E,UAUD5E,EAAIa,KATJV,EACE,OACA,CACEE,MAAOL,EAAIhrF,qBAAqBgrF,EAAIvtH,MACpC+tH,MAAO,CAAExtG,MAAOgtG,EAAIvtH,KAAKsuB,QAAQkkG,iBAEnC,CAAC9E,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW7B,EAAIvtH,KAAKsuB,YACpD,KAIRi/F,EAAIO,GAAG,KACPP,EAAIvtH,KAAK7O,OAASo8H,EAAIrgH,SAASwxB,UAAUvtC,MACrCu8H,EAAG,sBAAuB,CACxBqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MACEo8H,EAAIrgH,SAAS2V,UACb0qG,EAAIrgH,SAASywB,eACb4vF,EAAIrgH,SAASuwB,gBACfna,WACE,4EAGNyqG,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAEzBqgH,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI55C,aAAaG,UACxBxwD,WAAY,2BAGhBsqG,MAAOL,EAAI5uG,IAAIqW,OAAO5kC,KACtB8+H,YAAa,CACXC,SAAU,QACV/gE,OAAQ,MACR5gB,MAAO,OACP,YAAa,QAGjB,CACEkgF,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAIqW,OAAOrV,OAAOvvB,MAAQ,CAC/Cs9H,EACE,OACA,CACEwB,YAAa,CAAE1vG,MAAO,OAAQizG,OAAQ,WACtCrsD,GAAI,CAAEkoD,MAAOf,EAAIt5C,WAEnB,CACEy5C,EACE,OACA,CACEE,MAAOL,EAAI5uG,IAAIqW,OAAOrV,OAAOY,MAC7B2uG,YAAa,CAAE,gBAAiB,SAElC,CACExB,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAImF,aAAan0G,aAGzC,GAEFgvG,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CACTE,MAAOL,EAAIoF,YACX5E,MAAO,CAAE,cAAe,YAI9BR,EAAIO,GAAG,KACPP,EAAIqF,iBACAlF,EACE,OACA,CACEwB,YAAa,CAAE2D,MAAO,QAASJ,OAAQ,WACvCrsD,GAAI,CAAEkoD,MAAOf,EAAIt5C,WAEnB,CACEy5C,EACE,OACA,CACEE,MAAOL,EAAI5uG,IAAIqW,OAAOrV,OAAOY,MAC7B2uG,YAAa,CAAE,gBAAiB,SAElC,CAAC3B,EAAIO,GAAG,SAIdP,EAAIa,OAEVb,EAAIO,GAAG,KACPJ,EACE,MACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIqF,iBACXtvG,WAAY,qBAGhBsqG,MAAOL,EAAI5uG,IAAIqW,OAAO7F,MAExB,CAACu+F,EAAG,SAAU,CAAEK,MAAO,CAAEl4G,OAAQ03G,EAAImF,iBACrC,MAKJp7H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAIvuB,MAAQ,CACxCs9H,EAAG,OAAQ,CAAEK,MAAO,CAAE+E,SAAU,kBAAqB,CAClDvF,EAAI13G,OAAOq4C,QAERq/D,EAAIa,KADJV,EAAG,MAAO,CAAEmE,YAAa,qBAE7BtE,EAAIO,GAAG,KACPJ,EACE,MACA,CAAEE,MAAOL,EAAI5uG,IAAIvH,WACjB,CACEs2G,EAAG,gBAAiB,CAAEK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,UAC3C03G,EAAIO,GAAG,KACc,aAArBP,EAAI13G,OAAOm1B,MACP,CACE0iF,EACE,MACA,CAAEE,MAAOL,EAAI5uG,IAAIwQ,MACjB,CAC4C,QAA1Co+F,EAAI13G,OAAOk9G,4BAC+B,SAA1CxF,EAAI13G,OAAOk9G,2BACPrF,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAI0Q,QAAU,CACnCq+F,EAAG,QAAS,CACVE,MAAOL,EAAI13G,OAAOm9G,mBAClBjF,MAAO,CACL13H,KAAM,SACNlF,MAAOo8H,EAAI13G,OAAO0jE,iBAEpBnT,GAAI,CAAEkoD,MAAOf,EAAIxlH,WAGrBwlH,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,cAAe,CAChBK,MAAO,CACLzzG,GAAIizG,EAAI13G,OAAOo7C,YAAY32C,GAC3BzE,OAAQ03G,EAAI13G,OACZmP,KAAMuoG,EAAI13G,OAAOo7C,YACjBtyC,IAAK4uG,EAAI5uG,OAGb4uG,EAAIO,GAAG,KACmC,WAA1CP,EAAI13G,OAAOk9G,4BAC+B,SAA1CxF,EAAI13G,OAAOk9G,2BACPrF,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAI0Q,QAAU,CACnCq+F,EAAG,QAAS,CACVE,MAAOL,EAAI13G,OAAOm9G,mBAClBjF,MAAO,CACL13H,KAAM,SACNlF,MAAOo8H,EAAI13G,OAAO0jE,iBAEpBnT,GAAI,CAAEkoD,MAAOf,EAAIxlH,WAGrBwlH,EAAIa,MAEV,IAGJb,EAAIa,KACRb,EAAIO,GAAG,KACc,YAArBP,EAAI13G,OAAOm1B,OAA4C,YAArBuiF,EAAI13G,OAAOm1B,MACzC,CACE0iF,EACE,MACA,CAAEE,MAAOL,EAAI5uG,IAAIwQ,MACjB,CACEo+F,EAAI13G,OAAOo9G,uBACPvF,EAAG,kBAAmB,CACpBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAOq9G,yBACPxF,EAAG,oBAAqB,CACtBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,KACRb,EAAIO,GAAG,KACmC,QAA1CP,EAAI13G,OAAOk9G,4BAC+B,SAA1CxF,EAAI13G,OAAOk9G,2BACPrF,EAAG,oBAAqB,CACtBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,cAAe,CAChBK,MAAO,CACLzzG,GAAIizG,EAAI13G,OAAOuxB,YAAY9sB,GAC3BzE,OAAQ03G,EAAI13G,OACZmP,KAAMuoG,EAAI13G,OAAOuxB,YACjBzoB,IAAK4uG,EAAI5uG,OAGb4uG,EAAIO,GAAG,KACPP,EAAI13G,OAAOs9G,4BACPzF,EAAG,oBAAqB,CACtBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAOu9G,0BACP1F,EAAG,kBAAmB,CACpBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,KACRb,EAAIO,GAAG,KACmC,WAA1CP,EAAI13G,OAAOk9G,4BAC+B,SAA1CxF,EAAI13G,OAAOk9G,2BACPrF,EAAG,oBAAqB,CACtBK,MAAO,CAAEl4G,OAAQ03G,EAAI13G,OAAQ8I,IAAK4uG,EAAI5uG,OAExC4uG,EAAIa,MAEV,IAGJb,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIv6C,iBACA06C,EAAG,MAAO,CACRA,EAAG,MAAO,CACRE,MAAOL,EAAIz6C,0BACXy7C,SAAU,CACRhuB,UAAWgtB,EAAIiB,GAAGjB,EAAIx6C,gCAG1Bw6C,EAAIO,GAAG,KACsB,IAA7BP,EAAI13G,OAAOu9D,eACPs6C,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAIiW,SAASxkC,MAAQ,CAC1Cs9H,EAAG,MAAO,CAAEE,MAAOL,EAAIp6C,4BAA8B,CACnDu6C,EAAG,OAAQ,CACTH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAI13G,OAAOw9G,uBAE3B9F,EAAIO,GAAG,KACsB,SAA7BP,EAAI13G,OAAOu9D,eACPs6C,EAAG,QAAS,CACVE,MAAOL,EAAI5uG,IAAIiW,SAASG,gBACxBg5F,MAAO,CACL13H,KAAM,SACNlF,MAAOo8H,EAAI13G,OAAOm4C,aAChB,oBAGJoY,GAAI,CAAEkoD,MAAOf,EAAIl6C,kBAEnBk6C,EAAIa,SAGZb,EAAIa,OAEVb,EAAIa,KACRb,EAAIO,GAAG,KACc,oBAArBP,EAAI13G,OAAOm1B,MACP0iF,EAAG,MAAO,CACRE,MAAOL,EAAI5uG,IAAIwQ,KACfo/F,SAAU,CACRhuB,UAAWgtB,EAAIiB,GAAGjB,EAAI13G,OAAOy9G,iCAGjC/F,EAAIa,KACRb,EAAIO,GAAG,KACc,YAArBP,EAAI13G,OAAOm1B,MACP0iF,EAAG,MAAO,CACRE,MAAOL,EAAI5uG,IAAIwQ,KACfo/F,SAAU,CAAEhuB,UAAWgtB,EAAIiB,GAAGjB,EAAI13G,OAAO09G,yBAE3ChG,EAAIa,KACRb,EAAIO,GAAG,KACc,UAArBP,EAAI13G,OAAOm1B,MACP0iF,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAIyQ,WAAa,CACtCm+F,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAI13G,OAAO29G,oBAE3BjG,EAAIa,MAEV,QAKJ92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAQD,EAAI13G,OAAO0I,SAASC,aAAa5rB,OAAS,GAChD26H,EAAI13G,OAAO8+B,WACX44E,EAAI13G,OAAOq4C,QACTw/D,EAAG,MAAO,CAAEE,MAAOL,EAAI13G,OAAO8I,IAAIgB,QAAU,CAC1C4tG,EAAI13G,OAAO49G,aACP/F,EAAG,MAAO,CAAEE,MAAOL,EAAI13G,OAAO69G,gBAAkB,CAC9ChG,EAAG,MAAO,CACRE,MAAOL,EAAI13G,OAAO8I,IAAI4Q,UACtBs1B,MAAO,CAAEmrE,UAAWzC,EAAI13G,OAAO89G,SAC/B5F,MAAO,CACLl7G,IAAK06G,EAAI13G,OAAO+9G,QAAQp1G,aACxBgB,MAAO+tG,EAAI13G,OAAOg+G,UACdtG,EAAI13G,OAAOg+G,UAAY,UACvB7+H,EACJwlG,OAAQ+yB,EAAI13G,OAAOi+G,WACfvG,EAAI13G,OAAOi+G,WAAa,UACxB9+H,OAIVu4H,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAO0I,SAASC,aAAa5rB,OAAS,GAAK26H,EAAI13G,OAAO8+B,UACtD+4E,EAAG,MAAO,CAAEE,MAAOL,EAAI13G,OAAO8I,IAAI6Q,YAAc,CAC9Ck+F,EACE,KACA,CAAEE,MAAOL,EAAI13G,OAAO8I,IAAI4B,OACxB,CACEmtG,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAI13G,OAAO0I,aAGnC,GAEFgvG,EAAIO,GAAG,KACPJ,EACE,KACA,CAAEE,MAAOL,EAAI13G,OAAO8I,IAAIxZ,aACxB,CACEuoH,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAI13G,OAAO0uG,mBAGnC,KAGJgJ,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAOk+G,YACPrG,EAAG,MAAO,CAAEE,MAAOL,EAAI13G,OAAO69G,gBAAkB,CAC9ChG,EAAG,MAAO,CACRE,MAAOL,EAAI13G,OAAO8I,IAAI4Q,UACtBs1B,MAAO,CAAEmrE,UAAWzC,EAAI13G,OAAO89G,SAC/B5F,MAAO,CACLl7G,IAAK06G,EAAI13G,OAAO+9G,QAAQp1G,aACxBgB,MAAO+tG,EAAI13G,OAAOg+G,UACdtG,EAAI13G,OAAOg+G,UAAY,UACvB7+H,EACJwlG,OAAQ+yB,EAAI13G,OAAOi+G,WACfvG,EAAI13G,OAAOi+G,WAAa,UACxB9+H,OAIVu4H,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAOk+G,YACPrG,EAAG,MAAO,CAAEmE,YAAa,wBACzBtE,EAAIa,OAEVb,EAAIa,MAEN92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACGm9H,EAAIrgH,SAAS8I,WAyDV03G,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAW6R,QAC/Bi9F,MAAO,CAAEj6F,SAAU,GAAIxZ,GAAIizG,EAAIrgH,SAASkV,UAE1C,CACEmrG,EAAIO,GACFP,EAAIiB,GACFjB,EAAI9vF,gBACA8vF,EAAIrgH,SAAS8mH,UACbzG,EAAIrgH,SAAS2Y,iBAnEzB6nG,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW+S,eAAiB,CAC1D07F,EACE,SACA,CACEqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAASywB,cACpBra,WAAY,2BAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAW6R,QAC/Bi9F,MAAO,CACLzzG,GAAIizG,EAAIrgH,SAASkV,QACjB,aAAcmrG,EAAIrgH,SAASqR,SAASC,aACpC,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAER8rD,GAAI,CACF2C,OAAQ,SAASymD,GACfjC,EAAIrgH,SAASywB,cAAgBjqC,MAAMzB,UAAUsxC,OAC1CvyC,KAAKw+H,EAAO98H,OAAO0D,SAAS,SAAS7E,GACpC,OAAOA,EAAEoiC,YAEV1wB,KAAI,SAAS1R,GACZ,IAAIgD,EAAM,WAAYhD,EAAIA,EAAE0iI,OAAS1iI,EAAEJ,MACvC,OAAOoD,KACN,MAIX,CACEg5H,EAAIrgH,SAASgnH,mBACTxG,EAAG,SAAU,CAAEa,SAAU,CAAEp9H,WAAO6D,IAAe,CAC/Cu4H,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASunC,mBAE7B84E,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASyyB,gBAAgB,SAAS3/B,GAC3C,OAAO0tH,EACL,SACA,CACEK,MAAO,CAAEj6F,UAAW9zB,EAAK42B,WACzB23F,SAAU,CAAEp9H,MAAO6O,EAAK7O,QAE1B,CAACo8H,EAAIO,GAAGP,EAAIiB,GAAGxuH,EAAKhD,aAI1B,KAmBRuwH,EAAIO,GAAG,KACPJ,EAAG,sBAAuB,CACxBqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI9vF,gBACXna,WAAY,oBAGhByqG,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,aAG3B,IAGA5V,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEA,EACE,MACA,CAAEE,MAAOL,EAAIxjD,aAAawjD,EAAIrgH,WAC9BqgH,EAAIY,GAAGZ,EAAIrgH,SAASm7G,mBAAmB,SAASroH,EAAMqC,GACpD,OAAOqrH,EACL,QACA,CAAEv6H,IAAK6M,EAAK7O,MAAOy8H,MAAOL,EAAIlsG,OAAOksG,EAAIrgH,SAAUlN,IACnD,CACE0tH,EAAG,QAAS,CACVmE,YAAa,oBACb9D,MAAO,CACL13H,KAAM,QACNhF,KAAMk8H,EAAIrgH,SAAS7b,KACnBipB,GAAIizG,EAAIrgH,SAAS7b,KAAOgR,EACxByxB,SAAUy5F,EAAIrgH,SAAS8I,WACvB,gBAAiBu3G,EAAIrgH,SAASjT,WAC9B,aAAc+F,EAAKsuB,QAAQtxB,KAC3B,eAAgBuwH,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CAAEp9H,MAAO6O,EAAK7O,OACxBi1E,GAAI,CAAE2C,OAAQwkD,EAAIxkD,UAEpBwkD,EAAIO,GAAG,KACG,IAAVzrH,EACIqrH,EACE,OACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2U,SACjC,CACE85F,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASinH,0BAGrC,GAEF5G,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EACE,OACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWwU,UACjC,CAACi6F,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAWpvH,EAAKsuB,YAChD,GAEFi/F,EAAIO,GAAG,KACPzrH,IAAUkrH,EAAIrgH,SAASm7G,kBAAkBz1H,OAAS,EAC9C86H,EACE,OACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW4U,SACjC,CACE65F,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASknH,0BAGrC,GAEF7G,EAAIa,WAKhBb,EAAIO,GAAG,KACPJ,EAAG,sBAAuB,CACxBqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIrgH,SAAS2V,SACpBS,WAAY,sBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAW4S,MAC/Bk8F,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,aAG3B,IAGA5V,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOp9H,KAAK6jI,SAAUnF,YAAa,CAAEljH,MAAO,SAAY,CACzE0hH,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWgU,mBAAqB,CAC9Dy6F,EAAG,MAAO,CAAEK,MAAO,CAAExtG,MAAOgtG,EAAIrgH,SAASonH,gBAAmB,CAC1D5G,EACE,MACA,CACEE,MAAOL,EAAI/7C,iBAAiB+7C,EAAIrgH,UAChC6gH,MAAO,CAAEwD,QAAS,aAClBnrD,GAAI,CAAEkoD,MAAOf,EAAIr8C,iBAEnB,CAACw8C,EAAG,UAAW,CAAEK,MAAO,CAAE1xB,OAAQ,mCAGtCkxB,EAAIO,GAAG,KACPP,EAAIrgH,SAASqnH,eACT7G,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWgR,UAAY,CACrDy9F,EAAG,MAAO,CACRE,MAAOL,EAAIrgH,SAAS+R,WAAWiR,YAC/B20B,MAAO,CAAErlC,MAAO+tG,EAAIt9F,UACpB89F,MAAO,CAAEkD,KAAM,mBAGnB1D,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,MAAO,CAAEK,MAAO,CAAExtG,MAAOgtG,EAAIrgH,SAASsnH,gBAAmB,CAC1D9G,EACE,MACA,CACEE,MAAOL,EAAI77C,iBAAiB67C,EAAIrgH,UAChC6gH,MAAO,CAAEwD,QAAS,aAClBnrD,GAAI,CAAEkoD,MAAOf,EAAIn8C,iBAEnB,CAACs8C,EAAG,UAAW,CAAEK,MAAO,CAAE1xB,OAAQ,qCAIxCkxB,EAAIO,GAAG,KACPP,EAAIrgH,SAAS24G,YACT6H,EAAG,QAAS,CACVE,MACEL,EAAIrgH,SAAS+R,WAAWwT,OACxB,IACA86F,EAAIrgH,SAAS+R,WAAWyT,UAC1Bq7F,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAIrgH,SAASunH,cAC7CruD,GAAI,CAAEkoD,MAAOf,EAAI/8C,iBAEnB+8C,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWiU,cAAgB,CACzDq6F,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAASgmB,oBAI7B57B,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAI5uG,IAAI0Q,QAAU,CAC1Cq+F,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,OAAQo8H,EAAI13G,OAAOs/C,aAAeo4D,EAAI13G,OAAO6+G,iBAC7CpxG,WAAY,mDAGhBsqG,MAAOL,EAAI13G,OAAO8+G,kBAClB5G,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAI13G,OAAOqjE,cAC3C9S,GAAI,CAAEwuD,UAAWrH,EAAI19C,gBAAiBy+C,MAAOf,EAAIr4D,YAEnDq4D,EAAIO,GAAG,KACPJ,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,OAAQo8H,EAAI13G,OAAOy9C,WACnBhwC,WAAY,uBAGhBsqG,MAAOL,EAAI13G,OAAOg/G,kBAClB9G,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAI13G,OAAOsjE,cAC3C/S,GAAI,CAAEwuD,UAAWrH,EAAI59C,oBAAqB2+C,MAAOf,EAAIl6D,YAEvDk6D,EAAIO,GAAG,KACPP,EAAI13G,OAAOi/G,uBACPpH,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI13G,OAAOy9C,WAClBhwC,WAAY,sBAGhBsqG,MAAOL,EAAI13G,OAAOk/G,qBAClBhH,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAI13G,OAAOwjE,aAC3CjT,GAAI,CAAEwuD,UAAWrH,EAAI19C,gBAAiBy+C,MAAOf,EAAIh4D,eAEnDg4D,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI13G,OAAOm/G,wBACPtH,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI13G,OAAOy9C,WAClBhwC,WAAY,sBAGhBsqG,MAAOL,EAAI13G,OAAOo/G,sBAClBlH,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAI13G,OAAOujE,cAC3ChT,GAAI,CAAEwuD,UAAWrH,EAAI19C,gBAAiBy+C,MAAOf,EAAIl4D,oBAEnDk4D,EAAIa,QAGR92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAEmE,YAAa,6BACftE,EAAIY,GAAGZ,EAAIj9F,IAAIzb,UAAU,SAAS0V,GAChC,OAAOA,EAAQrsB,QACXwvH,EAAG,iBAAkB,CACnBv6H,IAAKo3B,EAAQ6tB,QACbyM,MAAO,CACLvjC,YAAaiJ,EAAQjJ,YACrBG,aAAc8I,EAAQ9I,aACtByzG,UAAW3qG,EAAQ6Z,YACnB+wF,SAAU,EACVC,WAAY,EACZ51G,MAAO+K,EAAQ6Z,YACfprB,SAAUuR,EAAQvR,SAClBC,SAAUsR,EAAQtR,SAClB8wG,QAAS,gBAEXgE,MAAO,CACLzzG,GAAIiQ,EAAQjQ,GACZ22G,KAAM1mG,EAAQ8qG,SACd,kBAAmB9qG,EAAQhN,SAAWgN,EAAQinG,YAAc,KAC5DngI,KAAMk5B,EAAQl5B,KACdk5B,QAASA,EACT1U,OAAQ03G,EAAI13G,OACZ8I,IAAK4uG,EAAI5uG,OAGb4uG,EAAIa,UAIV92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2lE,cAAgB,CAChE8oC,EAAG,WAAY,CACbA,EAAG,SAAU,CACXK,MAAO,CAAE,aAAcR,EAAIrgH,SAASqR,SAASC,gBAE/C+uG,EAAIO,GAAG,KACPJ,EAAG,QAAS,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MAAQ,CACnDm9H,EAAIrgH,SAASivC,WACTuxE,EAAG,QAAS,CACVA,EACE,KACA,CACEA,EAAG,KAAM,CACPqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIrgH,SAASoxG,QACpBh7F,WAAY,uBAIlBiqG,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASsvC,gBAAgB,SAAS1qB,GAC3C,OAAO47F,EACL,KACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW4lE,YACjC,CACE6oC,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAWt9F,EAAOxD,YAG/B,OAIN,KAGJi/F,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EACE,QACAH,EAAIY,GAAGZ,EAAIrgH,SAAS0uC,aAAa,SAAStrB,EAAKooB,GAC7C,OAAOg1E,EACL,KACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWqR,KACjC,CACEo9F,EACE,KACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIrgH,SAASoxG,QACpBh7F,WAAY,qBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWsT,MAEjC,CAACm7F,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW9+F,EAAIhC,YAC/C,GAEFi/F,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASsvC,gBAAgB,SAClC1qB,EACAwjG,GAEA,OAAO/H,EAAIrgH,SAASmhE,YAChBq/C,EACE,KACA,CACEE,MACEL,EAAI/kD,aAAal4C,EAAKwB,GACtB,IACAy7F,EAAIrgH,SAAS+R,WAAWsT,KAC1B6zC,GAAI,CACFkoD,MAAO,WACLf,EAAI7+C,UAAUp+C,EAAKwB,MAIzB,CACE47F,EAAG,OAAQ,CACTH,EAAIO,GACFP,EAAIiB,GACFjB,EAAIrgH,SAASiwG,sBACX7sF,EAAIj/B,KACJygC,GACAtT,mBAMZ+uG,EAAIa,QAEVb,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASsvC,gBAAgB,SAClC1qB,EACAwjG,GAEA,OAAQ/H,EAAIrgH,SAASmhE,YAwFjBk/C,EAAIa,KAvFJV,EACE,KACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWsT,KAC/Bw7F,MAAO,CAAEiE,QAASlgG,EAAOxD,QAAQ9P,cACjC4nD,GAAI,CACFkoD,MAAO,WACLf,EAAI7+C,UAAUp+C,EAAKwB,MAIzB,CACE47F,EACE,QACA,CAAEE,MAAOL,EAAI/kD,aAAal4C,EAAKwB,IAC/B,CACE47F,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOm/B,EAAIn/B,MACXmyB,WAAY,cAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWoU,UAC/B06F,MAAO,CACL13H,KAAM,QACNhF,KAAMi/B,EAAIosF,SACV5oF,SAAUy5F,EAAIrgH,SAAS8I,WACvBsE,GACEizG,EAAIrgH,SAASkV,QACb,IACAkO,EAAIj/B,KACJ,IACAikI,EACF,gBAAiB/H,EAAIrgH,SAASjT,WAC9B,aACEszH,EAAIrgH,SAASqR,SAASC,cAE1B+vG,SAAU,CACRp9H,MAAO2gC,EAAO3gC,MACdq2E,QAAS+lD,EAAIuC,GAAGx/F,EAAIn/B,MAAO2gC,EAAO3gC,QAEpCi1E,GAAI,CACFkoD,MAAO,SAASkB,GACdl/F,EAAIn/B,MAAQ2gC,EAAO3gC,UAIzBo8H,EAAIO,GAAG,KACPJ,EACE,OACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAW2S,mBAE5B,CACE87F,EACE,MACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAWyS,cAC1Bq8F,MAAO,CAAEwD,QAAS,kBAEpB,CACE7D,EAAG,SAAU,CACXK,MAAO,CAAE16H,EAAG,IAAKymG,GAAI,IAAKE,GAAI,WAMxCuzB,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEmE,YAAa,WAC1BtE,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEmE,YAAa,UAC1BtE,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAE7oE,MAAO,CAAEklE,QAAS,SAAY,CACzCwD,EAAIO,GACFP,EAAIiB,GAAGjB,EAAIrgH,SAASqR,SAASC,yBAUjD,cAQVlnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,QACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjCm9H,EAAIY,GAAGZ,EAAIrgH,SAASqwG,WAAW,SAASjtF,EAAKilG,GAC3C,OAAO7H,EACL,KACA,CACEv6H,IAAKo6H,EAAIrgH,SAASkV,QAAU,SAAWmzG,EACvC3H,MAAOL,EAAIrgH,SAAS+R,WAAWqR,KAEjC,CACEi9F,EAAIY,GAAG79F,GAAK,SAAStwB,GACnB,MAAO,CACL0tH,EACE,KACA,CACEv6H,IAAK,QAAU6M,EAAKyhH,OAAOnnG,GAC3BszG,MACEL,EAAIrgH,SAAS+R,WAAWmU,UACxB,IACAm6F,EAAIrgH,SAAS+R,WAAWsT,MAE5B,CACEvyB,EAAKyhH,OAAOiQ,0BACZ1xH,EAAKyhH,OAAOgQ,qBACR/D,EACE,OACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWiJ,cACjC,CAACqlG,EAAIO,GAAGP,EAAIiB,GAAGxuH,EAAKyhH,OAAOv5F,iBAE7BqlG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAWpvH,EAAKue,YAC/CgvG,EAAIO,GAAG,KACP9tH,EAAKyhH,OAAOkQ,wBACRjE,EACE,OACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWiJ,cACjC,CAACqlG,EAAIO,GAAGP,EAAIiB,GAAGxuH,EAAKyhH,OAAOv5F,iBAE7BqlG,EAAIa,MAEV,GAEFb,EAAIO,GAAG,KACPJ,EACE,KACA,CACEv6H,IAAK6M,EAAKyhH,OAAOnnG,GACjByzG,MAAO,CAAEpvG,IAAK4uG,EAAIrgH,SAAS+R,WAAWsT,OAExC,CACEg7F,EAAI0E,eACAvE,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUlN,EAAKyhH,OAAQvkG,SAAU,SAE5CqwG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAGH,EAAIlkD,uBAAuBrpE,EAAKyhH,QAAS,CAC1CgP,IAAK,YACL1C,MAAO,CAAE7gH,SAAUlN,EAAKyhH,UAE1B8L,EAAIO,GAAG,KACPP,EAAI6E,kBACA1E,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUlN,EAAKyhH,OAAQvkG,SAAU,YAE5CqwG,EAAIa,MAEV,QAKR,QAKJ92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOD,EAAIrgH,SAASlP,UAChB0vH,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMrZ,UACrCytC,MAAO0oE,EAAIuB,WAEb,CACEpB,EACE,KACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAIhwG,SACX+F,WAAY,aAGhBsqG,MAAOL,EAAIxgD,gBACX3G,GAAI,CAAEkoD,MAAOf,EAAIzgD,iBAEnB,CACE4gD,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASqR,YAEnCgvG,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CACTqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MAAOo8H,EAAI8B,SACX/rG,WAAY,aAGhBsqG,MAAOL,EAAI+B,WAGf,GAEF/B,EAAIO,GAAG,KACPJ,EACE,MACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWwR,MAAMtrB,aACvC,CACEuoH,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIrgH,SAASq3G,mBAGrC,GAEFgJ,EAAIO,GAAG,KACPJ,EAAG,gBAAiB,CAAEK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAC7CqgH,EAAIO,GAAG,KACPJ,EACE,UACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,OAAQo8H,EAAIhiF,YACZjoB,WAAY,iBAGhBuhC,MAAO,CAAEvjC,YAAaisG,EAAIrgH,SAASu+B,mBAErC,CACEiiF,EAAG,0BAA2B,CAC5BK,MAAO,CAAErgD,KAAM6/C,EAAIiI,SAAU/kG,MAAO88F,EAAIrgH,SAAUyR,IAAK,UAG3D,IAGJ,GAEF4uG,EAAIa,MAEN92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAEE,MAAOL,EAAIxjD,aAAawjD,EAAIhjG,UAC9B,CACEgjG,EAAIhjG,QAAQkrG,kBACR/H,EAAG,wBAAyB,CAAEK,MAAO,CAAExjG,QAASgjG,EAAIhjG,WACpDgjG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EACE,MACA,CAAEE,MAAOL,EAAItjD,gBAAgBsjD,EAAIhjG,UACjC,CACEgjG,EAAI0E,eACAvE,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUqgH,EAAIhjG,QAASrN,SAAU,SAE5CqwG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAGH,EAAIlkD,uBAAuBkkD,EAAIhjG,SAAU,CAC1CkmG,IAAK,YACL1C,MAAO,CAAE7gH,SAAUqgH,EAAIhjG,QAAS5L,IAAK4uG,EAAI5uG,OAE3C4uG,EAAIO,GAAG,KACPP,EAAIhjG,QAAQ3H,WACR8qG,EACE,MACA,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAWsR,WAChC,CACEm9F,EAAG,MAAO,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIhjG,QAAQmrG,gBACrCnI,EAAIO,GAAG,KACPJ,EAAG,sBAAuB,CACxBK,MAAO,CACL+D,aAAcvE,EAAI5uG,IAAIiG,QACtB1X,SAAUqgH,EAAIhjG,YAIpB,GAEFgjG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAI6E,kBACA1E,EAAG,gBAAiB,CAClBK,MAAO,CAAE7gH,SAAUqgH,EAAIhjG,QAASrN,SAAU,YAE5CqwG,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIhjG,QAAQorG,yBACRjI,EACE,MACA,CAAEE,MAAOL,EAAIhjG,QAAQtL,WAAWulE,uBAChC,CACEkpC,EAAG,gBAAiB,CAClBK,MAAO,CAAEqB,UAAW7B,EAAIhjG,QAAQg6F,mBAGpC,GAEFgJ,EAAIa,MAEV,GAEFb,EAAIO,GAAG,KACPP,EAAIhjG,QAAQxK,iBACR2tG,EAAG,wBAAyB,CAAEK,MAAO,CAAExjG,QAASgjG,EAAIhjG,WACpDgjG,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAE7oE,MAAO,CAAE+pE,UAAWrB,EAAIrgH,SAAS2hH,iBAAmB,SAAW,KACjE,CACEtB,EAAIrgH,SAAS0oH,cACTlI,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWoQ,QAAU,CACnDq+F,EACE,SACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAWwT,OACxB,IACA86F,EAAIrgH,SAAS+R,WAAWyT,UAC1Bq7F,MAAO,CAAE13H,KAAM,UACf+vE,GAAI,CAAEkoD,MAAOf,EAAIj+C,cAEnB,CACEo+C,EAAG,OAAQ,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS2oH,eACvCtI,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2T,cAIlD26F,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,qBAAsB,CAAEK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAClDqgH,EAAIO,GAAG,KACPP,EAAIrgH,SAAS4oH,iBACTpI,EAAG,MAAO,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAWoQ,QAAU,CACnDq+F,EACE,SACA,CACEE,MACEL,EAAIrgH,SAAS+R,WAAWwT,OACxB,IACA86F,EAAIrgH,SAAS+R,WAAWyT,UAC1Bq7F,MAAO,CAAE13H,KAAM,UACf+vE,GAAI,CAAEkoD,MAAOf,EAAIj+C,cAEnB,CACEo+C,EAAG,OAAQ,CAACH,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAIrgH,SAAS2oH,eACvCtI,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2T,cAIlD26F,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,OACA,CAAE7oE,MAAO0oE,EAAI1oE,OACb,CACG0oE,EAAIrgH,SAeDqgH,EAAIa,KAdJV,EACEH,EAAItgD,QACJ,CAAEwjD,IAAK,aACP,CACElD,EAAIY,GAAGZ,EAAIrgD,OAAO,SAAS6oD,GACzB,OAAOrI,EAAG,0BAA2B,CACnCv6H,IAAK4iI,EAAO3hH,UACZ25G,MAAO,CAAErgD,KAAMqoD,EAAQtlG,MAAO88F,EAAI98F,MAAO9R,IAAK,YAGlD4uG,EAAIO,GAAG,SAAWP,EAAIiB,GAAGjB,EAAIvwH,MAAQ,SAEvC,GAGNuwH,EAAIO,GAAG,KACLP,EAAIrgH,SACFwgH,EACE,OACA,CACEA,EAAG,iBAAkB,CACnBv6H,IAAKo6H,EAAIrgH,SAASkrC,QAClByM,MAAO,CACLqwE,UAAW3H,EAAIrgH,SAASk3B,YACxB+wF,SAAU,EACVC,WAAY,EACZ51G,MAAO+tG,EAAIrgH,SAASk3B,YACpBprB,SAAUu0G,EAAIrgH,SAAS8L,SACvBC,SAAUs0G,EAAIrgH,SAAS+L,UAEzB80G,MAAO,CACLzzG,GAAIizG,EAAIrgH,SAASoN,GACjBiQ,QAASgjG,EAAIrgH,SACb2I,OAAQ03G,EAAI13G,OACZ8I,IAAK4uG,EAAI5uG,QAIf,GAEF4uG,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACEm9H,EAAIrgH,SAAS2jE,qBACT68C,EAAG,8BAA+B,CAChCK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAEzBqgH,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIyI,gBAAgB,SAASvlG,GAClC,OAAOi9F,EACL,MACA,CAAEv6H,IAAKs9B,EAAMnW,IACb,CACEozG,EAAG,eAAgB,CAAEK,MAAO,CAAE7gH,SAAUujB,EAAO9R,IAAK4uG,EAAI5uG,OACxD4uG,EAAIO,GAAG,KACPJ,EAAG,4BAA6B,CAC9BK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,SAAUujB,MAAOA,KAE1C88F,EAAIO,GAAG,KACPJ,EAAG,KAAM,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW0lE,aAE5C,MAGJ4oC,EAAIO,GAAG,KACPP,EAAIrgH,SAAS+oH,wBACTvI,EAAG,8BAA+B,CAChCK,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAEzBqgH,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIrgH,SAASojE,kBAAoBi9C,EAAIrgH,SAAS24G,YAC1C6H,EAAG,QAAS,CACVE,MAAOL,EAAI98C,gBAAgB88C,EAAIrgH,UAC/B6gH,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAIrgH,SAASunH,cAC7CruD,GAAI,CAAEkoD,MAAOf,EAAI/8C,iBAEnB+8C,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEA,EAAG,QAAS,CAAEE,MAAOL,EAAInrF,cAAcmrF,EAAIvtH,OAAS,CAClDutH,EAAIvtH,MAAQutH,EAAIrgH,SAAS2pG,cACrB6W,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAI1kD,cACXvlD,WAAY,kBAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwS,YAC/Bs8F,MAAO,CACL13H,KAAM,WACNhF,KAAMk8H,EAAIrgH,SAAS7b,KACnBipB,GAAIizG,EAAIrgH,SAASkV,QAAU,IAAMmrG,EAAIlrH,MACrCyxB,SAAUy5F,EAAIrgH,SAAS8I,WACvB,gBAAiBu3G,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIvtH,KAAKsuB,QAAQ9P,aAC/B,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CACRp9H,MAAOo8H,EAAI1kD,cACXrB,QAAS9zE,MAAMoC,QAAQy3H,EAAI1kD,eACvB0kD,EAAI56G,GAAG46G,EAAI1kD,cAAe0kD,EAAI1kD,gBAAkB,EAChD0kD,EAAI1kD,eAEVzC,GAAI,CACFkoD,MAAO,SAASkB,GACd,IAAIC,EAAMlC,EAAI1kD,cACZ6mD,EAAOF,EAAO98H,OACdi9H,IAAMD,EAAKloD,QACb,GAAI9zE,MAAMoC,QAAQ25H,GAAM,CACtB,IAAIG,EAAMrC,EAAI1kD,cACZgnD,EAAMtC,EAAI56G,GAAG88G,EAAKG,GAChBD,EACFE,EAAM,IAAMtC,EAAI1kD,cAAgB4mD,EAAIx2H,OAAO22H,IAE3CC,GAAO,IACJtC,EAAI1kD,cAAgB4mD,EAClB/tH,MAAM,EAAGmuH,GACT52H,OAAOw2H,EAAI/tH,MAAMmuH,EAAM,UAG9BtC,EAAI1kD,cAAgB8mD,MAK5BpC,EAAIa,KACRb,EAAIO,GAAG,KACPP,EAAIvtH,MAAQutH,EAAIrgH,SAAS2pG,cACrB6W,EAAG,QAAS,CACVqB,WAAY,CACV,CACE19H,KAAM,QACN29H,QAAS,UACT79H,MAAOo8H,EAAIrgH,SAASywB,cACpBra,WAAY,2BAGhBsqG,MAAOL,EAAIrgH,SAAS+R,WAAWwS,YAC/Bs8F,MAAO,CACL13H,KAAM,WACNhF,KAAMk8H,EAAIrgH,SAAS7b,KACnBipB,GAAIizG,EAAIrgH,SAASkV,QAAU,IAAMmrG,EAAIlrH,MACrCyxB,SAAUy5F,EAAIrgH,SAAS8I,aAAeu3G,EAAIvtH,KAAK42B,UAC/C,gBAAiB22F,EAAIrgH,SAASjT,WAC9B,aAAcszH,EAAIvtH,KAAKsuB,QAAQ9P,aAC/B,eAAgB+uG,EAAIrgH,SAASzH,OAAO7S,OAAS,EAC7C,mBACE26H,EAAIrgH,SAASzH,OAAO7S,OAAS,EACzB26H,EAAIrgH,SAASoN,GAAK,UAClB,MAERi0G,SAAU,CACRp9H,MAAOo8H,EAAIvtH,KAAK7O,MAChBq2E,QAAS9zE,MAAMoC,QAAQy3H,EAAIrgH,SAASywB,eAChC4vF,EAAI56G,GAAG46G,EAAIrgH,SAASywB,cAAe4vF,EAAIvtH,KAAK7O,QAAU,EACtDo8H,EAAIrgH,SAASywB,eAEnByoC,GAAI,CACFkoD,MAAO,SAASkB,GACd,IAAIC,EAAMlC,EAAIrgH,SAASywB,cACrB+xF,EAAOF,EAAO98H,OACdi9H,IAAMD,EAAKloD,QACb,GAAI9zE,MAAMoC,QAAQ25H,GAAM,CACtB,IAAIG,EAAMrC,EAAIvtH,KAAK7O,MACjB0+H,EAAMtC,EAAI56G,GAAG88G,EAAKG,GAChBD,EACFE,EAAM,IAAMtC,EAAIrgH,SAASywB,cAAgB8xF,EAAIx2H,OAAO22H,IAEpDC,GAAO,IACJtC,EAAIrgH,SAASywB,cAAgB8xF,EAC3B/tH,MAAM,EAAGmuH,GACT52H,OAAOw2H,EAAI/tH,MAAMmuH,EAAM,UAG9BtC,EAAIrgH,SAASywB,cAAgBgyF,MAKrCpC,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW2S,mBAAqB,CAC/D87F,EACE,MACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAWyS,cAC/Bq8F,MAAO,CAAEwD,QAAS,cAEpB,CAAC7D,EAAG,OAAQ,CAAEK,MAAO,CAAE38H,EAAG,wCAE5Bm8H,EAAIO,GAAG,KACPJ,EAAG,OAAQ,CAAEmE,YAAa,YAE5BtE,EAAIO,GAAG,KACNP,EAAI4E,UAUD5E,EAAIa,KATJV,EACE,OACA,CACEE,MAAOL,EAAIrgH,SAAS+R,WAAW0S,aAC/Bo8F,MAAO,CAAExtG,MAAOgtG,EAAIvtH,KAAKsuB,QAAQkkG,iBAEnC,CAAC9E,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW7B,EAAIvtH,KAAKsuB,YACpD,KAIRi/F,EAAIO,GAAG,KACPP,EAAIvtH,KAAK7O,OAASo8H,EAAIrgH,SAASwxB,UAAUvtC,MACrCu8H,EAAG,sBAAuB,CACxBqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,MACEo8H,EAAIrgH,SAAS2V,UACb0qG,EAAIrgH,SAASywB,eACb4vF,EAAIrgH,SAASuwB,gBACfna,WACE,4EAGNyqG,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,YAEzBqgH,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,WACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACEs9H,EAAG,SAAU,CACXK,MAAO,CAAE,aAAcR,EAAIrgH,SAASqR,SAASC,gBAE/C+uG,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASyyB,gBAAgB,SAAS3/B,EAAMqC,GACjD,OAAQkrH,EAAIrgH,SAASg1B,WAMjBqrF,EAAIa,KALJV,EAAG,uBAAwB,CACzBv6H,IAAK6M,EAAK7O,MACVy8H,MAAOL,EAAI/kD,aAAaxoE,GACxB+tH,MAAO,CAAE7gH,SAAUqgH,EAAIrgH,SAAUlN,KAAMA,EAAMqC,MAAOA,QAI5DkrH,EAAIO,GAAG,KACPP,EAAIY,GAAGZ,EAAIrgH,SAASw1B,SAAS,SAAS5Q,EAAQ0wB,GAC5C,OAAO+qE,EAAIrgH,SAASg1B,WAChBwrF,EACE,MACA,CAAEE,MAAOL,EAAIrgH,SAAS80B,kBACtBurF,EAAIY,GAAGr8F,GAAQ,SAAS9xB,EAAMqC,GAC5B,OAAOqrH,EAAG,uBAAwB,CAChCv6H,IAAK6M,EAAK7O,MACVy8H,MAAOL,EAAI/kD,aAAaxoE,GACxB+tH,MAAO,CACL7gH,SAAUqgH,EAAIrgH,SACdlN,KAAMA,EACNqC,MAAO,GAAKmgD,EAAWngD,SAK/BkrH,EAAIa,SAGZ,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAG,OAAQ,CAAEwB,YAAa,CAAEC,SAAU,WAAc,CACzD5B,EAAI6B,UAAU91F,QACVo0F,EAAG,OAAQ,CACTwB,YAAa,CAAEC,SAAU,UACzBZ,SAAU,CAAEhuB,UAAWgtB,EAAIiB,GAAGjB,EAAI6B,UAAU5wG,iBAE9CkvG,EAAG,OAAQ,CAAEwB,YAAa,CAAEC,SAAU,WAAc,CAClD5B,EAAIO,GAAGP,EAAIiB,GAAGjB,EAAI6B,UAAU5wG,oBAIlClnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EAAGH,EAAIlkD,uBAAuBkkD,EAAInkD,iBAAkB,CACzDqnD,IAAK,YACL1C,MAAO,CAAE7gH,SAAUqgH,EAAInkD,gBAAiBzqD,IAAK4uG,EAAI5uG,QAGjDrnB,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,MACA,CACEqB,WAAY,CACV,CACE19H,KAAM,OACN29H,QAAS,SACT79H,OAAQo8H,EAAIhiF,YACZjoB,WAAY,kBAIlB,CACEiqG,EAAIrgH,SAASg5G,iBAAmBqH,EAAIrgH,SAAS8I,WACzC03G,EAAG,QAAS,CACVE,MACEL,EAAIrgH,SAAS+R,WAAWwT,OACxB,IACA86F,EAAIrgH,SAAS+R,WAAW0T,aAC1Bo7F,MAAO,CAAE13H,KAAM,SAAUlF,MAAOo8H,EAAIrgH,SAASgpH,iBAC7C9vD,GAAI,CACFkoD,MAAO,SAASkB,GACdjC,EAAIz7C,iBAAiBy7C,EAAI98F,WAI/B88F,EAAIa,QAIV92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQ+B,EAAqBzB,GAE7C,aAC+BA,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOgF,KACpEzG,EAAoBQ,EAAEiB,EAAqB,KAAK,WAAa,OAAOiF,KACnG,IAAID,EAAS,WACX,IAAIk2H,EAAM/8H,KACNg9H,EAAKD,EAAIE,eACTC,EAAKH,EAAII,MAAMD,IAAMF,EACzB,OAAOE,EACL,QACA,CAAEE,MAAOL,EAAIrgH,SAAS+R,WAAW7uB,MACjC,CACEm9H,EAAIn3B,MAAMj6C,WACNuxE,EAAG,QAAS,CACVA,EACE,KACAH,EAAIY,GAAGZ,EAAIn3B,MAAM95C,UAAUpE,OAAO,SAAS3lB,GACzC,OAAOm7F,EACL,KACA,CACEv6H,IAAK,UAAYo/B,EAAKjY,GACtBszG,MAAOL,EAAIrgH,SAAS+R,WAAW4lE,WAC/BhgC,MAAO,CAAE7rC,SAAUuZ,EAAKvZ,SAAUwG,MAAO+S,EAAK/S,QAEhD,CACEkuG,EAAG,gBAAiB,CAAEK,MAAO,CAAEqB,UAAW78F,EAAKhU,aAEjD,SAKRgvG,EAAIa,KACRb,EAAIO,GAAG,KACPJ,EACE,QACAH,EAAIY,GAAGZ,EAAIn3B,MAAMvyD,MAAM,SAASvT,GAC9B,OAAOo9F,EACL,KACA,CAAEv6H,IAAKo6H,EAAIrgH,SAASkV,QAAU,IAAMkO,EAAIhW,IACxCizG,EAAIY,GAAG79F,EAAI4nB,OAAO,SAAS3lB,EAAM4jG,GAC/B,OAAOzI,EAAG,oBAAqB,CAC7Bv6H,IAAKm9B,EAAIhW,GAAK,IAAM67G,EACpBpI,MAAO,CAAEx7F,KAAMA,EAAMrlB,SAAUqgH,EAAIrgH,oBAM7CqgH,EAAIO,GAAG,KACPP,EAAIn3B,MAAMt5C,WACN4wE,EAAG,QAAS,CACVA,EACE,KACAH,EAAIY,GAAGZ,EAAIn3B,MAAM/6C,UAAUnD,OAAO,SAAS3lB,EAAM4jG,GAC/C,OAAOzI,EAAG,oBAAqB,CAC7Bv6H,IAAK,UAAYgjI,EACjBpI,MAAO,CAAEx7F,KAAMA,EAAMrlB,SAAUqgH,EAAIrgH,kBAK3CqgH,EAAIa,MAEV,IAGA92H,EAAkB,GACtBD,EAAO62H,eAAgB,GAWjB,SAAU59H,EAAQC,GAExB,IAAI6lI,EAGJA,EAAI,WACH,OAAO5lI,KADJ,GAIJ,IAEC4lI,EAAIA,GAAKhoC,SAAS,cAATA,KAA6B,EAAGioC,MAAM,QAC9C,MAAM7yF,GAEc,kBAAXxO,SACTohG,EAAIphG,QAON1kC,EAAOC,QAAU6lI,GAKX,SAAU9lI,EAAQ+B,EAAqBzB,GAE7C,aACAY,OAAOC,eAAeY,EAAqB,aAAc,CAAElB,OAAO,IAC7C,IAAImlI,EAA8C1lI,EAAoB,IAC5CA,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOikI,EAA4C,QACtH1lI,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOikI,EAA4C,QACvH1lI,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOikI,EAA4C,QACtH1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,QACnI1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,QAC7H1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,QAC/H1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,QAC7H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,QAC5H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,QAClI1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOikI,EAA4C,QACxH1lI,EAAoBQ,EAAEiB,EAAqB,QAAQ,WAAa,OAAOikI,EAA4C,QACnH1lI,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAOikI,EAA4C,QACpH1lI,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOikI,EAA4C,QAC1H1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,QAC5H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOikI,EAA4C,QAC1H1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,QAClI1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,QACrI1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,QACjI1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,QAChI1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,QAChI1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,QAC/H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,QAC/H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,QAC/H1lI,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOikI,EAA4C,QACtH1lI,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAOikI,EAA4C,QACpH1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,QAC5H1lI,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOikI,EAA4C,QACvH1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,QAC9H1lI,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOikI,EAA4C,QAC3H1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,QAC/H1lI,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOikI,EAA4C,QAC3H1lI,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOikI,EAA4C,QACxH1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,QACrI1lI,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOikI,EAA4C,QAC3H1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,QAChI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,QACnI1lI,EAAoBQ,EAAEiB,EAAqB,4BAA4B,WAAa,OAAOikI,EAA4C,QACvI1lI,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOikI,EAA4C,QACzH1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,QACjI1lI,EAAoBQ,EAAEiB,EAAqB,6BAA6B,WAAa,OAAOikI,EAA4C,QACxI1lI,EAAoBQ,EAAEiB,EAAqB,4BAA4B,WAAa,OAAOikI,EAA4C,QACvI1lI,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOikI,EAA4C,QACzH1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,QACjI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,QACnI1lI,EAAoBQ,EAAEiB,EAAqB,6BAA6B,WAAa,OAAOikI,EAA4C,SACxI1lI,EAAoBQ,EAAEiB,EAAqB,8BAA8B,WAAa,OAAOikI,EAA4C,SACzI1lI,EAAoBQ,EAAEiB,EAAqB,mCAAmC,WAAa,OAAOikI,EAA4C,SAC9I1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,SACrI1lI,EAAoBQ,EAAEiB,EAAqB,+BAA+B,WAAa,OAAOikI,EAA4C,SAC1I1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,SACpI1lI,EAAoBQ,EAAEiB,EAAqB,8BAA8B,WAAa,OAAOikI,EAA4C,SACzI1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,SAC7H1lI,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOikI,EAA4C,SAC3H1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,SAClI1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,6BAA6B,WAAa,OAAOikI,EAA4C,UACxI1lI,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOikI,EAA4C,UACzH1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,UAC7H1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,UAC/H1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,UAC7H1lI,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOikI,EAA4C,UACxH1lI,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOikI,EAA4C,UACvH1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,UAC/H1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,UACjI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,UACnI1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,UACjI1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,UACnI1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,UAC9H1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,UAC7H1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,UAChI1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,UAChI1lI,EAAoBQ,EAAEiB,EAAqB,2BAA2B,WAAa,OAAOikI,EAA4C,UACtI1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,UAClI1lI,EAAoBQ,EAAEiB,EAAqB,2BAA2B,WAAa,OAAOikI,EAA4C,UACtI1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,UAChI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,UACnI1lI,EAAoBQ,EAAEiB,EAAqB,4BAA4B,WAAa,OAAOikI,EAA4C,UACvI1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,UACjI1lI,EAAoBQ,EAAEiB,EAAqB,6BAA6B,WAAa,OAAOikI,EAA4C,UACxI1lI,EAAoBQ,EAAEiB,EAAqB,6BAA6B,WAAa,OAAOikI,EAA4C,UACxI1lI,EAAoBQ,EAAEiB,EAAqB,4BAA4B,WAAa,OAAOikI,EAA4C,UACvI1lI,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOikI,EAA4C,UAC1H1lI,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOikI,EAA4C,UAC1H1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,UAC5H1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,UACnI1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,UACrI1lI,EAAoBQ,EAAEiB,EAAqB,8BAA8B,WAAa,OAAOikI,EAA4C,UACzI1lI,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOikI,EAA4C,UACtH1lI,EAAoBQ,EAAEiB,EAAqB,qBAAqB,WAAa,OAAOikI,EAA4C,UAChI1lI,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAOikI,EAA4C,UAC/H1lI,EAAoBQ,EAAEiB,EAAqB,mBAAmB,WAAa,OAAOikI,EAA4C,UAC9H1lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOikI,EAA4C,UAC7H1lI,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOikI,EAA4C,UACjI1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,UAC5H1lI,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOikI,EAA4C,UACnI1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,UACrI1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,UAClI1lI,EAAoBQ,EAAEiB,EAAqB,0BAA0B,WAAa,OAAOikI,EAA4C,UACrI1lI,EAAoBQ,EAAEiB,EAAqB,yBAAyB,WAAa,OAAOikI,EAA4C,UACpI1lI,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOikI,EAA4C,UAClI1lI,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAOikI,EAA4C,UAC7F1lI,EAAoB,IAA7E,IACI2lI,EAAgD3lI,EAAoB,GAC9CA,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOkkI,EAA8C,QACzH3lI,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOkkI,EAA8C,QAC1H3lI,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOkkI,EAA8C,QAC3H3lI,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAOkkI,EAA8C,QACzJ,IAAI/jD,EAAwD5hF,EAAoB,IACpEA,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOmgF,EAAsD,QAClI5hF,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOmgF,EAAsD,QACvJ,IAAIgkD,EAAyD5lI,EAAoB,IACrEA,EAAoBQ,EAAEiB,EAAqB,uBAAuB,WAAa,OAAOmkI,EAAuD,QACzJ,IAAIC,EAAiE7lI,EAAoB,IAC7EA,EAAoBQ,EAAEiB,EAAqB,+BAA+B,WAAa,OAAOokI,EAA+D,QACzK,IAAIC,EAAsD9lI,EAAoB,IAClEA,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOqkI,EAAoD,QAC5I,IAAIC,EAAiD/lI,EAAoB,IAC7DA,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAOskI,EAA+C,QACvH/lI,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOskI,EAA+C,QACzI,IAAIC,EAAgDhmI,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAOukI,EAA8C,QACnI,IAAIC,EAAsDjmI,EAAoB,IAClEA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOwkI,EAAoD,QAC/I,IAAIC,EAAiDlmI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOykI,EAA+C,QAC1I,IAAIC,EAAkDnmI,EAAoB,KAC9DA,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAO0kI,EAAgD,QAC/I,IAAIC,EAAiDpmI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAO2kI,EAA+C,QACpI,IAAIC,EAA+CrmI,EAAoB,KAC3DA,EAAoBQ,EAAEiB,EAAqB,QAAQ,WAAa,OAAO4kI,EAA6C,QAChI,IAAIC,EAAqDtmI,EAAoB,KACjEA,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAO6kI,EAAmD,QAC5I,IAAIC,EAAyDvmI,EAAoB,KACrEA,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAO8kI,EAAuD,QACpJ,IAAIC,EAAsDxmI,EAAoB,KAClEA,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAO+kI,EAAoD,QAC9I,IAAIC,EAAiDzmI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAOglI,EAA+C,QACpI,IAAIC,EAAkD1mI,EAAoB,IAC9DA,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOilI,EAAgD,QACtI,IAAIC,EAAmD3mI,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOklI,EAAiD,QACxI,IAAIC,EAAuD5mI,EAAoB,IACnEA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOmlI,EAAqD,QAChJ,IAAIC,EAA+C7mI,EAAoB,KAC3DA,EAAoBQ,EAAEiB,EAAqB,QAAQ,WAAa,OAAOolI,EAA6C,QAChI,IAAIC,EAAkD9mI,EAAoB,IAC9DA,EAAoBQ,EAAEiB,EAAqB,WAAW,WAAa,OAAOqlI,EAAgD,QACtI,IAAIC,EAAgD/mI,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAOslI,EAA8C,QAClI,IAAIC,EAAuDhnI,EAAoB,KACnEA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOulI,EAAqD,QAChJ,IAAIC,EAAiDjnI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAOwlI,EAA+C,QACpI,IAAIC,EAAmDlnI,EAAoB,IAC/DA,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOylI,EAAiD,QACxI,IAAIC,EAA+CnnI,EAAoB,KAC3DA,EAAoBQ,EAAEiB,EAAqB,QAAQ,WAAa,OAAO0lI,EAA6C,QAChI,IAAIC,EAAqDpnI,EAAoB,KACjEA,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAO2lI,EAAmD,QAC5I,IAAIC,EAAsDrnI,EAAoB,KAClEA,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAO4lI,EAAoD,QAC9I,IAAIC,EAAyDtnI,EAAoB,KACrEA,EAAoBQ,EAAEiB,EAAqB,kBAAkB,WAAa,OAAO6lI,EAAuD,QACpJ,IAAIC,EAAwDvnI,EAAoB,KACpEA,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAO8lI,EAAsD,QAClJ,IAAIC,EAAiDxnI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAO+lI,EAA+C,QACpI,IAAIC,EAA+CznI,EAAoB,KAC3DA,EAAoBQ,EAAEiB,EAAqB,QAAQ,WAAa,OAAOgmI,EAA6C,QAChI,IAAIC,EAAqD1nI,EAAoB,KACjEA,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOimI,EAAmD,QAC5I,IAAIC,EAAsD3nI,EAAoB,KAClEA,EAAoBQ,EAAEiB,EAAqB,eAAe,WAAa,OAAOkmI,EAAoD,QAC9I,IAAIC,EAAuD5nI,EAAoB,KACnEA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOmmI,EAAqD,QAChJ,IAAIC,EAA6D7nI,EAAoB,KACzEA,EAAoBQ,EAAEiB,EAAqB,sBAAsB,WAAa,OAAOomI,EAA2D,QAC5J,IAAIC,EAA+D9nI,EAAoB,KAC3EA,EAAoBQ,EAAEiB,EAAqB,wBAAwB,WAAa,OAAOqmI,EAA6D,QAChK,IAAIC,EAAqD/nI,EAAoB,KACjEA,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOsmI,EAAmD,QAC5I,IAAIC,EAAmDhoI,EAAoB,KAC/DA,EAAoBQ,EAAEiB,EAAqB,YAAY,WAAa,OAAOumI,EAAiD,QACxI,IAAIC,EAAqDjoI,EAAoB,KACjEA,EAAoBQ,EAAEiB,EAAqB,cAAc,WAAa,OAAOwmI,EAAmD,QAC5I,IAAIC,EAAgDloI,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAOymI,EAA8C,QAClI,IAAIC,EAAoDnoI,EAAoB,KAChEA,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAO0mI,EAAkD,QAC1I,IAAIC,EAA2DpoI,EAAoB,KACvEA,EAAoBQ,EAAEiB,EAAqB,oBAAoB,WAAa,OAAO2mI,EAAyD,QACxJ,IAAIC,EAA8CroI,EAAoB,KAC1DA,EAAoBQ,EAAEiB,EAAqB,OAAO,WAAa,OAAO4mI,EAA4C,QAC9H,IAAIC,EAAwDtoI,EAAoB,KACpEA,EAAoBQ,EAAEiB,EAAqB,iBAAiB,WAAa,OAAO6mI,EAAsD,QAClJ,IAAIC,EAAgDvoI,EAAoB,KAC5DA,EAAoBQ,EAAEiB,EAAqB,SAAS,WAAa,OAAO8mI,EAA8C,QAClI,IAAIC,EAAuDxoI,EAAoB,KACnEA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAO+mI,EAAqD,QAChJ,IAAIC,EAAiDzoI,EAAoB,KAC7DA,EAAoBQ,EAAEiB,EAAqB,gBAAgB,WAAa,OAAOgnI,EAA+C,QAC1I,IAAIC,EAAiD1oI,EAAoB,IAC7DA,EAAoBQ,EAAEiB,EAAqB,UAAU,WAAa,OAAOinI,EAA+C,QACpI,IAAIC,EAAoD3oI,EAAoB,IAChEA,EAAoBQ,EAAEiB,EAAqB,aAAa,WAAa,OAAOknI,EAAkD,e,2CC9/9C/J,ICcIC,EDdAniI,EAAS,WAAa,IAAIk2H,EAAI/8H,KAASg9H,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACmE,YAAY,mBAAmB,CAAEtE,EAAc,WAAEG,EAAG,SAAS,CAACK,MAAM,CAAC,OAASR,EAAI13G,UAAU03G,EAAIa,KAAOb,EAAIkM,WAA2DlM,EAAIa,KAAnDV,EAAG,MAAM,CAACA,EAAG,IAAI,CAACH,EAAIO,GAAG,uBAAgC,IACtRx2H,EAAkB,G,wBCWlBoiI,EAAa,CAAjB,kEACI7jH,EAAS,IAAI,EAAjB,YAEA,wBACA,kBAMA,2CAEA,IAAI8jH,EAAQ,CACVrpG,IAAK,CAAP,0BAAE,iBAAF,iBAEA,WAEA,OACEj/B,KAAM,UACN27H,OAAQ,CAAC4M,EAAX,MACE3kH,KAHF,WAII,MAAO,CACLY,OAAQA,EACR4jH,YAAY,IAGhB3M,QAAS,CACP+M,YADJ,SACA,KACM,IAAIC,EAAc,CAChB,aAAgBtpI,KAAKupI,aACrB,KAAQ5pH,EAAO8E,MAEjBm3G,QAAQ19F,IAAIorG,GACZtpI,KAAKwpI,MAAMC,IAAI,qDAArB,2BACA,kBACQ,QAAR,UAEA,mBACQ,QAAR,YAIEhtH,QAAS,WAAX,WAEI,GAAIzc,KAAK0pI,gBACb,CACM,IAAIC,EAAM,uCAChB,wBAEQA,EAAM3pI,KAAK4pI,OAAO7oF,OAAOj3B,IAI3B9pB,KAAKwpI,MAAMpoI,IAAI,2CAArB,6CACQ,OAAOk9B,KAEf,kBACQ,GAAmB,MAAf55B,EAAI25B,OAChB,CACU,EAAV,cAGU,EAAV,yCACU,EAAV,oBACU,EAAV,iCACUu9F,QAAQ19F,IAAIx5B,EAAI+f,MAChBukH,EAAU,EACV,EAAV,qCACYA,EAAQK,YAAY1pH,EAAQ/Z,UAIxC,mBACQg2H,QAAQ19F,IAAIxoB,SCrF4U,I,YCO5VoiE,EAAY,eACd,EACAjxE,EACAC,GACA,EACA,KACA,KACA,MAIa,aAAAgxE,E,6FClBFsxD,EAAa,CACxB9M,QAAS,CACPoN,cADO,WAGL,GADA9N,QAAQ19F,IAAI,iBAC2B,MAAnCl+B,KAAK6pI,cAAczoI,IAAI,SAGzB,OADApB,KAAK8pI,QAAQ98H,QAAQ,WACd,EAET,IAAI+8H,EAAiB/pI,KAAK6pI,cAAczoI,IAAI,mBAC5C,GAAuB,OAAnB2oI,EAGF,OADA/pI,KAAK8pI,QAAQ98H,QAAQ,WACd,EAGP,IAAIg9H,EAAuB,IAAI9nF,KAAK6nF,GAChCjnF,EAAc,IAAIZ,KACtB,QAAI8nF,EAAuBlnF,KAEzB9iD,KAAK8pI,QAAQ98H,QAAQ,WACd,IAKbi9H,YAzBO,WA0BP,OAAyC,MAArCjqI,KAAK6pI,cAAczoI,IAAI,YAO3B8oI,iBAjCO,WAkCL,MAAO,CACL1I,QAAS,CAAC,cAAiB,UAAYxhI,KAAK6pI,cAAczoI,IAAI","file":"js/chunk-3fff0e0a.3badd295.js","sourcesContent":["/*!\n * surveyjs - Survey JavaScript library v1.7.20\n * Copyright (c) 2015-2020 Devsoft Baltic OÜ - http://surveyjs.io/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Survey\", [\"vue\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Survey\"] = factory(require(\"vue\"));\n\telse\n\t\troot[\"Survey\"] = factory(root[\"Vue\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 244);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __assign; });\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = __extends;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return __decorate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return __spreadArrays; });\nvar __assign = Object[\"assign\"] ||\n function (target) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n target[p] = s[p];\n }\n return target;\n };\nfunction __extends(thisClass, baseClass) {\n for (var p in baseClass)\n if (baseClass.hasOwnProperty(p))\n thisClass[p] = baseClass[p];\n function __() {\n this.constructor = thisClass;\n }\n thisClass.prototype =\n baseClass === null\n ? Object.create(baseClass)\n : ((__.prototype = baseClass.prototype), new __());\n}\nvar __decorate = function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3\n ? target\n : desc === null\n ? (desc = Object.getOwnPropertyDescriptor(target, key))\n : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if ((d = decorators[i]))\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArrays = function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_english__ = __webpack_require__(78);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return surveyLocalization; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return surveyStrings; });\n\nvar surveyLocalization = {\n currentLocaleValue: \"\",\n defaultLocaleValue: \"en\",\n locales: {},\n localeNames: {},\n supportedLocales: [],\n get currentLocale() {\n return this.currentLocaleValue === this.defaultLocaleValue\n ? \"\"\n : this.currentLocaleValue;\n },\n set currentLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.currentLocaleValue = val;\n },\n get defaultLocale() {\n return this.defaultLocaleValue;\n },\n set defaultLocale(val) {\n if (val === \"cz\")\n val = \"cs\";\n this.defaultLocaleValue = val;\n },\n getLocaleStrings: function (loc) {\n return this.locales[loc];\n },\n getCurrentStrings: function () {\n var loc = this.currentLocale\n ? this.locales[this.currentLocale]\n : this.locales[this.defaultLocale];\n if (!loc)\n loc = this.locales[this.defaultLocale];\n return loc;\n },\n getString: function (strName) {\n var loc = this.getCurrentStrings();\n if (!loc[strName])\n loc = this.locales[this.defaultLocale];\n var result = loc[strName];\n if (result === undefined) {\n result = this.locales[\"en\"][strName];\n }\n return result;\n },\n getLocales: function () {\n var res = [];\n res.push(\"\");\n if (this.supportedLocales && this.supportedLocales.length > 0) {\n for (var i = 0; i < this.supportedLocales.length; i++) {\n res.push(this.supportedLocales[i]);\n }\n }\n else {\n for (var key in this.locales) {\n res.push(key);\n }\n }\n res.sort();\n return res;\n },\n};\nvar surveyStrings = __WEBPACK_IMPORTED_MODULE_0__localization_english__[\"a\" /* englishStrings */];\nsurveyLocalization.locales[\"en\"] = __WEBPACK_IMPORTED_MODULE_0__localization_english__[\"a\" /* englishStrings */];\nsurveyLocalization.localeNames[\"en\"] = \"english\";\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Vue = _interopDefault(__webpack_require__(2));\nvar VueClassComponent = __webpack_require__(198);\nvar VueClassComponent__default = _interopDefault(VueClassComponent);\n__webpack_require__(138);\n\n/** vue-property-decorator verson 4.0.0 MIT LICENSE copyright 2017 kaorun343 */\n/**\n * decorator of an inject\n * @param key key\n * @return PropertyDecorator\n */\nfunction Inject(key) {\n return VueClassComponent.createDecorator(function (componentOptions, k) {\n if (typeof componentOptions.inject === 'undefined') {\n componentOptions.inject = {};\n }\n if (!Array.isArray(componentOptions.inject)) {\n componentOptions.inject[k] = key || k;\n }\n });\n}\n/**\n * decorator of model\n * @param event event name\n * @return PropertyDecorator\n */\nfunction Model(event) {\n return VueClassComponent.createDecorator(function (componentOptions, prop) {\n componentOptions.model = { prop: prop, event: event };\n });\n}\n/**\n * @brief Makes a decorator for prop.\n *\n * @param options The options\n * @param target The target\n * @param key The key\n *\n * @return PropertyDecorator\n */\nfunction makePropDecorator(options) {\n if (options === void 0) { options = {}; }\n return function (target, key) {\n if (!Array.isArray(options) && typeof options.type === 'undefined') {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") {\n options.type = Reflect.getMetadata('design:type', target, key);\n }\n else {\n options.type = null;\n }\n }\n VueClassComponent.createDecorator(function (componentOptions, k) {\n (componentOptions.props || (componentOptions.props = {}))[k] = options;\n })(target, key);\n };\n}\nfunction Prop(options, key) {\n if (options === void 0) { options = {}; }\n if (options instanceof Vue) {\n return makePropDecorator()(options, key);\n }\n else {\n return makePropDecorator(options);\n }\n}\n/**\n * decorator of a watch function\n * @param path the path or the expression to observe\n * @param WatchOption\n * @return MethodDecorator\n */\nfunction Watch(path, options) {\n if (options === void 0) { options = {}; }\n var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b;\n return VueClassComponent.createDecorator(function (componentOptions, handler) {\n if (typeof componentOptions.watch !== 'object') {\n componentOptions.watch = Object.create(null);\n }\n componentOptions.watch[path] = { handler: handler, deep: deep, immediate: immediate };\n });\n}\nvar prop = Prop;\nvar watch = Watch;\nvar Component = VueClassComponent__default;\n\nexports.Inject = Inject;\nexports.Model = Model;\nexports.Prop = Prop;\nexports.Watch = Watch;\nexports.prop = prop;\nexports.watch = watch;\nexports.Component = Component;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = normalizeComponent;\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n scriptExports = scriptExports || {}\n\n // ES6 modules interop\n var type = typeof scriptExports.default\n if (type === 'object' || type === 'function') {\n scriptExports = scriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles(this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return JsonObjectProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CustomPropertiesCollection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return JsonMetadataClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return JsonMetadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return JsonError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return JsonUnknownPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return JsonMissingTypeErrorBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return JsonMissingTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return JsonIncorrectTypeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return JsonRequiredPropertyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return JsonObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return Serializer; });\n\n\nvar JsonObjectProperty = /** @class */ (function () {\n function JsonObjectProperty(classInfo, name, isRequired) {\n if (isRequired === void 0) { isRequired = false; }\n this.name = name;\n this.typeValue = null;\n this.choicesValue = null;\n this.baseValue = null;\n this.isRequiredValue = false;\n this.readOnlyValue = null;\n this.visibleValue = null;\n this.isLocalizableValue = null;\n this.choicesfunc = null;\n this.dependedProperties = null;\n this.isSerializable = true;\n this.isLightSerializable = true;\n this.isCustom = false;\n this.isDynamicChoices = false; //TODO obsolete, use dependsOn attribute\n this.className = null;\n this.alternativeName = null;\n this.classNamePart = null;\n this.baseClassName = null;\n this.defaultValueValue = null;\n this.serializationProperty = null;\n this.displayName = null;\n this.category = \"\";\n this.categoryIndex = -1;\n this.visibleIndex = -1;\n this.nextToProperty = null;\n this.showMode = null;\n this.maxLength = -1;\n this.layout = null;\n this.onGetValue = null;\n this.onSetValue = null;\n this.visibleIf = null;\n this.isArray = false;\n this.classInfoValue = classInfo;\n this.isRequiredValue = isRequired;\n }\n Object.defineProperty(JsonObjectProperty.prototype, \"classInfo\", {\n get: function () {\n return this.classInfoValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"type\", {\n get: function () {\n return this.typeValue ? this.typeValue : \"string\";\n },\n set: function (value) {\n if (value === \"itemvalues\")\n value = \"itemvalue[]\";\n this.typeValue = value;\n if (this.typeValue.indexOf(\"[]\") === this.typeValue.length - 2) {\n this.isArray = true;\n this.className = this.typeValue.substr(0, this.typeValue.length - 2);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isRequired\", {\n get: function () {\n return this.isRequiredValue;\n },\n set: function (val) {\n this.isRequiredValue = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseGetValue\", {\n get: function () {\n return this.onGetValue || this.serializationProperty;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"defaultValue\", {\n get: function () {\n var result = this.defaultValueValue;\n if (!!JsonObjectProperty.getItemValuesDefaultValue &&\n JsonObject.metaData.isDescendantOf(this.className, \"itemvalue\")) {\n result = JsonObjectProperty.getItemValuesDefaultValue(this.defaultValueValue || []);\n }\n return result;\n },\n set: function (newValue) {\n this.defaultValueValue = newValue;\n },\n enumerable: true,\n configurable: true\n });\n JsonObjectProperty.prototype.isDefaultValue = function (value) {\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(this.defaultValue))\n return this.defaultValue == value;\n return ((value === false && (this.type == \"boolean\" || this.type == \"switch\")) ||\n value === \"\" ||\n __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(value));\n };\n JsonObjectProperty.prototype.getValue = function (obj) {\n if (this.onGetValue)\n return this.onGetValue(obj);\n if (this.serializationProperty && !!obj[this.serializationProperty])\n return obj[this.serializationProperty].getJson();\n return obj[this.name];\n };\n JsonObjectProperty.prototype.getPropertyValue = function (obj) {\n if (this.isLocalizable) {\n return !!obj[this.serializationProperty]\n ? obj[this.serializationProperty].text\n : null;\n }\n return this.getValue(obj);\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"hasToUseSetValue\", {\n get: function () {\n return this.onSetValue || this.serializationProperty;\n },\n enumerable: true,\n configurable: true\n });\n JsonObjectProperty.prototype.setValue = function (obj, value, jsonConv) {\n if (this.onSetValue) {\n this.onSetValue(obj, value, jsonConv);\n }\n else {\n if (this.serializationProperty && !!obj[this.serializationProperty])\n obj[this.serializationProperty].setJson(value);\n else {\n if (value && typeof value === \"string\") {\n if (this.type == \"number\") {\n value = parseInt(value);\n }\n if (this.type == \"boolean\" || this.type == \"switch\") {\n value = value.toLowerCase() === \"true\";\n }\n }\n obj[this.name] = value;\n }\n }\n };\n JsonObjectProperty.prototype.getObjType = function (objType) {\n if (!this.classNamePart)\n return objType;\n return objType.replace(this.classNamePart, \"\");\n };\n JsonObjectProperty.prototype.getClassName = function (className) {\n if (className)\n className = className.toLowerCase();\n return this.classNamePart && className.indexOf(this.classNamePart) < 0\n ? className + this.classNamePart\n : className;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"choices\", {\n /**\n * Depricated, please use getChoices\n */\n get: function () {\n return this.getChoices(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"hasChoices\", {\n get: function () {\n return !!this.choicesValue || !!this.choicesfunc;\n },\n enumerable: true,\n configurable: true\n });\n JsonObjectProperty.prototype.getChoices = function (obj, choicesCallback) {\n if (choicesCallback === void 0) { choicesCallback = null; }\n if (this.choicesValue != null)\n return this.choicesValue;\n if (this.choicesfunc != null)\n return this.choicesfunc(obj, choicesCallback);\n return null;\n };\n JsonObjectProperty.prototype.setChoices = function (value, valueFunc) {\n if (valueFunc === void 0) { valueFunc = null; }\n this.choicesValue = value;\n this.choicesfunc = valueFunc;\n };\n JsonObjectProperty.prototype.getBaseValue = function () {\n if (!this.baseValue)\n return \"\";\n if (typeof this.baseValue == \"function\")\n return this.baseValue();\n return this.baseValue;\n };\n JsonObjectProperty.prototype.setBaseValue = function (val) {\n this.baseValue = val;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"readOnly\", {\n get: function () {\n return this.readOnlyValue != null ? this.readOnlyValue : false;\n },\n set: function (val) {\n this.readOnlyValue = val;\n },\n enumerable: true,\n configurable: true\n });\n JsonObjectProperty.prototype.isVisible = function (layout, obj) {\n if (obj === void 0) { obj = null; }\n var isLayout = !this.layout || this.layout == layout;\n if (!this.visible || !isLayout)\n return false;\n if (!!this.visibleIf && !!obj)\n return this.visibleIf(obj);\n return true;\n };\n Object.defineProperty(JsonObjectProperty.prototype, \"visible\", {\n get: function () {\n return this.visibleValue != null ? this.visibleValue : true;\n },\n set: function (val) {\n this.visibleValue = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(JsonObjectProperty.prototype, \"isLocalizable\", {\n get: function () {\n return this.isLocalizableValue != null ? this.isLocalizableValue : false;\n },\n set: function (val) {\n this.isLocalizableValue = val;\n },\n enumerable: true,\n configurable: true\n });\n JsonObjectProperty.prototype.mergeWith = function (prop) {\n var valuesNames = JsonObjectProperty.mergableValues;\n for (var i = 0; i < valuesNames.length; i++) {\n this.mergeValue(prop, valuesNames[i]);\n }\n };\n JsonObjectProperty.prototype.addDependedProperty = function (name) {\n if (!this.dependedProperties) {\n this.dependedProperties = [];\n }\n if (this.dependedProperties.indexOf(name) < 0) {\n this.dependedProperties.push(name);\n }\n };\n JsonObjectProperty.prototype.getDependedProperties = function () {\n return !!this.dependedProperties ? this.dependedProperties : [];\n };\n JsonObjectProperty.prototype.mergeValue = function (prop, valueName) {\n if (this[valueName] == null && prop[valueName] != null) {\n this[valueName] = prop[valueName];\n }\n };\n JsonObjectProperty.mergableValues = [\n \"typeValue\",\n \"choicesValue\",\n \"baseValue\",\n \"readOnlyValue\",\n \"visibleValue\",\n \"isSerializable\",\n \"isLightSerializable\",\n \"isCustom\",\n \"isDynamicChoices\",\n \"isLocalizableValue\",\n \"className\",\n \"alternativeName\",\n \"layout\",\n \"classNamePart\",\n \"baseClassName\",\n \"defaultValue\",\n \"serializationProperty\",\n \"onGetValue\",\n \"onSetValue\",\n \"displayName\",\n \"category\",\n \"categoryIndex\",\n \"visibleIndex\",\n \"nextToProperty\",\n \"showMode\",\n \"dependedProperties\",\n \"visibleIf\",\n \"onPropertyEditorUpdate\",\n \"maxLength\",\n \"maxValue\",\n \"minValue\",\n ];\n return JsonObjectProperty;\n}());\n\nvar CustomPropertiesCollection = /** @class */ (function () {\n function CustomPropertiesCollection() {\n }\n CustomPropertiesCollection.addProperty = function (className, property) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className]) {\n props[className] = [];\n }\n props[className].push(property);\n };\n CustomPropertiesCollection.removeProperty = function (className, propertyName) {\n className = className.toLowerCase();\n var props = CustomPropertiesCollection.properties;\n if (!props[className])\n return;\n var properties = props[className];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name == propertyName) {\n props[className].splice(i, 1);\n break;\n }\n }\n };\n CustomPropertiesCollection.addClass = function (className, parentClassName) {\n className = className.toLowerCase();\n if (parentClassName) {\n parentClassName = parentClassName.toLowerCase();\n }\n CustomPropertiesCollection.parentClasses[className] = parentClassName;\n };\n CustomPropertiesCollection.getProperties = function (className) {\n className = className.toLowerCase();\n var res = [];\n var props = CustomPropertiesCollection.properties;\n while (className) {\n var properties = props[className];\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n }\n className = CustomPropertiesCollection.parentClasses[className];\n }\n return res;\n };\n CustomPropertiesCollection.createProperties = function (obj) {\n if (!obj || !obj.getType)\n return;\n CustomPropertiesCollection.createPropertiesCore(obj, obj.getType());\n };\n CustomPropertiesCollection.createPropertiesCore = function (obj, className) {\n var props = CustomPropertiesCollection.properties;\n if (props[className]) {\n CustomPropertiesCollection.createPropertiesInObj(obj, props[className]);\n }\n var parentClass = CustomPropertiesCollection.parentClasses[className];\n if (parentClass) {\n CustomPropertiesCollection.createPropertiesCore(obj, parentClass);\n }\n };\n CustomPropertiesCollection.createPropertiesInObj = function (obj, properties) {\n for (var i = 0; i < properties.length; i++) {\n CustomPropertiesCollection.createPropertyInObj(obj, properties[i]);\n }\n };\n CustomPropertiesCollection.createPropertyInObj = function (obj, prop) {\n if (obj[prop.name] || obj.hasOwnProperty(prop.name))\n return;\n if (prop.isLocalizable &&\n prop.serializationProperty &&\n !obj[prop.serializationProperty] &&\n obj.createCustomLocalizableObj) {\n obj.createCustomLocalizableObj(prop.name);\n var locDesc = {\n get: function () {\n return obj.getLocalizableString(prop.name);\n },\n };\n Object.defineProperty(obj, prop.serializationProperty, locDesc);\n var desc = {\n get: function () {\n return obj.getLocalizableStringText(prop.name, prop.defaultValue);\n },\n set: function (v) {\n obj.setLocalizableStringText(prop.name, v);\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n else {\n var defaultValue = prop.defaultValue;\n if (JsonObject.metaData.isDescendantOf(prop.className, \"itemvalue\") &&\n typeof obj.createNewArray === \"function\") {\n obj.createNewArray(prop.name, function (item) {\n item.locOwner = obj;\n item.ownerPropertyName = prop.name;\n });\n obj.setPropertyValue(prop.name, defaultValue);\n defaultValue = null;\n }\n if (!!obj.getPropertyValue && !!obj.setPropertyValue) {\n var desc = {\n get: function () {\n if (!!prop.onGetValue) {\n return prop.onGetValue(obj);\n }\n return obj.getPropertyValue(prop.name, defaultValue);\n },\n set: function (v) {\n if (!!prop.onSetValue) {\n prop.onSetValue(obj, v, null);\n }\n else {\n obj.setPropertyValue(prop.name, v);\n }\n },\n };\n Object.defineProperty(obj, prop.name, desc);\n }\n }\n };\n CustomPropertiesCollection.properties = {};\n CustomPropertiesCollection.parentClasses = {};\n return CustomPropertiesCollection;\n}());\n\nvar JsonMetadataClass = /** @class */ (function () {\n function JsonMetadataClass(name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n this.name = name;\n this.creator = creator;\n this.parentName = parentName;\n this.properties = null;\n name = name.toLowerCase();\n if (this.parentName) {\n this.parentName = this.parentName.toLowerCase();\n CustomPropertiesCollection.addClass(name, this.parentName);\n }\n this.properties = new Array();\n for (var i = 0; i < properties.length; i++) {\n var prop = this.createProperty(properties[i]);\n if (prop) {\n this.properties.push(prop);\n }\n }\n }\n JsonMetadataClass.prototype.find = function (name) {\n for (var i = 0; i < this.properties.length; i++) {\n if (this.properties[i].name == name)\n return this.properties[i];\n }\n return null;\n };\n JsonMetadataClass.prototype.createProperty = function (propInfo) {\n var propertyName = typeof propInfo === \"string\" ? propInfo : propInfo.name;\n if (!propertyName)\n return;\n var propertyType = null;\n var typeIndex = propertyName.indexOf(JsonMetadataClass.typeSymbol);\n if (typeIndex > -1) {\n propertyType = propertyName.substring(typeIndex + 1);\n propertyName = propertyName.substring(0, typeIndex);\n }\n var isRequired = this.getIsPropertyNameRequired(propertyName) || !!propInfo.isRequired;\n propertyName = this.getPropertyName(propertyName);\n var prop = new JsonObjectProperty(this, propertyName, isRequired);\n if (propertyType) {\n prop.type = propertyType;\n }\n if (typeof propInfo === \"object\") {\n if (propInfo.type) {\n prop.type = propInfo.type;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.default)) {\n prop.defaultValue = propInfo.default;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.isSerializable)) {\n prop.isSerializable = propInfo.isSerializable;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.isLightSerializable)) {\n prop.isLightSerializable = propInfo.isLightSerializable;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.maxLength)) {\n prop.maxLength = propInfo.maxLength;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.displayName)) {\n prop.displayName = propInfo.displayName;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.category)) {\n prop.category = propInfo.category;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.categoryIndex)) {\n prop.categoryIndex = propInfo.categoryIndex;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.nextToProperty)) {\n prop.nextToProperty = propInfo.nextToProperty;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.visibleIndex)) {\n prop.visibleIndex = propInfo.visibleIndex;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.showMode)) {\n prop.showMode = propInfo.showMode;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.maxValue)) {\n prop.maxValue = propInfo.maxValue;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.minValue)) {\n prop.minValue = propInfo.minValue;\n }\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(propInfo.isDynamicChoices)) {\n prop.isDynamicChoices = propInfo.isDynamicChoices;\n }\n if (propInfo.visible === true || propInfo.visible === false) {\n prop.visible = propInfo.visible;\n }\n if (!!propInfo.visibleIf) {\n prop.visibleIf = propInfo.visibleIf;\n }\n if (!!propInfo.onPropertyEditorUpdate) {\n prop.onPropertyEditorUpdate = propInfo.onPropertyEditorUpdate;\n }\n if (propInfo.readOnly === true) {\n prop.readOnly = true;\n }\n if (propInfo.choices) {\n var choicesFunc = typeof propInfo.choices === \"function\" ? propInfo.choices : null;\n var choicesValue = typeof propInfo.choices !== \"function\" ? propInfo.choices : null;\n prop.setChoices(choicesValue, choicesFunc);\n }\n if (!!propInfo.baseValue) {\n prop.setBaseValue(propInfo.baseValue);\n }\n if (propInfo.onGetValue) {\n prop.onGetValue = propInfo.onGetValue;\n }\n if (propInfo.onSetValue) {\n prop.onSetValue = propInfo.onSetValue;\n }\n if (propInfo.isLocalizable) {\n propInfo.serializationProperty = \"loc\" + prop.name;\n }\n if (propInfo.serializationProperty) {\n prop.serializationProperty = propInfo.serializationProperty;\n var s;\n if (prop.serializationProperty &&\n prop.serializationProperty.indexOf(\"loc\") == 0) {\n prop.isLocalizable = true;\n }\n }\n if (propInfo.isLocalizable) {\n prop.isLocalizable = propInfo.isLocalizable;\n }\n if (propInfo.className) {\n prop.className = propInfo.className;\n }\n if (propInfo.baseClassName) {\n prop.baseClassName = propInfo.baseClassName;\n }\n if (propInfo.classNamePart) {\n prop.classNamePart = propInfo.classNamePart;\n }\n if (propInfo.alternativeName) {\n prop.alternativeName = propInfo.alternativeName;\n }\n if (propInfo.layout) {\n prop.layout = propInfo.layout;\n }\n if (propInfo.dependsOn) {\n this.addDependsOnProperties(prop, propInfo.dependsOn);\n }\n }\n return prop;\n };\n JsonMetadataClass.prototype.addDependsOnProperties = function (prop, dependsOn) {\n if (Array.isArray(dependsOn)) {\n for (var i = 0; i < dependsOn.length; i++) {\n this.addDependsOnProperty(prop, dependsOn[i]);\n }\n }\n else {\n this.addDependsOnProperty(prop, dependsOn);\n }\n };\n JsonMetadataClass.prototype.addDependsOnProperty = function (prop, dependsOn) {\n var property = this.find(dependsOn);\n if (!property) {\n property = Serializer.findProperty(this.parentName, dependsOn);\n }\n if (!property)\n return;\n property.addDependedProperty(prop.name);\n };\n JsonMetadataClass.prototype.getIsPropertyNameRequired = function (propertyName) {\n return (propertyName.length > 0 &&\n propertyName[0] == JsonMetadataClass.requiredSymbol);\n };\n JsonMetadataClass.prototype.getPropertyName = function (propertyName) {\n if (!this.getIsPropertyNameRequired(propertyName))\n return propertyName;\n propertyName = propertyName.slice(1);\n return propertyName;\n };\n JsonMetadataClass.requiredSymbol = \"!\";\n JsonMetadataClass.typeSymbol = \":\";\n return JsonMetadataClass;\n}());\n\nvar JsonMetadata = /** @class */ (function () {\n function JsonMetadata() {\n this.classes = {};\n this.alternativeNames = {};\n this.childrenClasses = {};\n this.classProperties = {};\n this.classHashProperties = {};\n }\n JsonMetadata.prototype.addClass = function (name, properties, creator, parentName) {\n if (creator === void 0) { creator = null; }\n if (parentName === void 0) { parentName = null; }\n name = name.toLowerCase();\n var metaDataClass = new JsonMetadataClass(name, properties, creator, parentName);\n this.classes[name] = metaDataClass;\n if (parentName) {\n parentName = parentName.toLowerCase();\n var children = this.childrenClasses[parentName];\n if (!children) {\n this.childrenClasses[parentName] = [];\n }\n this.childrenClasses[parentName].push(metaDataClass);\n }\n return metaDataClass;\n };\n JsonMetadata.prototype.removeClass = function (name) {\n var metaClass = this.findClass(name);\n if (!metaClass)\n return;\n delete this.classes[metaClass.name];\n if (!!metaClass.parentName) {\n var index = this.childrenClasses[metaClass.parentName].indexOf(metaClass);\n if (index > -1) {\n this.childrenClasses[metaClass.parentName].splice(index, 1);\n }\n }\n };\n JsonMetadata.prototype.overrideClassCreatore = function (name, creator) {\n this.overrideClassCreator(name, creator);\n };\n JsonMetadata.prototype.overrideClassCreator = function (name, creator) {\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (metaDataClass) {\n metaDataClass.creator = creator;\n }\n };\n JsonMetadata.prototype.getProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return [];\n var properties = this.classProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classProperties[metaClass.name];\n };\n JsonMetadata.prototype.getHashProperties = function (className) {\n var metaClass = this.findClass(className);\n if (!metaClass)\n return {};\n var properties = this.classHashProperties[metaClass.name];\n if (!!properties)\n return properties;\n this.fillPropertiesForClass(metaClass.name);\n return this.classHashProperties[metaClass.name];\n };\n JsonMetadata.prototype.fillPropertiesForClass = function (className) {\n var properties = new Array();\n var hashProperties = {};\n this.fillProperties(className, properties, hashProperties);\n this.classProperties[className] = properties;\n this.classHashProperties[className] = hashProperties;\n };\n JsonMetadata.prototype.getPropertiesByObj = function (obj) {\n if (!obj || !obj.getType)\n return [];\n var res = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n res[props[i].name] = props[i];\n }\n var dynamicProps = !!obj.getDynamicType\n ? this.getProperties(obj.getDynamicType())\n : null;\n if (dynamicProps && dynamicProps.length > 0) {\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!!res[dProp.name])\n continue;\n res[dProp.name] = dProp;\n }\n }\n return Object.keys(res).map(function (key) { return res[key]; });\n };\n JsonMetadata.prototype.getDynamicPropertiesByObj = function (obj, dynamicType) {\n if (dynamicType === void 0) { dynamicType = null; }\n if (!obj || !obj.getType || (!obj.getDynamicType && !dynamicType))\n return [];\n var dType = !!dynamicType ? dynamicType : obj.getDynamicType();\n if (!dType)\n return [];\n var dynamicProps = this.getProperties(dType);\n if (!dynamicProps || dynamicProps.length == 0)\n return [];\n var hash = {};\n var props = this.getProperties(obj.getType());\n for (var i = 0; i < props.length; i++) {\n hash[props[i].name] = props[i];\n }\n var res = [];\n for (var i = 0; i < dynamicProps.length; i++) {\n var dProp = dynamicProps[i];\n if (!hash[dProp.name]) {\n res.push(dProp);\n }\n }\n return res;\n };\n JsonMetadata.prototype.findProperty = function (className, propertyName) {\n var hash = this.getHashProperties(className);\n var res = hash[propertyName];\n return !!res ? res : null;\n };\n JsonMetadata.prototype.findProperties = function (className, propertyNames) {\n var result = [];\n var hash = this.getHashProperties(className);\n for (var i = 0; i < propertyNames.length; i++) {\n var prop = hash[propertyNames[i]];\n if (prop) {\n result.push(prop);\n }\n }\n return result;\n };\n JsonMetadata.prototype.getAllPropertiesByName = function (propertyName) {\n var res = new Array();\n var classes = this.getAllClasses();\n for (var i = 0; i < classes.length; i++) {\n var classInfo = this.findClass(classes[i]);\n for (var j = 0; j < classInfo.properties.length; j++) {\n if (classInfo.properties[j].name == propertyName) {\n res.push(classInfo.properties[j]);\n break;\n }\n }\n }\n return res;\n };\n JsonMetadata.prototype.getAllClasses = function () {\n var res = new Array();\n for (var name in this.classes) {\n res.push(name);\n }\n return res;\n };\n JsonMetadata.prototype.createClass = function (name, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return null;\n if (metaDataClass.creator)\n return metaDataClass.creator(json);\n var parentName = metaDataClass.parentName;\n while (parentName) {\n metaDataClass = this.findClass(parentName);\n if (!metaDataClass)\n return null;\n parentName = metaDataClass.parentName;\n if (metaDataClass.creator)\n return this.createCustomType(name, metaDataClass.creator, json);\n }\n return null;\n };\n JsonMetadata.prototype.createCustomType = function (name, creator, json) {\n if (json === void 0) { json = undefined; }\n name = name.toLowerCase();\n var res = creator(json);\n var customTypeName = name;\n var customTemplateName = res.getTemplate\n ? res.getTemplate()\n : res.getType();\n res.getType = function () {\n return customTypeName;\n };\n res.getTemplate = function () {\n return customTemplateName;\n };\n CustomPropertiesCollection.createProperties(res);\n return res;\n };\n JsonMetadata.prototype.getChildrenClasses = function (name, canBeCreated) {\n if (canBeCreated === void 0) { canBeCreated = false; }\n name = name.toLowerCase();\n var result = [];\n this.fillChildrenClasses(name, canBeCreated, result);\n return result;\n };\n JsonMetadata.prototype.getRequiredProperties = function (name) {\n var properties = this.getProperties(name);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].isRequired) {\n res.push(properties[i].name);\n }\n }\n return res;\n };\n JsonMetadata.prototype.addProperties = function (className, propertiesInfos) {\n className = className.toLowerCase();\n var metaDataClass = this.findClass(className);\n for (var i = 0; i < propertiesInfos.length; i++) {\n this.addCustomPropertyCore(metaDataClass, propertiesInfos[i]);\n }\n };\n JsonMetadata.prototype.addProperty = function (className, propertyInfo) {\n return this.addCustomPropertyCore(this.findClass(className), propertyInfo);\n };\n JsonMetadata.prototype.addCustomPropertyCore = function (metaDataClass, propertyInfo) {\n if (!metaDataClass)\n return null;\n var property = metaDataClass.createProperty(propertyInfo);\n if (property) {\n property.isCustom = true;\n this.addPropertyToClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.addProperty(metaDataClass.name, property);\n }\n return property;\n };\n JsonMetadata.prototype.removeProperty = function (className, propertyName) {\n var metaDataClass = this.findClass(className);\n if (!metaDataClass)\n return false;\n var property = metaDataClass.find(propertyName);\n if (property) {\n this.removePropertyFromClass(metaDataClass, property);\n this.emptyClassPropertiesHash(metaDataClass);\n CustomPropertiesCollection.removeProperty(metaDataClass.name, propertyName);\n }\n };\n JsonMetadata.prototype.addPropertyToClass = function (metaDataClass, property) {\n if (metaDataClass.find(property.name) != null)\n return;\n metaDataClass.properties.push(property);\n };\n JsonMetadata.prototype.removePropertyFromClass = function (metaDataClass, property) {\n var index = metaDataClass.properties.indexOf(property);\n if (index < 0)\n return;\n metaDataClass.properties.splice(index, 1);\n };\n JsonMetadata.prototype.emptyClassPropertiesHash = function (metaDataClass) {\n this.classProperties[metaDataClass.name] = null;\n this.classHashProperties[metaDataClass.name] = null;\n var childClasses = this.getChildrenClasses(metaDataClass.name);\n for (var i = 0; i < childClasses.length; i++) {\n this.classProperties[childClasses[i].name] = null;\n this.classHashProperties[childClasses[i].name] = null;\n }\n };\n JsonMetadata.prototype.fillChildrenClasses = function (name, canBeCreated, result) {\n var children = this.childrenClasses[name];\n if (!children)\n return;\n for (var i = 0; i < children.length; i++) {\n if (!canBeCreated || children[i].creator) {\n result.push(children[i]);\n }\n this.fillChildrenClasses(children[i].name, canBeCreated, result);\n }\n };\n JsonMetadata.prototype.findClass = function (name) {\n name = name.toLowerCase();\n var res = this.classes[name];\n if (!res) {\n var newName = this.alternativeNames[name];\n if (!!newName && newName != name)\n return this.findClass(newName);\n }\n return res;\n };\n JsonMetadata.prototype.isDescendantOf = function (className, ancestorClassName) {\n if (!className || !ancestorClassName) {\n return false;\n }\n className = className.toLowerCase();\n ancestorClassName = ancestorClassName.toLowerCase();\n var class_ = this.findClass(className);\n if (!class_) {\n return false;\n }\n var parentClass = class_;\n do {\n if (parentClass.name === ancestorClassName) {\n return true;\n }\n parentClass = this.classes[parentClass.parentName];\n } while (!!parentClass);\n return false;\n };\n JsonMetadata.prototype.addAlterNativeClassName = function (name, alternativeName) {\n this.alternativeNames[alternativeName.toLowerCase()] = name.toLowerCase();\n };\n JsonMetadata.prototype.fillProperties = function (name, list, hash) {\n var metaDataClass = this.findClass(name);\n if (!metaDataClass)\n return;\n if (metaDataClass.parentName) {\n this.fillProperties(metaDataClass.parentName, list, hash);\n }\n for (var i = 0; i < metaDataClass.properties.length; i++) {\n var prop = metaDataClass.properties[i];\n this.addPropertyCore(prop, list, hash);\n hash[prop.name] = prop;\n }\n };\n JsonMetadata.prototype.addPropertyCore = function (property, list, hash) {\n if (!hash[property.name]) {\n list.push(property);\n return;\n }\n var index = -1;\n for (var i = 0; i < list.length; i++) {\n if (list[i].name == property.name) {\n index = i;\n break;\n }\n }\n property.mergeWith(list[index]);\n list[index] = property;\n };\n return JsonMetadata;\n}());\n\nvar JsonError = /** @class */ (function () {\n function JsonError(type, message) {\n this.type = type;\n this.message = message;\n this.description = \"\";\n this.at = -1;\n }\n JsonError.prototype.getFullDescription = function () {\n return this.message + (this.description ? \"\\n\" + this.description : \"\");\n };\n return JsonError;\n}());\n\nvar JsonUnknownPropertyError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(JsonUnknownPropertyError, _super);\n function JsonUnknownPropertyError(propertyName, className) {\n var _this = _super.call(this, \"unknownproperty\", \"The property '\" +\n propertyName +\n \"' in class '\" +\n className +\n \"' is unknown.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n var properties = JsonObject.metaData.getProperties(className);\n if (properties) {\n _this.description = \"The list of available properties are: \";\n for (var i = 0; i < properties.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += properties[i].name;\n }\n _this.description += \".\";\n }\n return _this;\n }\n return JsonUnknownPropertyError;\n}(JsonError));\n\nvar JsonMissingTypeErrorBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(JsonMissingTypeErrorBase, _super);\n function JsonMissingTypeErrorBase(baseClassName, type, message) {\n var _this = _super.call(this, type, message) || this;\n _this.baseClassName = baseClassName;\n _this.type = type;\n _this.message = message;\n _this.description = \"The following types are available: \";\n var types = JsonObject.metaData.getChildrenClasses(baseClassName, true);\n for (var i = 0; i < types.length; i++) {\n if (i > 0)\n _this.description += \", \";\n _this.description += \"'\" + types[i].name + \"'\";\n }\n _this.description += \".\";\n return _this;\n }\n return JsonMissingTypeErrorBase;\n}(JsonError));\n\nvar JsonMissingTypeError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(JsonMissingTypeError, _super);\n function JsonMissingTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"missingtypeproperty\", \"The property type is missing in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonMissingTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonIncorrectTypeError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(JsonIncorrectTypeError, _super);\n function JsonIncorrectTypeError(propertyName, baseClassName) {\n var _this = _super.call(this, baseClassName, \"incorrecttypeproperty\", \"The property type is incorrect in the object. Please take a look at property: '\" +\n propertyName +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.baseClassName = baseClassName;\n return _this;\n }\n return JsonIncorrectTypeError;\n}(JsonMissingTypeErrorBase));\n\nvar JsonRequiredPropertyError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(JsonRequiredPropertyError, _super);\n function JsonRequiredPropertyError(propertyName, className) {\n var _this = _super.call(this, \"requiredproperty\", \"The property '\" +\n propertyName +\n \"' is required in class '\" +\n className +\n \"'.\") || this;\n _this.propertyName = propertyName;\n _this.className = className;\n return _this;\n }\n return JsonRequiredPropertyError;\n}(JsonError));\n\nvar JsonObject = /** @class */ (function () {\n function JsonObject() {\n this.errors = new Array();\n this.lightSerializing = false;\n }\n Object.defineProperty(JsonObject, \"metaData\", {\n get: function () {\n return JsonObject.metaDataValue;\n },\n enumerable: true,\n configurable: true\n });\n JsonObject.prototype.toJsonObject = function (obj, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n return this.toJsonObjectCore(obj, null, storeDefaults);\n };\n JsonObject.prototype.toObject = function (jsonObj, obj) {\n this.toObjectCore(jsonObj, obj);\n if (!!obj.getType) {\n var error = this.getRequiredError(jsonObj, obj.getType());\n if (!!error) {\n this.addNewError(error, jsonObj);\n }\n }\n };\n JsonObject.prototype.toObjectCore = function (jsonObj, obj) {\n if (!jsonObj)\n return;\n var properties = null;\n var objType = undefined;\n var needAddErrors = true;\n if (obj.getType) {\n objType = obj.getType();\n properties = JsonObject.metaData.getProperties(objType);\n needAddErrors =\n !!objType && !JsonObject.metaData.isDescendantOf(objType, \"itemvalue\");\n }\n if (!properties)\n return;\n if (obj.startLoadingFromJson) {\n obj.startLoadingFromJson();\n }\n properties = this.addDynamicProperties(obj, jsonObj, properties);\n for (var key in jsonObj) {\n if (key === JsonObject.typePropertyName)\n continue;\n if (key === JsonObject.positionPropertyName) {\n obj[key] = jsonObj[key];\n continue;\n }\n var property = this.findProperty(properties, key);\n if (!property) {\n if (needAddErrors) {\n this.addNewError(new JsonUnknownPropertyError(key.toString(), objType), jsonObj);\n }\n continue;\n }\n this.valueToObj(jsonObj[key], obj, property);\n }\n if (obj.endLoadingFromJson) {\n obj.endLoadingFromJson();\n }\n };\n JsonObject.prototype.toJsonObjectCore = function (obj, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (!obj || !obj.getType)\n return obj;\n if (typeof obj.getData === \"function\")\n return obj.getData();\n var result = {};\n if (property != null && !property.className) {\n result[JsonObject.typePropertyName] = property.getObjType(obj.getType());\n }\n this.propertiesToJson(obj, JsonObject.metaData.getProperties(obj.getType()), result, storeDefaults);\n this.propertiesToJson(obj, this.getDynamicProperties(obj), result, storeDefaults);\n return result;\n };\n JsonObject.prototype.getDynamicProperties = function (obj) {\n return Serializer.getDynamicPropertiesByObj(obj);\n };\n JsonObject.prototype.addDynamicProperties = function (obj, jsonObj, properties) {\n if (!obj.getDynamicPropertyName)\n return properties;\n var dynamicPropName = obj.getDynamicPropertyName();\n if (!dynamicPropName)\n return properties;\n if (jsonObj[dynamicPropName]) {\n obj[dynamicPropName] = jsonObj[dynamicPropName];\n }\n var dynamicProperties = this.getDynamicProperties(obj);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n res.push(properties[i]);\n }\n for (var i = 0; i < dynamicProperties.length; i++) {\n res.push(dynamicProperties[i]);\n }\n return res;\n };\n JsonObject.prototype.propertiesToJson = function (obj, properties, json, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n for (var i = 0; i < properties.length; i++) {\n this.valueToJson(obj, json, properties[i], storeDefaults);\n }\n };\n JsonObject.prototype.valueToJson = function (obj, result, property, storeDefaults) {\n if (storeDefaults === void 0) { storeDefaults = false; }\n if (property.isSerializable === false ||\n (property.isLightSerializable === false && this.lightSerializing))\n return;\n var value = property.getValue(obj);\n if (!storeDefaults && property.isDefaultValue(value))\n return;\n if (this.isValueArray(value)) {\n var arrValue = [];\n for (var i = 0; i < value.length; i++) {\n arrValue.push(this.toJsonObjectCore(value[i], property, storeDefaults));\n }\n value = arrValue.length > 0 ? arrValue : null;\n }\n else {\n value = this.toJsonObjectCore(value, property, storeDefaults);\n }\n var hasValue = typeof obj[\"getPropertyValue\"] === \"function\" &&\n obj[\"getPropertyValue\"](property.name, null) !== null;\n if ((storeDefaults && hasValue) || !property.isDefaultValue(value)) {\n result[property.name] = value;\n }\n };\n JsonObject.prototype.valueToObj = function (value, obj, property) {\n if (value == null)\n return;\n this.removePos(property, value);\n if (property != null && property.hasToUseSetValue) {\n property.setValue(obj, value, this);\n return;\n }\n if (this.isValueArray(value)) {\n this.valueToArray(value, obj, property.name, property);\n return;\n }\n var newObj = this.createNewObj(value, property);\n if (newObj.newObj) {\n this.toObjectCore(value, newObj.newObj);\n value = newObj.newObj;\n }\n if (!newObj.error) {\n if (property != null) {\n property.setValue(obj, value, this);\n }\n else {\n obj[property.name] = value;\n }\n }\n };\n JsonObject.prototype.removePos = function (property, value) {\n if (!property || !property.type || property.type.indexOf(\"value\") < 0)\n return;\n this.removePosFromObj(value);\n };\n JsonObject.prototype.removePosFromObj = function (obj) {\n if (!obj)\n return;\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n this.removePosFromObj(obj[i]);\n }\n }\n if (!!obj[JsonObject.positionPropertyName]) {\n delete obj[JsonObject.positionPropertyName];\n }\n };\n JsonObject.prototype.isValueArray = function (value) {\n return value && Array.isArray(value);\n };\n JsonObject.prototype.createNewObj = function (value, property) {\n var result = { newObj: null, error: null };\n var className = value[JsonObject.typePropertyName];\n if (!className && property != null && property.className) {\n className = property.className;\n }\n className = property.getClassName(className);\n result.newObj = className\n ? JsonObject.metaData.createClass(className, value)\n : null;\n result.error = this.checkNewObjectOnErrors(result.newObj, value, property, className);\n return result;\n };\n JsonObject.prototype.checkNewObjectOnErrors = function (newObj, value, property, className) {\n var error = null;\n if (newObj) {\n error = this.getRequiredError(value, className);\n }\n else {\n if (property.baseClassName) {\n if (!className) {\n error = new JsonMissingTypeError(property.name, property.baseClassName);\n }\n else {\n error = new JsonIncorrectTypeError(property.name, property.baseClassName);\n }\n }\n }\n if (error) {\n this.addNewError(error, value);\n }\n return error;\n };\n JsonObject.prototype.getRequiredError = function (value, className) {\n var requiredProperties = JsonObject.metaData.getRequiredProperties(className);\n if (!requiredProperties)\n return null;\n for (var i = 0; i < requiredProperties.length; i++) {\n if (!value[requiredProperties[i]]) {\n return new JsonRequiredPropertyError(requiredProperties[i], className);\n }\n }\n return null;\n };\n JsonObject.prototype.addNewError = function (error, jsonObj) {\n if (jsonObj && jsonObj[JsonObject.positionPropertyName]) {\n error.at = jsonObj[JsonObject.positionPropertyName].start;\n }\n this.errors.push(error);\n };\n JsonObject.prototype.valueToArray = function (value, obj, key, property) {\n if (obj[key] && value.length > 0)\n obj[key].splice(0, obj[key].length);\n if (!obj[key])\n obj[key] = [];\n for (var i = 0; i < value.length; i++) {\n var newValue = this.createNewObj(value[i], property);\n if (newValue.newObj) {\n if (!!value[i].name) {\n newValue.newObj.name = value[i].name;\n }\n obj[key].push(newValue.newObj);\n this.toObjectCore(value[i], newValue.newObj);\n }\n else {\n if (!newValue.error) {\n obj[key].push(value[i]);\n }\n }\n }\n };\n JsonObject.prototype.findProperty = function (properties, key) {\n if (!properties)\n return null;\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n if (prop.name == key || prop.alternativeName == key)\n return prop;\n }\n return null;\n };\n JsonObject.typePropertyName = \"type\";\n JsonObject.positionPropertyName = \"pos\";\n JsonObject.metaDataValue = new JsonMetadata();\n return JsonObject;\n}());\n\nvar Serializer = JsonObject.metaData;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Helpers; });\nvar Helpers = /** @class */ (function () {\n function Helpers() {\n }\n /**\n * A static methods that returns true if a value underfined, null, empty string or empty array.\n * @param value\n */\n Helpers.isValueEmpty = function (value) {\n if (Array.isArray(value) && value.length === 0)\n return true;\n if (!!value && typeof value === \"object\" && value.constructor === Object) {\n for (var key in value) {\n if (!Helpers.isValueEmpty(value[key]))\n return false;\n }\n return true;\n }\n if (!!value && (typeof value === \"string\" || value instanceof String)) {\n value = value.trim();\n }\n return !value && value !== 0 && value !== false;\n };\n Helpers.isArrayContainsEqual = function (x, y) {\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n for (var i = 0; i < x.length; i++) {\n var j = 0;\n for (; j < y.length; j++) {\n if (Helpers.isTwoValueEquals(x[i], y[j]))\n break;\n }\n if (j === y.length)\n return false;\n }\n return true;\n };\n Helpers.isArraysEqual = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (!Array.isArray(x) || !Array.isArray(y))\n return false;\n if (x.length !== y.length)\n return false;\n if (ignoreOrder) {\n var xSorted = [];\n var ySorted = [];\n for (var i = 0; i < x.length; i++) {\n xSorted.push(x[i]);\n ySorted.push(y[i]);\n }\n xSorted.sort();\n ySorted.sort();\n x = xSorted;\n y = ySorted;\n }\n for (var i = 0; i < x.length; i++) {\n if (!Helpers.isTwoValueEquals(x[i], y[i]))\n return false;\n }\n return true;\n };\n Helpers.isTwoValueEquals = function (x, y, ignoreOrder) {\n if (ignoreOrder === void 0) { ignoreOrder = false; }\n if (x === y)\n return true;\n if (Array.isArray(x) && x.length === 0 && typeof y === \"undefined\")\n return true;\n if (Array.isArray(y) && y.length === 0 && typeof x === \"undefined\")\n return true;\n if ((x === undefined || x === null) && (y === \"undefined\" || y === \"\"))\n return true;\n if ((y === undefined || y === null) && (x === \"undefined\" || x === \"\"))\n return true;\n if (typeof x === \"string\" && typeof y == \"string\")\n return x == y;\n if (Helpers.isConvertibleToNumber(x) && Helpers.isConvertibleToNumber(y)) {\n if (parseInt(x) === parseInt(y) && parseFloat(x) === parseFloat(y)) {\n return true;\n }\n }\n if ((!Helpers.isValueEmpty(x) && Helpers.isValueEmpty(y)) ||\n (Helpers.isValueEmpty(x) && !Helpers.isValueEmpty(y)))\n return false;\n if ((x === true || x === false) && typeof y == \"string\") {\n return x.toString() === y.toLocaleLowerCase();\n }\n if ((y === true || y === false) && typeof x == \"string\") {\n return y.toString() === x.toLocaleLowerCase();\n }\n if (!(x instanceof Object) && !(y instanceof Object))\n return x == y;\n if (!(x instanceof Object) || !(y instanceof Object))\n return false;\n if (x[\"equals\"])\n return x.equals(y);\n if (!!x.toJSON && !!y.toJSON) {\n return this.isTwoValueEquals(x.toJSON(), y.toJSON());\n }\n if (Array.isArray(x) && Array.isArray(y))\n return Helpers.isArraysEqual(x, y, ignoreOrder);\n for (var p in x) {\n if (!x.hasOwnProperty(p))\n continue;\n if (!y.hasOwnProperty(p))\n return false;\n if (x[p] === y[p])\n continue;\n if (typeof x[p] !== \"object\")\n return false;\n if (!this.isTwoValueEquals(x[p], y[p]))\n return false;\n }\n for (p in y) {\n if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n return false;\n }\n return true;\n };\n Helpers.randomizeArray = function (array) {\n for (var i = array.length - 1; i > 0; i--) {\n var j = Math.floor(Math.random() * (i + 1));\n var temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n return array;\n };\n Helpers.getUnbindValue = function (value) {\n if (!!value && value instanceof Object) {\n //do not return the same object instance!!!\n return JSON.parse(JSON.stringify(value));\n }\n return value;\n };\n Helpers.createCopy = function (obj) {\n var res = {};\n if (!obj)\n return res;\n for (var key in obj) {\n res[key] = obj[key];\n }\n return res;\n };\n Helpers.isConvertibleToNumber = function (value) {\n return (value !== undefined &&\n value !== null &&\n !Array.isArray(value) &&\n !isNaN(value));\n };\n Helpers.isNumber = function (value) {\n if (typeof value == \"string\" &&\n !!value &&\n value.indexOf(\"0x\") == 0 &&\n value.length > 32)\n return false;\n return !isNaN(parseFloat(value)) && isFinite(value);\n };\n Helpers.getMaxLength = function (maxLength, surveyLength) {\n if (maxLength < 0) {\n maxLength = surveyLength;\n }\n return maxLength > 0 ? maxLength : null;\n };\n Helpers.getNumberByIndex = function (index, startIndexStr) {\n if (index < 0)\n return \"\";\n var startIndex = 1;\n var prefix = \"\";\n var postfix = \".\";\n var isNumeric = true;\n var str = \"\";\n if (!!startIndexStr) {\n str = startIndexStr;\n var ind = str.length - 1;\n var hasDigit = false;\n for (var i = 0; i < str.length; i++) {\n if (Helpers.isCharDigit(str[i])) {\n hasDigit = true;\n break;\n }\n }\n var checkLetter = function () {\n return ((hasDigit && !Helpers.isCharDigit(str[ind])) ||\n Helpers.isCharNotLetterAndDigit(str[ind]));\n };\n while (ind >= 0 && checkLetter())\n ind--;\n var newPostfix = \"\";\n if (ind < str.length - 1) {\n newPostfix = str.substr(ind + 1);\n str = str.substr(0, ind + 1);\n }\n if (!!str) {\n var ind = 0;\n while (ind < str.length && checkLetter())\n ind++;\n if (ind > 0) {\n prefix = str.substr(0, ind);\n str = str.substr(ind);\n }\n }\n if (!!newPostfix || !!prefix) {\n postfix = newPostfix;\n }\n if (!!str) {\n if (parseInt(str))\n startIndex = parseInt(str);\n else if (str.length == 1)\n isNumeric = false;\n }\n }\n if (isNumeric)\n return prefix + (index + startIndex).toString() + postfix;\n return prefix + String.fromCharCode(str.charCodeAt(0) + index) + postfix;\n };\n Helpers.isCharNotLetterAndDigit = function (ch) {\n return ch.toUpperCase() == ch.toLowerCase() && !Helpers.isCharDigit(ch);\n };\n Helpers.isCharDigit = function (ch) {\n return ch >= \"0\" && ch <= \"9\";\n };\n return Helpers;\n}());\n\nif (!String.prototype[\"format\"]) {\n String.prototype[\"format\"] = function () {\n var args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != \"undefined\" ? args[number] : match;\n });\n };\n}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return ElementFactory; });\n\n\n//TODO replace completely with ElementFactory\nvar QuestionFactory = /** @class */ (function () {\n function QuestionFactory() {\n this.creatorHash = {};\n }\n Object.defineProperty(QuestionFactory, \"DefaultChoices\", {\n get: function () {\n return [\n __WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"choices_Item\") + \"1\",\n __WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"choices_Item\") + \"2\",\n __WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"choices_Item\") + \"3\"\n ];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultColums\", {\n get: function () {\n var colName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"matrix_column\") + \" \";\n return [colName + \"1\", colName + \"2\", colName + \"3\"];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFactory, \"DefaultRows\", {\n get: function () {\n var rowName = __WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"matrix_row\") + \" \";\n return [rowName + \"1\", rowName + \"2\"];\n },\n enumerable: true,\n configurable: true\n });\n QuestionFactory.prototype.registerQuestion = function (questionType, questionCreator) {\n this.creatorHash[questionType] = questionCreator;\n };\n QuestionFactory.prototype.unregisterElement = function (elementType) {\n delete this.creatorHash[elementType];\n };\n QuestionFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n QuestionFactory.prototype.getAllTypes = function () {\n var result = new Array();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n QuestionFactory.prototype.createQuestion = function (questionType, name) {\n var creator = this.creatorHash[questionType];\n if (creator == null)\n return null;\n return creator(name);\n };\n QuestionFactory.Instance = new QuestionFactory();\n return QuestionFactory;\n}());\n\nvar ElementFactory = /** @class */ (function () {\n function ElementFactory() {\n this.creatorHash = {};\n }\n ElementFactory.prototype.registerElement = function (elementType, elementCreator) {\n this.creatorHash[elementType] = elementCreator;\n };\n ElementFactory.prototype.clear = function () {\n this.creatorHash = {};\n };\n ElementFactory.prototype.unregisterElement = function (elementType, removeFromSerializer) {\n if (removeFromSerializer === void 0) { removeFromSerializer = false; }\n delete this.creatorHash[elementType];\n QuestionFactory.Instance.unregisterElement(elementType);\n if (removeFromSerializer) {\n __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].removeClass(elementType);\n }\n };\n ElementFactory.prototype.getAllTypes = function () {\n var result = QuestionFactory.Instance.getAllTypes();\n for (var key in this.creatorHash) {\n result.push(key);\n }\n return result.sort();\n };\n ElementFactory.prototype.createElement = function (elementType, name) {\n var creator = this.creatorHash[elementType];\n if (creator == null)\n return QuestionFactory.Instance.createQuestion(elementType, name);\n return creator(name);\n };\n ElementFactory.Instance = new ElementFactory();\n return ElementFactory;\n}());\n\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* unused harmony export QuestionVue */\n\n\n\nvar QuestionVue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionVue, _super);\n function QuestionVue() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.innerValue = null;\n return _this;\n }\n QuestionVue.prototype.changeQuestion = function (new_val, old_val) {\n this.innerValue = null;\n };\n QuestionVue.prototype.mounted = function () {\n if (this.question) {\n this.question.afterRenderQuestionElement(this.$el);\n }\n };\n QuestionVue.prototype.beforeDestroy = function () {\n if (this.question) {\n this.question.beforeDestoyQuestionElement(this.$el);\n }\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], QuestionVue.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], QuestionVue.prototype, \"css\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Watch\"])(\"question\")\n ], QuestionVue.prototype, \"changeQuestion\", null);\n QuestionVue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], QuestionVue);\n return QuestionVue;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n/* harmony default export */ __webpack_exports__[\"a\"] = QuestionVue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Base; });\n/* unused harmony export ArrayChanges */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return SurveyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return SurveyElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return Event; });\n\n\n\n\n\n/**\n * The base class for SurveyJS objects.\n */\nvar Base = /** @class */ (function () {\n function Base() {\n this.propertyHash = {};\n this.isLoadingFromJsonValue = false;\n this.loadingOwner = null;\n /**\n * Event that raise on property change of the sender object\n * sender - the object that owns the property\n * options.name - the property name that has been changed\n * options.oldValue - old value. Please note, it equals to options.newValue if property is an array\n * options.newValue - new value.\n */\n this.onPropertyChanged = new Event();\n /**\n * Event that raised on changing property of the ItemValue object.\n * sender - the object that owns the property\n * options.propertyName - the property name to which ItemValue array is belong. It can be \"choices\" for dropdown question\n * options.obj - the instance of ItemValue object which property has been changed\n * options.name - the property of ItemObject that has been changed\n * options.oldValue - old value\n * options.newValue - new value\n */\n this.onItemValuePropertyChanged = new Event();\n __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"a\" /* CustomPropertiesCollection */].createProperties(this);\n this.onBaseCreating();\n }\n Object.defineProperty(Base, \"commentPrefix\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_4__settings__[\"a\" /* settings */].commentPrefix;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_4__settings__[\"a\" /* settings */].commentPrefix = val;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * A static methods that returns true if a value underfined, null, empty string or empty array.\n * @param value\n */\n Base.prototype.isValueEmpty = function (value) {\n return __WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].isValueEmpty(value);\n };\n Base.prototype.IsPropertyEmpty = function (value) {\n return value !== \"\" && this.isValueEmpty(value);\n };\n Base.prototype.onBaseCreating = function () { };\n /**\n * Returns the type of the object as a string as it represents in the json. It should be in lowcase.\n */\n Base.prototype.getType = function () {\n return \"base\";\n };\n /**\n * Returns the element template name without prefix. Typically it equals to getType().\n * @see getType\n */\n Base.prototype.getTemplate = function () {\n return this.getType();\n };\n Object.defineProperty(Base.prototype, \"isLoadingFromJson\", {\n /**\n * Returns true if the object is loading from Json at the current moment.\n */\n get: function () {\n return this.getIsLoadingFromJson();\n },\n enumerable: true,\n configurable: true\n });\n Base.prototype.getIsLoadingFromJson = function () {\n if (!!this.loadingOwner && this.loadingOwner.isLoadingFromJson)\n return true;\n return this.isLoadingFromJsonValue;\n };\n Base.prototype.startLoadingFromJson = function () {\n this.isLoadingFromJsonValue = true;\n };\n Base.prototype.endLoadingFromJson = function () {\n this.isLoadingFromJsonValue = false;\n };\n /**\n * Deserialized the current object into JSON\n * @see fromJSON\n */\n Base.prototype.toJSON = function () {\n return new __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(this);\n };\n /**\n * Load object properties and elements. It doesn't reset properties that was changed before and they are not defined in the json parameter.\n * @param json the object JSON definition\n * @see toJSON\n */\n Base.prototype.fromJSON = function (json) {\n return new __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"b\" /* JsonObject */]().toObject(json, this);\n };\n /**\n * Make a clone of the existing object. Create a new object of the same type and load all properties into it.\n */\n Base.prototype.clone = function () {\n var clonedObj = __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].createClass(this.getType());\n clonedObj.fromJSON(this.toJSON());\n return clonedObj;\n };\n Base.prototype.locStrsChanged = function () {\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var item = this.arraysInfo[key];\n if (item && item.isItemValues) {\n var arr = this.getPropertyValue(key);\n if (arr && !!Base.itemValueLocStrChanged)\n Base.itemValueLocStrChanged(arr);\n }\n }\n }\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n item.strChanged();\n }\n }\n };\n /**\n * Returns the property value by name\n * @param name property name\n */\n Base.prototype.getPropertyValue = function (name, defaultValue) {\n if (defaultValue === void 0) { defaultValue = null; }\n var res = this.getPropertyValueCore(this.propertyHash, name);\n if (this.IsPropertyEmpty(res)) {\n if (defaultValue != null)\n return defaultValue;\n var prop = __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].findProperty(this.getType(), name);\n var serValue = !!prop && !prop.isCustom ? prop.defaultValue : null;\n if (!this.IsPropertyEmpty(serValue))\n return serValue;\n }\n return res;\n };\n Base.prototype.getPropertyValueCore = function (propertiesHash, name) {\n if (this.getPropertyValueCoreHandler)\n return this.getPropertyValueCoreHandler(propertiesHash, name);\n else\n return propertiesHash[name];\n };\n Base.prototype.geValueFromHash = function () {\n return this.propertyHash[\"value\"];\n };\n Base.prototype.setPropertyValueCore = function (propertiesHash, name, val) {\n if (this.setPropertyValueCoreHandler)\n this.setPropertyValueCoreHandler(propertiesHash, name, val);\n else\n propertiesHash[name] = val;\n };\n Base.prototype.iteratePropertiesHash = function (func) {\n var _this = this;\n var keys = [];\n for (var key in this.propertyHash) {\n keys.push(key);\n }\n keys.forEach(function (key) { return func(_this.propertyHash, key); });\n };\n /**\n * set property value\n * @param name property name\n * @param val new property value\n */\n Base.prototype.setPropertyValue = function (name, val) {\n var oldValue = this.getPropertyValue(name);\n if (oldValue && Array.isArray(oldValue)) {\n if (this.isTwoValueEquals(oldValue, val))\n return;\n var arrayInfo = this.arraysInfo[name];\n this.setArray(name, oldValue, val, arrayInfo ? arrayInfo.isItemValues : false, arrayInfo ? arrayInfo.onPush : null);\n //this.propertyValueChanged(name, oldValue, oldValue);\n }\n else {\n this.setPropertyValueCore(this.propertyHash, name, val);\n if (!this.isTwoValueEquals(oldValue, val)) {\n this.propertyValueChanged(name, oldValue, val);\n }\n }\n };\n Base.prototype.onPropertyValueChangedCallback = function (name, oldValue, newValue, sender, arrayChanges) { };\n Base.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n this.onItemValuePropertyChanged.fire(this, {\n obj: item,\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n propertyName: item.ownerPropertyName,\n });\n };\n Base.prototype.onPropertyValueChanged = function (name, oldValue, newValue) { };\n Base.prototype.propertyValueChanged = function (name, oldValue, newValue, arrayChanges, target) {\n if (this.isLoadingFromJson)\n return;\n this.onPropertyValueChanged(name, oldValue, newValue);\n this.onPropertyChanged.fire(this, {\n name: name,\n oldValue: oldValue,\n newValue: newValue,\n });\n this.doPropertyValueChangedCallback &&\n this.doPropertyValueChangedCallback(name, oldValue, newValue, arrayChanges, this);\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n if (this.onPropChangeFunctions[i].name == name)\n this.onPropChangeFunctions[i].func(newValue);\n }\n };\n Base.prototype.doPropertyValueChangedCallback = function (name, oldValue, newValue, arrayChanges, target) {\n if (!target)\n target = this;\n var parentBase = this.getOwnerForPropertyChanged();\n if (!!parentBase) {\n parentBase.doPropertyValueChangedCallback(name, oldValue, newValue, arrayChanges, target);\n }\n else {\n this.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n }\n };\n Base.prototype.getOwnerForPropertyChanged = function () {\n var testProps = [\"colOwner\", \"locOwner\", \"survey\", \"owner\", \"errorOwner\"];\n for (var i = 0; i < testProps.length; i++) {\n var prop = testProps[i];\n var testObj = this[prop];\n if (!!testObj && !!testObj.doPropertyValueChangedCallback)\n return testObj;\n }\n return null;\n };\n /**\n * Register a function that will be called on a property value changed.\n * @param name the property name\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertyValueChanged = function (name, func, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions) {\n this.onPropChangeFunctions = [];\n }\n if (key) {\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n item.func = func;\n return;\n }\n }\n }\n this.onPropChangeFunctions.push({ name: name, func: func, key: key });\n };\n /**\n * Register a function that will be called on a property value changed from the names list.\n * @param names the list of properties names\n * @param func the function with no parameters that will be called on property changed.\n * @param key an optional parameter. If there is already a registered function for this property with the same key, it will be overwritten.\n */\n Base.prototype.registerFunctionOnPropertiesValueChanged = function (names, func, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.registerFunctionOnPropertyValueChanged(names[i], func, key);\n }\n };\n /**\n * Unregister notification on property value changed\n * @param name the property name\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertyValueChanged = function (name, key) {\n if (key === void 0) { key = null; }\n if (!this.onPropChangeFunctions)\n return;\n for (var i = 0; i < this.onPropChangeFunctions.length; i++) {\n var item = this.onPropChangeFunctions[i];\n if (item.name == name && item.key == key) {\n this.onPropChangeFunctions.splice(i, 1);\n return;\n }\n }\n };\n /**\n * Unregister notification on property value changed for all properties in the names list.\n * @param names the list of properties names\n * @param key the key with which you have registered the notification for this property. It can be null.\n */\n Base.prototype.unRegisterFunctionOnPropertiesValueChanged = function (names, key) {\n if (key === void 0) { key = null; }\n for (var i = 0; i < names.length; i++) {\n this.unRegisterFunctionOnPropertyValueChanged(names[i], key);\n }\n };\n Base.prototype.createCustomLocalizableObj = function (name) {\n var locStr = this.getLocalizableString(name);\n if (locStr || !this.getLocale)\n return;\n this.createLocalizableString(name, this);\n };\n Base.prototype.createLocalizableString = function (name, owner, useMarkDown) {\n if (useMarkDown === void 0) { useMarkDown = false; }\n var locStr = new __WEBPACK_IMPORTED_MODULE_1__localizablestring__[\"a\" /* LocalizableString */](owner, useMarkDown);\n if (!this.localizableStrings) {\n this.localizableStrings = {};\n }\n this.localizableStrings[name] = locStr;\n return locStr;\n };\n Base.prototype.getLocalizableString = function (name) {\n return !!this.localizableStrings ? this.localizableStrings[name] : null;\n };\n Base.prototype.getLocalizableStringText = function (name, defaultStr) {\n if (defaultStr === void 0) { defaultStr = \"\"; }\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return \"\";\n var res = locStr.text;\n return res ? res : defaultStr;\n };\n Base.prototype.setLocalizableStringText = function (name, value) {\n var locStr = this.getLocalizableString(name);\n if (!locStr)\n return;\n var oldValue = locStr.text;\n if (oldValue === value)\n return;\n locStr.text = value;\n this.propertyValueChanged(name, oldValue, value);\n };\n Base.prototype.addUsedLocales = function (locales) {\n if (!!this.localizableStrings) {\n for (var key in this.localizableStrings) {\n var item = this.getLocalizableString(key);\n if (item)\n this.AddLocStringToUsedLocales(item, locales);\n }\n }\n if (!!this.arraysInfo) {\n for (var key in this.arraysInfo) {\n var items = this.getPropertyValue(key);\n if (!items || !items.length)\n continue;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item && item.addUsedLocales) {\n item.addUsedLocales(locales);\n }\n }\n }\n }\n };\n Base.prototype.AddLocStringToUsedLocales = function (locStr, locales) {\n var locs = locStr.getLocales();\n for (var i = 0; i < locs.length; i++) {\n if (locales.indexOf(locs[i]) < 0) {\n locales.push(locs[i]);\n }\n }\n };\n Base.prototype.createItemValues = function (name) {\n var self = this;\n var result = this.createNewArray(name, function (item) {\n item.locOwner = self;\n item.ownerPropertyName = name;\n });\n this.arraysInfo[name].isItemValues = true;\n return result;\n };\n Base.prototype.notifyArrayChanged = function (ar) {\n !!ar.onArrayChanged && ar.onArrayChanged();\n };\n Base.prototype.createNewArrayCore = function (name) {\n var res = null;\n if (!!this.createArrayCoreHandler) {\n res = this.createArrayCoreHandler(this.propertyHash, name);\n }\n if (!res) {\n res = new Array();\n this.setPropertyValueCore(this.propertyHash, name, res);\n }\n return res;\n };\n Base.prototype.createNewArray = function (name, onPush, onRemove) {\n if (onPush === void 0) { onPush = null; }\n if (onRemove === void 0) { onRemove = null; }\n var newArray = this.createNewArrayCore(name);\n if (!this.arraysInfo) {\n this.arraysInfo = {};\n }\n this.arraysInfo[name] = { onPush: onPush, isItemValues: false };\n var self = this;\n newArray.push = function (value) {\n var result = Object.getPrototypeOf(newArray).push.call(newArray, value);\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray);\n return result;\n };\n newArray.unshift = function (value) {\n var result = Object.getPrototypeOf(newArray).unshift.call(newArray, value);\n if (onPush)\n onPush(value, newArray.length - 1);\n var arrayChanges = new ArrayChanges(0, 0, [value], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray);\n return result;\n };\n newArray.pop = function () {\n var result = Object.getPrototypeOf(newArray).pop.call(newArray);\n if (onRemove)\n onRemove(result);\n var arrayChanges = new ArrayChanges(newArray.length - 1, 1, [], []);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray);\n return result;\n };\n newArray.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n if (!start)\n start = 0;\n if (!deleteCount)\n deleteCount = 0;\n var result = (_a = Object.getPrototypeOf(newArray).splice).call.apply(_a, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"d\" /* __spreadArrays */])([newArray,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n if (onRemove && result) {\n for (var i = 0; i < result.length; i++) {\n onRemove(result[i]);\n }\n }\n if (onPush) {\n for (var i = 0; i < items.length; i++) {\n onPush(items[i], start + i);\n }\n }\n var arrayChanges = new ArrayChanges(start, deleteCount, items, result);\n self.propertyValueChanged(name, newArray, newArray, arrayChanges);\n self.notifyArrayChanged(newArray);\n return result;\n };\n return newArray;\n };\n Base.prototype.getItemValueType = function () {\n return undefined;\n };\n Base.prototype.setArray = function (name, src, dest, isItemValues, onPush) {\n var deletedItems = [].concat(src);\n Object.getPrototypeOf(src).splice.call(src, 0, src.length);\n if (!!dest) {\n for (var i = 0; i < dest.length; i++) {\n var item = dest[i];\n if (isItemValues) {\n if (!!Base.createItemValue) {\n item = Base.createItemValue(item, this.getItemValueType());\n }\n }\n Object.getPrototypeOf(src).push.call(src, item);\n if (onPush)\n onPush(src[i]);\n }\n }\n var arrayChanges = new ArrayChanges(0, deletedItems.length, src, deletedItems);\n this.propertyValueChanged(name, deletedItems, src, arrayChanges);\n this.notifyArrayChanged(src);\n };\n Base.prototype.isTwoValueEquals = function (x, y, caseInSensitive) {\n if (caseInSensitive === void 0) { caseInSensitive = false; }\n if (caseInSensitive) {\n x = this.getValueInLowCase(x);\n y = this.getValueInLowCase(y);\n }\n return __WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].isTwoValueEquals(x, y);\n };\n Base.copyObject = function (dst, src) {\n for (var key in src) {\n var source = src[key];\n if (typeof source === \"object\") {\n source = {};\n this.copyObject(source, src[key]);\n }\n dst[key] = source;\n }\n };\n Base.prototype.copyCssClasses = function (dest, source) {\n if (!source)\n return;\n if (typeof source === \"string\" || source instanceof String) {\n dest[\"root\"] = source;\n }\n else {\n SurveyElement.copyObject(dest, source);\n }\n };\n Base.prototype.getValueInLowCase = function (val) {\n if (!!val && typeof val == \"string\")\n return val.toLowerCase();\n return val;\n };\n return Base;\n}());\n\nvar ArrayChanges = /** @class */ (function () {\n function ArrayChanges(index, deleteCount, itemsToAdd, deletedItems) {\n this.index = index;\n this.deleteCount = deleteCount;\n this.itemsToAdd = itemsToAdd;\n this.deletedItems = deletedItems;\n }\n return ArrayChanges;\n}());\n\nvar SurveyError = /** @class */ (function () {\n function SurveyError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n this.text = text;\n this.errorOwner = errorOwner;\n this.visible = true;\n }\n Object.defineProperty(SurveyError.prototype, \"locText\", {\n get: function () {\n if (!this.locTextValue) {\n this.locTextValue = new __WEBPACK_IMPORTED_MODULE_1__localizablestring__[\"a\" /* LocalizableString */](this.errorOwner, true);\n this.locTextValue.text = this.getText();\n }\n return this.locTextValue;\n },\n enumerable: true,\n configurable: true\n });\n SurveyError.prototype.getText = function () {\n var res = this.text;\n if (!res)\n res = this.getDefaultText();\n if (!!this.errorOwner) {\n res = this.errorOwner.getErrorCustomText(res, this);\n }\n return res;\n };\n SurveyError.prototype.getErrorType = function () {\n return \"base\";\n };\n SurveyError.prototype.getDefaultText = function () {\n return \"\";\n };\n return SurveyError;\n}());\n\nvar SurveyElement = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyElement, _super);\n function SurveyElement(name) {\n var _this = _super.call(this) || this;\n _this.selectedElementInDesignValue = _this;\n _this.disableDesignActions = SurveyElement.CreateDisabledDesignElements;\n _this.isContentElement = false;\n _this.name = name;\n _this.createNewArray(\"errors\");\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"isReadOnly\", function () {\n self.onReadOnlyChanged();\n });\n return _this;\n }\n SurveyElement.ScrollElementToTop = function (elementId) {\n if (!elementId)\n return false;\n var el = document.getElementById(elementId);\n if (!el || !el.scrollIntoView)\n return false;\n var elemTop = el.getBoundingClientRect().top;\n if (elemTop < 0)\n el.scrollIntoView();\n return elemTop < 0;\n };\n SurveyElement.GetFirstNonTextElement = function (elements, removeSpaces) {\n if (removeSpaces === void 0) { removeSpaces = false; }\n if (!elements || !elements.length || elements.length == 0)\n return null;\n if (removeSpaces) {\n var tEl = elements[0];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n tEl = elements[elements.length - 1];\n if (tEl.nodeName === \"#text\")\n tEl.data = \"\";\n }\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].nodeName != \"#text\" && elements[i].nodeName != \"#comment\")\n return elements[i];\n }\n return null;\n };\n SurveyElement.FocusElement = function (elementId) {\n if (!elementId)\n return false;\n var el = document.getElementById(elementId);\n if (el) {\n el.focus();\n return true;\n }\n return false;\n };\n SurveyElement.prototype.setSurveyImpl = function (value) {\n this.surveyImplValue = value;\n if (!this.surveyImplValue)\n return;\n this.surveyDataValue = this.surveyImplValue.geSurveyData();\n this.surveyValue = this.surveyImplValue.getSurvey();\n this.textProcessorValue = this.surveyImplValue.getTextProcessor();\n this.onSetData();\n };\n Object.defineProperty(SurveyElement.prototype, \"surveyImpl\", {\n get: function () {\n return this.surveyImplValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"data\", {\n get: function () {\n return this.surveyDataValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"survey\", {\n /**\n * Returns the survey object.\n */\n get: function () {\n if (!!this.surveyValue)\n return this.surveyValue;\n if (!!this.surveyImplValue) {\n this.surveyValue = this.surveyImplValue.getSurvey();\n }\n return this.surveyValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isDesignMode\", {\n /**\n * Returns true if the question in design mode right now.\n */\n get: function () {\n return !!this.survey && this.survey.isDesignMode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return (!!this.survey &&\n this.survey.areInvisibleElementsShowing &&\n !this.isContentElement);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isVisible\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isReadOnly\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"readOnly\", {\n /**\n * Set it to true to make an element question/panel/page readonly.\n * Please note, this property is hidden for question without input, for example html question.\n * @see enableIf\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"readOnly\", false);\n },\n set: function (val) {\n if (this.readOnly == val)\n return;\n this.setPropertyValue(\"readOnly\", val);\n if (!this.isLoadingFromJson) {\n this.setPropertyValue(\"isReadOnly\", this.isReadOnly);\n }\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.onReadOnlyChanged = function () {\n if (!!this.readOnlyChangedCallback) {\n this.readOnlyChangedCallback();\n }\n };\n SurveyElement.prototype.updateElementCss = function () { };\n SurveyElement.prototype.getIsLoadingFromJson = function () {\n if (_super.prototype.getIsLoadingFromJson.call(this))\n return true;\n return this.survey ? this.survey.isLoadingFromJson : false;\n };\n Object.defineProperty(SurveyElement.prototype, \"name\", {\n /**\n * This is the identifier of a survey element - question or panel.\n * @see valueName\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n var oldValue = this.name;\n this.setPropertyValue(\"name\", val);\n if (!this.isLoadingFromJson && !!oldValue) {\n this.onNameChanged(oldValue);\n }\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.onNameChanged = function (oldValue) { };\n Object.defineProperty(SurveyElement.prototype, \"errors\", {\n /**\n * The list of errors. It is created by callig hasErrors functions\n * @see hasErrors\n */\n get: function () {\n return this.getPropertyValue(\"errors\");\n },\n set: function (val) {\n this.setPropertyValue(\"errors\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"containsErrors\", {\n /**\n * Returns true if a question or a container (panel/page) or their chidren have an error.\n * The value can be out of date. hasErrors function should be called to get the correct value.\n */\n get: function () {\n return this.getPropertyValue(\"containsErrors\", false);\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.updateContainsErrors = function () {\n this.setPropertyValue(\"containsErrors\", this.getContainsErrors());\n };\n SurveyElement.prototype.getContainsErrors = function () {\n return this.errors.length > 0;\n };\n SurveyElement.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return [];\n };\n Object.defineProperty(SurveyElement.prototype, \"selectedElementInDesign\", {\n get: function () {\n return this.selectedElementInDesignValue;\n },\n set: function (val) {\n this.selectedElementInDesignValue = val;\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.updateCustomWidgets = function () { };\n SurveyElement.prototype.onSurveyLoad = function () { };\n SurveyElement.prototype.onFirstRendering = function () { };\n SurveyElement.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.survey) {\n this.onSurveyLoad();\n }\n };\n SurveyElement.prototype.setVisibleIndex = function (index) {\n return 0;\n };\n Object.defineProperty(SurveyElement.prototype, \"isPage\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n /**\n * Return false if it is not panel.\n */\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.delete = function () { };\n SurveyElement.prototype.removeSelfFromList = function (list) {\n if (!list || !Array.isArray(list))\n return;\n var index = list.indexOf(this);\n if (index > -1) {\n list.splice(index, 1);\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"textProcessor\", {\n get: function () {\n return this.textProcessorValue;\n },\n enumerable: true,\n configurable: true\n });\n SurveyElement.prototype.getProcessedHtml = function (html) {\n if (!html || !this.textProcessor)\n return html;\n return this.textProcessor.processText(html, true);\n };\n SurveyElement.prototype.onSetData = function () { };\n SurveyElement.prototype.getPage = function (parent) {\n while (parent && parent.parent)\n parent = parent.parent;\n if (parent && parent.getType() == \"page\")\n return parent;\n return null;\n };\n SurveyElement.prototype.moveToBase = function (parent, container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n if (!container)\n return false;\n parent.removeElement(this);\n var index = -1;\n if (__WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].isNumber(insertBefore)) {\n index = parseInt(insertBefore);\n }\n if (index == -1 && !!insertBefore && !!insertBefore.getType) {\n index = container.indexOf(insertBefore);\n }\n container.addElement(this, index);\n return true;\n };\n SurveyElement.prototype.setPage = function (parent, val) {\n var oldPage = this.getPage(parent);\n if (oldPage === val)\n return;\n if (parent)\n parent.removeElement(this);\n if (val) {\n val.addElement(this, -1);\n }\n };\n SurveyElement.CreateDisabledDesignElements = false;\n return SurveyElement;\n}(Base));\n\nvar Event = /** @class */ (function () {\n function Event() {\n }\n Object.defineProperty(Event.prototype, \"isEmpty\", {\n get: function () {\n return this.callbacks == null || this.callbacks.length == 0;\n },\n enumerable: true,\n configurable: true\n });\n Event.prototype.fire = function (sender, options) {\n if (this.callbacks == null)\n return;\n for (var i = 0; i < this.callbacks.length; i++) {\n var callResult = this.callbacks[i](sender, options);\n }\n };\n Event.prototype.clear = function () {\n this.callbacks = [];\n };\n Event.prototype.add = function (func) {\n if (this.hasFunc(func))\n return;\n if (this.callbacks == null) {\n this.callbacks = new Array();\n }\n this.callbacks.push(func);\n };\n Event.prototype.remove = function (func) {\n if (this.hasFunc(func)) {\n var index = this.callbacks.indexOf(func, 0);\n this.callbacks.splice(index, 1);\n }\n };\n Event.prototype.hasFunc = function (func) {\n if (this.callbacks == null)\n return false;\n return this.callbacks.indexOf(func, 0) > -1;\n };\n return Event;\n}());\n\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return settings; });\n/**\n * Global survey settings\n */\nvar settings = {\n /**\n * The prefix that uses to store the question comment, as {questionName} + {commentPrefix}.\n * The default\n */\n commentPrefix: \"-Comment\",\n /**\n * Encode parameter on calling restfull web API\n */\n webserviceEncodeParameters: true,\n /**\n * SurveyJS web service API url\n */\n surveyServiceUrl: \"https://api.surveyjs.io/public/v1/Survey\",\n /**\n * separator that can allow to set value and text of ItemValue object in one string as: \"value|text\"\n */\n itemValueSeparator: \"|\",\n /**\n * default locale name for localizable strings that uses during serialization, {\"default\": \"My text\", \"de\": \"Mein Text\"}\n */\n defaultLocaleName: \"default\",\n /**\n * Default row name for matrix (single choice)\n */\n matrixDefaultRowName: \"default\",\n /**\n * Default cell type for dropdown and dynamic matrices\n */\n matrixDefaultCellType: \"dropdown\",\n /**\n * Total value postfix for dropdown and dynamic matrices. The total value stores as: {matrixName} + {postfix}\n */\n matrixTotalValuePostFix: \"-total\",\n /**\n * Maximum row count in dynamic matrix\n */\n matrixMaximumRowCount: 1000,\n /**\n * Maximum panel count in dynamic panel\n */\n panelMaximumPanelCount: 100,\n /**\n * Maximum rate value count in rating question\n */\n ratingMaximumRateValueCount: 20,\n /**\n * Disable the question while choices are getting from the web service\n */\n disableOnGettingChoicesFromWeb: false,\n /**\n * Set to true to always serialize the localization string as object even if there is only one value for default locale. Instead of string \"MyStr\" serialize as {default: \"MyStr\"}\n */\n serializeLocalizableStringAsObject: false,\n /**\n * Set to false to hide empty page title and description in design mode\n */\n allowShowEmptyTitleInDesignMode: true,\n /**\n * Set to false to hide empty page description in design mode\n */\n allowShowEmptyDescriptionInDesignMode: true,\n /**\n * Set this property to true to execute the complete trigger on value change instead of on next page.\n */\n executeCompleteTriggerOnValueChanged: false,\n /**\n * Set this property to change readOnlyCommentRenderMode: \"textarea\" (default) or (div)\n */\n readOnlyCommentRenderMode: \"textarea\",\n /**\n * Override this function, set your function, if you want to show your own dialog confirm window instead of standard browser window.\n * @param message\n */\n confirmActionFunc: function (message) {\n return confirm(message);\n },\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n minWidth: \"300px\",\n /**\n * Set this property to change the default value of the minWidth constraint\n */\n maxWidth: \"initial\",\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__validator__ = __webpack_require__(29);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__ = __webpack_require__(81);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Question; });\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A base class for all questions.\n */\nvar Question = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Question, _super);\n function Question(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.conditionRunner = null;\n _this.isCustomWidgetRequested = false;\n _this.customWidgetData = { isNeedRender: true };\n _this.isReadyValue = true;\n /**\n * The event is fired when isReady property of question is changed.\n *
options.question - the question\n *
options.isReady - current value of isReady\n *
options.oldIsReady - old value of isReady\n */\n _this.onReadyChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n _this.isRunningValidatorsValue = false;\n _this.isValueChangedInSurvey = false;\n _this.allowNotifyValueChanged = true;\n _this.locNotificationInData = false;\n //ILocalizableOwner\n _this.locOwner = null;\n _this.id = Question.getQuestionId();\n _this.onCreating();\n var self = _this;\n _this.createNewArray(\"validators\", function (validator) {\n validator.errorOwner = self;\n });\n var locTitleValue = _this.createLocalizableString(\"title\", _this, true);\n locTitleValue.onGetTextCallback = function (text) {\n if (!text) {\n text = self.name;\n }\n if (!self.survey)\n return text;\n return self.survey.getUpdatedQuestionTitle(this, text);\n };\n _this.locProcessedTitle = new __WEBPACK_IMPORTED_MODULE_7__localizablestring__[\"a\" /* LocalizableString */](_this, true);\n _this.locProcessedTitle.sharedData = locTitleValue;\n _this.createLocalizableString(\"description\", _this, true);\n var locCommentText = _this.createLocalizableString(\"commentText\", _this, true);\n locCommentText.onGetTextCallback = function (text) {\n return !!text ? text : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherItemText\");\n };\n _this.createLocalizableString(\"requiredErrorText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n self.updateElementCss();\n if (!!self.parent) {\n self.parent.elementWidthChanged(self);\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"rightIndent\"], function () {\n self.onIndentChanged();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"hasComment\", \"hasOther\"], function () {\n self.initCommentFromSurvey();\n });\n return _this;\n }\n Question.getQuestionId = function () {\n return \"sq_\" + Question.questionCounter++;\n };\n Question.prototype.isReadOnlyRenderDiv = function () {\n return this.isReadOnly && __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].readOnlyCommentRenderMode === \"div\";\n };\n Question.prototype.getValueName = function () {\n if (!!this.valueName)\n return this.valueName.toString();\n return this.name;\n };\n Object.defineProperty(Question.prototype, \"valueName\", {\n /**\n * Use this property if you want to store the question result in the name different from the question name.\n * Question name should be unique in the survey and valueName could be not unique. It allows to share data between several questions with the same valueName.\n * The library set the value automatically if the question.name property is not valid. For example, if it contains the period '.' symbol.\n * In this case if you set the question.name property to 'x.y' then the valueName becomes 'x y'.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see name\n */\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n var oldValueName = this.getValueName();\n this.setPropertyValue(\"valueName\", val);\n this.onValueNameChanged(oldValueName);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.onValueNameChanged = function (oldValue) {\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, this.name, !!oldValue ? oldValue : this.name);\n this.initDataFromSurvey();\n };\n Question.prototype.onNameChanged = function (oldValue) {\n if (!this.survey)\n return;\n this.survey.questionRenamed(this, oldValue, this.valueName ? this.valueName : oldValue);\n };\n Object.defineProperty(Question.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get is question ready to use\n */\n Question.prototype.choicesLoaded = function () { };\n Object.defineProperty(Question.prototype, \"page\", {\n /**\n * Get/set the page where the question is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getPanel = function () {\n return null;\n };\n Question.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n Object.defineProperty(Question.prototype, \"isFlowLayout\", {\n get: function () {\n return this.getLayoutType() === \"flow\";\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getLayoutType = function () {\n if (!!this.parent)\n return this.parent.getChildrenLayoutType();\n return \"row\";\n };\n Question.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(Question.prototype, \"visible\", {\n /**\n * Use it to get/set the question visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n if (val == this.visible)\n return;\n this.setPropertyValue(\"visible\", val);\n this.onVisibleChanged();\n this.notifySurveyVisibilityChanged();\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!this.isVisible && this.errors && this.errors.length > 0) {\n this.errors = [];\n }\n };\n Object.defineProperty(Question.prototype, \"useDisplayValuesInTitle\", {\n /**\n * Use it to choose how other question values will be rendered in title if referenced in {}.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"useDisplayValuesInTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useDisplayValuesInTitle\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes visible and if it returns false the Question becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n this.runConditions();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isVisible\", {\n /**\n * Returns true if the question is visible or survey is in design mode right now.\n */\n get: function () {\n if (this.survey && this.survey.areEmptyElementsHidden && this.isEmpty())\n return false;\n return this.visible || this.areInvisibleElementsShowing;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the question in the survey. It can be from 0 to all visible questions count - 1\n * The visibleIndex is -1 if the title is 'hidden' or hideNumber is true\n * @see titleLocation\n * @see hideNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hideNumber\", {\n /**\n * Set hideNumber to true to stop showing the number for this question. The question will not be counter\n * @see visibleIndex\n * @see titleLocation\n */\n get: function () {\n return this.getPropertyValue(\"hideNumber\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideNumber\", val);\n this.notifySurveyVisibilityChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isAllowTitleLeft\", {\n /**\n * Returns true if the question may have a title located on the left\n */\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the type of the object as a string as it represents in the json.\n */\n Question.prototype.getType = function () {\n return \"question\";\n };\n /**\n * Move question to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the question to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n Question.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Question.prototype.runConditions = function () {\n if (this.data && !this.isLoadingFromJson && !this.isDesignMode) {\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n this.locStrsChanged();\n }\n };\n Question.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.survey) {\n this.survey.questionCreated(this);\n }\n if (this.survey && this.survey.isDesignMode && !this.isDesignMode) {\n this.onVisibleChanged();\n }\n this.runConditions();\n };\n Question.prototype.getDataFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : null;\n };\n Question.prototype.getDataFilteredProperties = function () {\n return !!this.data ? this.data.getFilteredProperties() : null;\n };\n Object.defineProperty(Question.prototype, \"parent\", {\n /**\n * A parent element. It can be panel or page.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n this.updateElementCss();\n this.onParentChanged();\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.onParentChanged = function () { };\n Object.defineProperty(Question.prototype, \"hasTitle\", {\n /**\n * Returns false if the question doesn't have a title property, for example: QuestionHtmlModel, or titleLocation property equals to \"hidden\"\n * @see titleLocation\n */\n get: function () {\n return this.getTitleLocation() !== \"hidden\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"titleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"titleLocation\");\n },\n set: function (value) {\n var isVisibilityChanged = this.titleLocation == \"hidden\" || value == \"hidden\";\n this.setPropertyValue(\"titleLocation\", value.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.updateElementCss();\n }\n if (isVisibilityChanged) {\n this.notifySurveyVisibilityChanged();\n }\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.notifySurveyVisibilityChanged = function () {\n if (!this.survey || this.isLoadingFromJson)\n return;\n this.survey.questionVisibilityChanged(this, this.isVisible);\n };\n /**\n * Return the title location based on question titleLocation property and QuestionTitleLocation of it's parents\n * @see titleLocation\n * @see PanelModelBase.QuestionTitleLocation\n * @see SurveyModel.QuestionTitleLocation\n */\n Question.prototype.getTitleLocation = function () {\n if (this.isFlowLayout)\n return \"hidden\";\n var location = this.getTitleLocationCore();\n if (location === \"left\" && !this.isAllowTitleLeft)\n location = \"top\";\n return location;\n };\n Question.prototype.getTitleLocationCore = function () {\n if (this.titleLocation !== \"default\")\n return this.titleLocation;\n if (!!this.parent)\n return this.parent.getQuestionTitleLocation();\n if (!!this.survey)\n return this.survey.questionTitleLocation;\n return \"top\";\n };\n Object.defineProperty(Question.prototype, \"hasTitleOnLeft\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"left\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnTop\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnBottom\", {\n get: function () {\n return this.hasTitle && this.getTitleLocation() === \"bottom\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasTitleOnLeftTop\", {\n get: function () {\n if (!this.hasTitle)\n return false;\n var location = this.getTitleLocation();\n return location === \"left\" || location === \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"errorLocation\", {\n get: function () {\n return this.survey ? this.survey.questionErrorLocation : \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasInput\", {\n /**\n * Returns false if the question doesn't have an input element, for example: QuestionHtmlModel\n * @see hasSingleInput\n */\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasSingleInput\", {\n /**\n * Returns false if the question doesn't have an input element or have multiple inputs: matrices or panel dynamic\n * @see hasInput\n */\n get: function () {\n return this.hasInput;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"inputId\", {\n get: function () {\n return this.id + \"i\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"title\", {\n /**\n * Question title. Use survey questionTitleTemplate property to change the title question is rendered. If it is empty, then question name property is used.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.getLocalizableStringText(\"title\", this.name);\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"description\", {\n /**\n * Question description. It renders under question title by using smaller font. Unlike the title, description can be empty.\n * Please note, this property is hidden for questions without input, for example html question.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"description\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"descriptionLocation\", {\n /**\n * Question description location. By default, value is \"default\" and it depends on survey questionDescriptionLocation property\n * You may change it to \"underInput\" to render it under question input or \"underTitle\" to rendered it under title.\n * @see description\n * @see Survey.questionDescriptionLocation\n */\n get: function () {\n return this.getPropertyValue(\"descriptionLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"descriptionLocation\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderTitle\", {\n get: function () {\n return this.getDescriptionLocation() == \"underTitle\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasDescriptionUnderInput\", {\n get: function () {\n return this.getDescriptionLocation() == \"underInput\";\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getDescriptionLocation = function () {\n if (this.descriptionLocation !== \"default\")\n return this.descriptionLocation;\n return !!this.survey\n ? this.survey.questionDescriptionLocation\n : \"underTitle\";\n };\n Object.defineProperty(Question.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"commentText\", {\n /**\n * Use it to get or set the comment value.\n */\n get: function () {\n return this.getLocalizableStringText(\"commentText\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"commentText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"locCommentText\", {\n get: function () {\n return this.getLocalizableString(\"commentText\");\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns a copy of question errors survey. For some questions like matrix and panel dynamic it includes the errors of nested questions.\n */\n Question.prototype.getAllErrors = function () {\n return this.errors.slice();\n };\n Object.defineProperty(Question.prototype, \"customWidget\", {\n /**\n * The link to the custom widget.\n */\n get: function () {\n if (!this.isCustomWidgetRequested && !this.customWidgetValue) {\n this.isCustomWidgetRequested = true;\n this.updateCustomWidget();\n }\n return this.customWidgetValue;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.updateCustomWidget = function () {\n this.customWidgetValue = __WEBPACK_IMPORTED_MODULE_9__questionCustomWidgets__[\"a\" /* CustomWidgetCollection */].Instance.getCustomWidget(this);\n };\n Object.defineProperty(Question.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.afterRenderQuestionElement = function (el) {\n if (!this.survey || !this.hasSingleInput)\n return;\n this.survey.afterRenderQuestionInput(this, el);\n };\n Question.prototype.afterRender = function (el) {\n if (!this.survey)\n return;\n this.survey.afterRenderQuestion(this, el);\n if (!!this.afterRenderQuestionCallback) {\n this.afterRenderQuestionCallback(this, el);\n }\n };\n Question.prototype.beforeDestoyQuestionElement = function (el) { };\n Object.defineProperty(Question.prototype, \"processedTitle\", {\n /**\n * Returns the rendred question title.\n */\n get: function () {\n var res = this.locProcessedTitle.textOrHtml;\n return res ? res : this.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"fullTitle\", {\n /**\n * Returns the title after processing the question template.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"questionTitlePattern\", {\n get: function () {\n return !!this.survey ? this.survey.questionTitlePattern : \"numTitleRequire\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextOnStart\", {\n get: function () {\n return this.isRequired && this.questionTitlePattern == \"requireNumTitle\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextBeforeTitle\", {\n get: function () {\n return this.isRequired && this.questionTitlePattern == \"numRequireTitle\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isRequireTextAfterTitle\", {\n get: function () {\n return this.isRequired && this.questionTitlePattern == \"numTitleRequire\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"startWithNewLine\", {\n /**\n * The Question renders on the new line if the property is true. If the property is false, the question tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (val) {\n if (this.startWithNewLine == val)\n return;\n this.setPropertyValue(\"startWithNewLine\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"cssClasses\", {\n /**\n * Returns all css classes that used for rendering the question. You may use survey.updateQuestionCssClasses event to override css classes for a question.\n * @see SurveyModel.updateQuestionCssClasses\n */\n get: function () {\n var css = this.css;\n var classes = { error: {} };\n this.copyCssClasses(classes, css.question);\n this.copyCssClasses(classes.error, css.error);\n this.updateCssClasses(classes, css);\n if (this.survey) {\n this.survey.updateQuestionCssClasses(this, classes);\n }\n this.updateElementCssCore(classes);\n return classes;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"cssRoot\", {\n get: function () {\n return this.getPropertyValue(\"cssRoot\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setCssRoot = function (val) {\n this.setPropertyValue(\"cssRoot\", val);\n };\n Question.prototype.getCssRoot = function (cssClasses) {\n var res = this.isFlowLayout && !this.isDesignMode\n ? cssClasses.flowRoot\n : cssClasses.mainRoot;\n if (!res)\n res = \"\";\n if (!this.isFlowLayout &&\n this.hasTitleOnLeft &&\n !!cssClasses.titleLeftRoot) {\n res += \" \" + cssClasses.titleLeftRoot;\n }\n if (this.errors.length > 0 && !!cssClasses.hasError) {\n res += \" \" + cssClasses.hasError;\n }\n if (cssClasses.small && !this.width) {\n res += \" \" + cssClasses.small;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssHeader\", {\n get: function () {\n return this.getPropertyValue(\"cssHeader\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setCssHeader = function (val) {\n this.setPropertyValue(\"cssHeader\", val);\n };\n Question.prototype.getCssHeader = function (cssClasses) {\n var res = cssClasses.header || \"\";\n if (this.hasTitleOnTop && !!cssClasses.headerTop) {\n res += \" \" + cssClasses.headerTop;\n }\n if (this.hasTitleOnLeft && !!cssClasses.headerLeft) {\n res += \" \" + cssClasses.headerLeft;\n }\n if (this.hasTitleOnBottom && !!cssClasses.headerBottom) {\n res += \" \" + cssClasses.headerBottom;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssContent\", {\n get: function () {\n return this.getPropertyValue(\"cssContent\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setCssContent = function (val) {\n this.setPropertyValue(\"cssContent\", val);\n };\n Question.prototype.getCssContent = function (cssClasses) {\n var res = cssClasses.content || \"\";\n if (this.hasTitleOnLeft && !!cssClasses.contentLeft) {\n res += \" \" + cssClasses.contentLeft;\n }\n return res;\n };\n Object.defineProperty(Question.prototype, \"cssTitle\", {\n get: function () {\n return this.getPropertyValue(\"cssTitle\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setCssTitle = function (val) {\n this.setPropertyValue(\"cssTitle\", val);\n };\n Question.prototype.getCssTitle = function (cssClasses) {\n var result = cssClasses.title;\n if (this.containsErrors) {\n if (!!cssClasses.titleOnError) {\n result += \" \" + cssClasses.titleOnError;\n }\n }\n else if (this.isAnswered && !!cssClasses.titleOnAnswer) {\n result += \" \" + cssClasses.titleOnAnswer;\n }\n return result;\n };\n Object.defineProperty(Question.prototype, \"cssError\", {\n get: function () {\n return this.getPropertyValue(\"cssError\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setCssError = function (val) {\n this.setPropertyValue(\"cssError\", val);\n };\n //TODO was not removed from other places\n Question.prototype.getCssError = function (cssClasses) {\n var res = cssClasses.error.root || \"\";\n if (this.errorLocation == \"top\") {\n if (!!cssClasses.error.locationTop) {\n res += \" \" + cssClasses.error.locationTop;\n }\n }\n else if (this.errorLocation === \"bottom\" &&\n !!cssClasses.error.locationBottom) {\n res += \" \" + cssClasses.error.locationBottom;\n }\n return res;\n };\n Question.prototype.updateElementCss = function () {\n if (this.isLoadingFromJson)\n return;\n this.updateElementCssCore(this.cssClasses);\n };\n Question.prototype.updateElementCssCore = function (cssClasses) {\n this.setCssRoot(this.getCssRoot(cssClasses));\n this.setCssHeader(this.getCssHeader(cssClasses));\n this.setCssContent(this.getCssContent(cssClasses));\n this.setCssTitle(this.getCssTitle(cssClasses));\n this.setCssError(this.getCssError(cssClasses));\n };\n Question.prototype.updateCssClasses = function (res, css) {\n if (!css.question)\n return;\n if (this.isRequired) {\n if (!!css.question.required) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n if (css.question.titleRequired) {\n res.title += \" \" + css.question.titleRequired;\n }\n }\n var objCss = css[this.getCssType()];\n if (objCss === undefined || objCss === null)\n return;\n if (typeof objCss === \"string\" || objCss instanceof String) {\n res.root = (res.root ? res.root + \" \" : \"\") + objCss;\n }\n else {\n for (var key in objCss) {\n res[key] = objCss[key];\n }\n }\n };\n Question.prototype.getCssType = function () {\n return this.getType();\n };\n Object.defineProperty(Question.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"width\", {\n /**\n * Use it to set the specific width to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"minWidth\", {\n /**\n * Use it to set the specific minWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"minWidth\", __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].minWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"maxWidth\", {\n /**\n * Use it to set the specific maxWidth constraint to the question like css style (%, px, em etc).\n */\n get: function () {\n return this.getPropertyValue(\"maxWidth\", __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].maxWidth);\n },\n set: function (val) {\n this.setPropertyValue(\"maxWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"renderWidth\", {\n /**\n * The rendered width of the question.\n */\n get: function () {\n return this.getPropertyValue(\"renderWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"indent\", {\n /**\n * Set it different from 0 to increase the left padding.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"rightIndent\", {\n /**\n * Set it different from 0 to increase the right padding.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddintLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddintLeft\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.onIndentChanged = function () {\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n Question.prototype.getIndentSize = function (indent) {\n if (indent < 1)\n return \"\";\n return indent * this.cssClasses.indent + \"px\";\n };\n /**\n * Move the focus to the input of this question.\n * @param onError set this parameter to true, to focus the input with the first error, other wise the first input will be focused.\n */\n Question.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, this, null, this.id);\n }\n var id = !onError\n ? this.getFirstInputElementId()\n : this.getFirstErrorInputElementId();\n if (__WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */].FocusElement(id)) {\n this.fireCallback(this.focusCallback);\n }\n };\n Question.prototype.fireCallback = function (callback) {\n if (callback)\n callback();\n };\n Question.prototype.getOthersMaxLength = function () {\n if (!this.survey)\n return null;\n return this.survey.maxOthersLength > 0 ? this.survey.maxOthersLength : null;\n };\n Question.prototype.onCreating = function () { };\n Question.prototype.getFirstInputElementId = function () {\n return this.inputId;\n };\n Question.prototype.getFirstErrorInputElementId = function () {\n return this.getFirstInputElementId();\n };\n Question.prototype.getProcessedTextValue = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n textValue.isExists =\n Object.keys(Question.TextPreprocessorValuesMap).indexOf(name) !== -1 ||\n this[textValue.name] !== undefined;\n textValue.value = this[Question.TextPreprocessorValuesMap[name] || textValue.name];\n };\n Question.prototype.supportComment = function () {\n return false;\n };\n Question.prototype.supportOther = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the question a required. If a user doesn't answer the question then a validation error will be generated.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n if (this.isRequired == val)\n return;\n this.setPropertyValue(\"isRequired\", val);\n if (!this.isLoadingFromJson) {\n this.locTitle.onChanged();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredIf\", {\n /**\n * An expression that returns true or false. If it returns true the Question becomes required and an end-user has to answer it.\n * If it returns false the Question then an end-user may not answer it the Question maybe empty.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then isRequired property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see isRequired\n */\n get: function () {\n return this.getPropertyValue(\"requiredIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredIf\", val);\n this.runConditions();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasComment\", {\n /**\n * Set it to true, to add a comment for the question.\n */\n get: function () {\n return this.getPropertyValue(\"hasComment\", false);\n },\n set: function (val) {\n if (!this.supportComment())\n return;\n this.setPropertyValue(\"hasComment\", val);\n if (this.hasComment)\n this.hasOther = false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"id\", {\n /**\n * The unique identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaTitleId\", {\n get: function () {\n return this.id + \"_ariaTitle\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaRole\", {\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"hasOther\", {\n get: function () {\n return this.getPropertyValue(\"hasOther\", false);\n },\n set: function (val) {\n if (!this.supportOther() || this.hasOther == val)\n return;\n this.setPropertyValue(\"hasOther\", val);\n if (this.hasOther)\n this.hasComment = false;\n this.hasOtherChanged();\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.hasOtherChanged = function () { };\n Object.defineProperty(Question.prototype, \"requireUpdateCommentValue\", {\n get: function () {\n return this.hasComment || this.hasOther;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Question becomes read only and an end-user will not able to answer on the qustion. The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * Please note, this property is hidden for question without input, for example html question.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n this.runConditions();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Run visibleIf and enableIf expressions. If visibleIf or/and enabledIf are not empty, then the results of performing the expression (true or false) set to the visible/readOnly properties.\n * @param values Typically survey results\n * @see visible\n * @see visibleIf\n * @see readOnly\n * @see enableIf\n */\n Question.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode)\n return;\n if (!properties)\n properties = {};\n properties[\"question\"] = this;\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleIfCondition(values, properties);\n }\n this.runEnableIfCondition(values, properties);\n this.runRequiredIfCondition(values, properties);\n };\n Question.prototype.runVisibleIfCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n if (!this.conditionRunner)\n this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_8__conditions__[\"b\" /* ConditionRunner */](this.visibleIf);\n this.conditionRunner.expression = this.visibleIf;\n this.conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n this.conditionRunner.run(values, properties);\n };\n Question.prototype.runEnableIfCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n if (!this.conditionEnabelRunner)\n this.conditionEnabelRunner = new __WEBPACK_IMPORTED_MODULE_8__conditions__[\"b\" /* ConditionRunner */](this.enableIf);\n this.conditionEnabelRunner.expression = this.enableIf;\n this.conditionEnabelRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n this.conditionEnabelRunner.run(values, properties);\n };\n Question.prototype.runRequiredIfCondition = function (values, properties) {\n var _this = this;\n if (!this.requiredIf)\n return;\n if (!this.conditionRequiredRunner)\n this.conditionRequiredRunner = new __WEBPACK_IMPORTED_MODULE_8__conditions__[\"b\" /* ConditionRunner */](this.requiredIf);\n this.conditionRequiredRunner.expression = this.requiredIf;\n this.conditionRequiredRunner.onRunComplete = function (res) {\n _this.isRequired = res;\n };\n this.conditionRequiredRunner.run(values, properties);\n };\n Object.defineProperty(Question.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getNumberByIndex(this.visibleIndex, this.getStartIndex());\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n Question.prototype.onSurveyLoad = function () {\n this.fireCallback(this.surveyLoadCallback);\n this.updateValueWithDefaults();\n this.updateDisplayValue();\n this.updateElementCss();\n };\n Question.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n this.initDataFromSurvey();\n this.onSurveyValueChanged(this.value);\n this.updateValueWithDefaults();\n this.updateElementCss();\n };\n Question.prototype.initDataFromSurvey = function () {\n if (!!this.data) {\n this.updateValueFromSurvey(this.data.getValue(this.getValueName()));\n this.initCommentFromSurvey();\n }\n };\n Question.prototype.initCommentFromSurvey = function () {\n if (!!this.data && this.requireUpdateCommentValue) {\n this.updateCommentFromSurvey(this.data.getComment(this.getValueName()));\n }\n else {\n this.updateCommentFromSurvey(\"\");\n }\n };\n Object.defineProperty(Question.prototype, \"questionValue\", {\n get: function () {\n return this.getPropertyValue(\"value\");\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"questionComment\", {\n get: function () {\n return this.getPropertyValue(\"comment\");\n },\n set: function (val) {\n this.setPropertyValue(\"comment\", val);\n this.fireCallback(this.commentChangedCallback);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"value\", {\n /**\n * Get/Set the question value.\n * @see SurveyMode.setValue\n * @see SurveyMode.getValue\n */\n get: function () {\n return this.getValueCore();\n },\n set: function (newValue) {\n this.setNewValue(newValue);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.clearValue = function () {\n this.value = null;\n this.comment = null;\n };\n Question.prototype.createValueCopy = function () {\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getUnbindValue(this.value);\n };\n Question.prototype.canClearValueAsInvisible = function () {\n if (this.isVisible && this.isParentVisible)\n return false;\n if (!!this.page && this.page.isStarted)\n return false;\n if (!this.survey || !this.valueName)\n return true;\n return !this.survey.hasVisibleQuestionByValueName(this.valueName);\n };\n Object.defineProperty(Question.prototype, \"isParentVisible\", {\n get: function () {\n var parent = this.parent;\n while (parent) {\n if (!parent.isVisible)\n return false;\n parent = parent.parent;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.clearValueIfInvisible = function () {\n if (this.canClearValueAsInvisible()) {\n this.clearValue();\n }\n };\n Object.defineProperty(Question.prototype, \"displayValue\", {\n get: function () {\n this.updateDisplayValue();\n return this.getPropertyValue(\"displayValue\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.updateDisplayValue = function () {\n if (this.isLoadingFromJson)\n return;\n this.setPropertyValue(\"displayValue\", this.getDisplayValue(true));\n };\n /**\n * Return the question value as a display text. For example, for dropdown, it would return the item text instead of item value.\n * @param keysAsText Set this value to true, to return key (in matrices questions) as display text as well.\n * @param value use this parameter, if you want to get display value for this value and not question.value. It is undefined by default.\n */\n Question.prototype.getDisplayValue = function (keysAsText, value) {\n if (value === void 0) { value = undefined; }\n if (this.customWidget) {\n var res = this.customWidget.getDisplayValue(this, value);\n if (res)\n return res;\n }\n value = value == undefined ? this.createValueCopy() : value;\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(value))\n return \"\";\n return this.getDisplayValueCore(keysAsText, value);\n };\n Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n return value;\n };\n Object.defineProperty(Question.prototype, \"defaultValue\", {\n /**\n * Set the default value to the question. It will be assign to the question on loading the survey from JSON or adding a question to the survey or on setting this property of the value is empty.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValue\", val);\n this.updateValueWithDefaults();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns question answer data as a plain object: with question title, name, value and displayValue.\n * For complex questions (like matrix, etc.) isNode flag is set to true and data contains array of nested objects (rows)\n * set options.includeEmpty to false if you want to skip empty answers\n */\n Question.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n if (options.includeEmpty || !this.isEmpty()) {\n var questionPlainData = {\n name: this.name,\n title: this.locTitle.renderedHtml,\n value: this.value,\n displayValue: this.displayValue,\n isNode: false,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n };\n if (options.includeQuestionTypes === true) {\n questionPlainData.questionType = this.getType();\n }\n (options.calculations || []).forEach(function (calculation) {\n questionPlainData[calculation.propertyName] = _this[calculation.propertyName];\n });\n if (this.hasComment) {\n questionPlainData.isNode = true;\n questionPlainData.data = [\n {\n name: 0,\n isComment: true,\n title: \"Comment\",\n value: __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].commentPrefix,\n displayValue: this.comment,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n },\n ];\n }\n return questionPlainData;\n }\n return undefined;\n };\n Object.defineProperty(Question.prototype, \"correctAnswer\", {\n /**\n * The correct answer on the question. Set this value if you are doing a quiz.\n * Please note, this property is hidden for question without input, for example html question.\n * @see SurveyModel.correctAnswers\n * @see SurveyModel.inCorrectAnswers\n */\n get: function () {\n return this.getPropertyValue(\"correctAnswer\");\n },\n set: function (val) {\n this.setPropertyValue(\"correctAnswer\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"quizQuestionCount\", {\n /**\n * Returns questions count: 1 for the non-matrix questions and all inner visible questions that has input(s) widgets for question of matrix types.\n * @see getQuizQuestions\n */\n get: function () {\n if (this.isVisible &&\n this.hasInput &&\n !__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(this.correctAnswer))\n return this.getQuizQuestionCount();\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"correctAnswerCount\", {\n get: function () {\n if (!this.isEmpty() && !this.isValueEmpty(this.correctAnswer))\n return this.getCorrectAnswerCount();\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getQuizQuestionCount = function () {\n return 1;\n };\n Question.prototype.getCorrectAnswerCount = function () {\n return this.isTwoValueEquals(this.value, this.correctAnswer, true) ? 1 : 0;\n };\n Question.prototype.isAnswerCorrect = function () {\n return this.correctAnswerCount == this.quizQuestionCount;\n };\n Question.prototype.updateValueWithDefaults = function () {\n if (this.isLoadingFromJson ||\n (!this.isDesignMode && this.isDefaultValueEmpty()))\n return;\n if (!this.isDesignMode && !this.isEmpty())\n return;\n if (this.isEmpty() && this.isDefaultValueEmpty())\n return;\n this.setDefaultValue();\n };\n Question.prototype.getQuestionFromArray = function (name, index) {\n return null;\n };\n Question.prototype.getDefaultValue = function () {\n return this.defaultValue;\n };\n Question.prototype.isDefaultValueEmpty = function () {\n return this.isValueEmpty(this.defaultValue);\n };\n Question.prototype.setDefaultValue = function () {\n this.value = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getUnbindValue(this.defaultValue);\n };\n Object.defineProperty(Question.prototype, \"comment\", {\n /**\n * The question comment value.\n */\n get: function () {\n return this.getQuestionComment();\n },\n set: function (newValue) {\n if (!!newValue) {\n newValue = newValue.toString().trim();\n }\n if (this.comment == newValue)\n return;\n this.setQuestionComment(newValue);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getQuestionComment = function () {\n return this.questionComment;\n };\n Question.prototype.setQuestionComment = function (newValue) {\n this.setNewComment(newValue);\n };\n /**\n * Returns true if the question value is empty\n */\n Question.prototype.isEmpty = function () {\n return this.isValueEmpty(this.value);\n };\n Object.defineProperty(Question.prototype, \"isAnswered\", {\n get: function () {\n return this.getPropertyValue(\"isAnswered\");\n },\n set: function (val) {\n this.setPropertyValue(\"isAnswered\", val);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.updateIsAnswered = function () {\n this.setPropertyValue(\"isAnswered\", this.getIsAnswered());\n };\n Question.prototype.getIsAnswered = function () {\n return !this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"validators\", {\n /**\n * The list of question validators.\n * Please note, this property is hidden for question without input, for example html question.\n */\n get: function () {\n return this.getPropertyValue(\"validators\");\n },\n set: function (val) {\n this.setPropertyValue(\"validators\", val);\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getValidators = function () {\n return this.validators;\n };\n Question.prototype.getSupportedValidators = function () {\n var res = [];\n this.addSupportedValidators(res);\n return res;\n };\n Question.prototype.addSupportedValidators = function (supportedValidators) {\n supportedValidators.push(\"expression\");\n };\n Question.prototype.addConditionObjectsByContext = function (objects, context) {\n objects.push({\n name: this.getValueName(),\n text: this.processedTitle,\n question: this,\n });\n };\n Question.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(this);\n json[\"type\"] = this.getType();\n return json;\n };\n /**\n * Returns true if there is a validation error(s) in the question.\n * @param fireCallback set it to true to show an error in UI.\n */\n Question.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var oldHasErrors = this.errors.length > 0;\n var errors = this.checkForErrors(!!rec && rec.isOnValueChanged === true);\n if (fireCallback) {\n if (!!this.survey) {\n this.survey.beforeSettingQuestionErrors(this, errors);\n }\n this.errors = errors;\n }\n this.updateContainsErrors();\n if (oldHasErrors != errors.length > 0) {\n this.updateElementCss();\n }\n return errors.length > 0;\n };\n Object.defineProperty(Question.prototype, \"currentErrorCount\", {\n /**\n * Returns the validation errors count.\n */\n get: function () {\n return this.errors.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"requiredText\", {\n /**\n * Returns the char/string for a required question.\n * @see SurveyModel.requiredText\n */\n get: function () {\n return this.survey != null && this.isRequired\n ? this.survey.requiredText\n : \"\";\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Add error into the question error list.\n * @param error\n */\n Question.prototype.addError = function (error) {\n if (!error)\n return;\n var newError = null;\n if (typeof error === \"string\" || error instanceof String) {\n newError = new __WEBPACK_IMPORTED_MODULE_5__error__[\"a\" /* CustomError */](error, this.survey);\n }\n else {\n newError = error;\n }\n this.errors.push(newError);\n };\n /**\n * Remove a particular error from the question error list.\n * @param error\n */\n Question.prototype.removeError = function (error) {\n var errors = this.errors;\n var index = errors.indexOf(error);\n if (index !== -1)\n errors.splice(index, 1);\n };\n Question.prototype.checkForErrors = function (isOnValueChanged) {\n var qErrors = new Array();\n if (this.isVisible && !this.isReadOnly) {\n this.collectErrors(qErrors, isOnValueChanged);\n }\n return qErrors;\n };\n Question.prototype.collectErrors = function (qErrors, isOnValueChanged) {\n this.onCheckForErrors(qErrors, isOnValueChanged);\n if (qErrors.length > 0 || !this.canRunValidators(isOnValueChanged))\n return;\n var errors = this.runValidators();\n if (errors.length > 0) {\n //validators may change the question value.\n qErrors.length = 0;\n for (var i = 0; i < errors.length; i++) {\n qErrors.push(errors[i]);\n }\n }\n if (this.survey && qErrors.length == 0) {\n var error = this.fireSurveyValidation();\n if (error) {\n qErrors.push(error);\n }\n }\n };\n Question.prototype.canRunValidators = function (isOnValueChanged) {\n return true;\n };\n Question.prototype.fireSurveyValidation = function () {\n if (this.validateValueCallback)\n return this.validateValueCallback();\n return this.survey ? this.survey.validateQuestion(this) : null;\n };\n Question.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n if (!isOnValueChanged && this.hasRequiredError()) {\n errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__[\"c\" /* AnswerRequiredError */](this.requiredErrorText, this));\n }\n };\n Question.prototype.hasRequiredError = function () {\n return this.isRequired && this.isEmpty();\n };\n Object.defineProperty(Question.prototype, \"isRunningValidators\", {\n get: function () {\n return this.getIsRunningValidators();\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getIsRunningValidators = function () {\n return this.isRunningValidatorsValue;\n };\n Question.prototype.runValidators = function () {\n var _this = this;\n if (!!this.validatorRunner) {\n this.validatorRunner.onAsyncCompleted = null;\n }\n this.validatorRunner = new __WEBPACK_IMPORTED_MODULE_6__validator__[\"a\" /* ValidatorRunner */]();\n this.isRunningValidatorsValue = true;\n this.validatorRunner.onAsyncCompleted = function (errors) {\n _this.doOnAsyncCompleted(errors);\n };\n return this.validatorRunner.run(this);\n };\n Question.prototype.doOnAsyncCompleted = function (errors) {\n for (var i = 0; i < errors.length; i++) {\n this.errors.push(errors[i]);\n }\n this.isRunningValidatorsValue = false;\n this.raiseOnCompletedAsyncValidators();\n };\n Question.prototype.raiseOnCompletedAsyncValidators = function () {\n if (!!this.onCompletedAsyncValidators && !this.isRunningValidators) {\n this.onCompletedAsyncValidators(this.getAllErrors().length > 0);\n this.onCompletedAsyncValidators = null;\n }\n };\n Question.prototype.setNewValue = function (newValue) {\n var oldAnswered = this.isAnswered;\n this.setNewValueInData(newValue);\n this.allowNotifyValueChanged && this.onValueChanged();\n if (this.isAnswered != oldAnswered) {\n this.updateElementCss();\n }\n };\n Question.prototype.isTextValue = function () {\n return false;\n };\n Object.defineProperty(Question.prototype, \"isSurveyInputTextUpdate\", {\n get: function () {\n return !!this.survey ? this.survey.isUpdateValueTextOnTyping : false;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getDataLocNotification = function () {\n if (this.locNotificationInData)\n return this.locNotificationInData;\n return this.isInputTextUpdate ? \"text\" : false;\n };\n Object.defineProperty(Question.prototype, \"isInputTextUpdate\", {\n get: function () {\n return this.isSurveyInputTextUpdate && this.isTextValue();\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.setNewValueInData = function (newValue) {\n newValue = this.valueToData(newValue);\n if (!this.isValueChangedInSurvey) {\n this.setValueCore(newValue);\n }\n };\n Question.prototype.getValueCore = function () {\n return this.questionValue;\n };\n Question.prototype.setValueCore = function (newValue) {\n this.setQuestionValue(newValue);\n if (this.data != null) {\n this.data.setValue(this.getValueName(), newValue, this.getDataLocNotification(), this.allowNotifyValueChanged);\n }\n };\n Question.prototype.valueFromData = function (val) {\n return val;\n };\n Question.prototype.valueToData = function (val) {\n return val;\n };\n Question.prototype.onValueChanged = function () { };\n Question.prototype.setNewComment = function (newValue) {\n this.questionComment = newValue;\n if (this.data != null) {\n this.data.setComment(this.getValueName(), newValue, this.isSurveyInputTextUpdate ? \"text\" : false);\n }\n };\n //IQuestion\n Question.prototype.updateValueFromSurvey = function (newValue) {\n newValue = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getUnbindValue(newValue);\n this.setQuestionValue(this.valueFromData(newValue));\n };\n Question.prototype.updateCommentFromSurvey = function (newValue) {\n this.questionComment = newValue;\n };\n Question.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n this.questionValue = newValue;\n this.allowNotifyValueChanged &&\n this.fireCallback(this.valueChangedCallback);\n if (updateIsAnswered)\n this.updateIsAnswered();\n };\n Question.prototype.onSurveyValueChanged = function (newValue) {\n if (this.isLoadingFromJson)\n return;\n this.updateDisplayValue();\n };\n Question.prototype.setVisibleIndex = function (val) {\n if (!this.isVisible || !this.hasTitle || this.hideNumber) {\n val = -1;\n }\n this.setPropertyValue(\"visibleIndex\", val);\n return val < 0 ? 0 : 1;\n };\n Question.prototype.removeElement = function (element) {\n return false;\n };\n Question.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Question.prototype.supportGoNextPageError = function () {\n return true;\n };\n /**\n * Call this function to remove values from the current question, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n */\n Question.prototype.clearIncorrectValues = function () { };\n Question.prototype.clearOnDeletingContainer = function () { };\n /**\n * Call this function to clear all errors in the question\n */\n Question.prototype.clearErrors = function () {\n this.errors = [];\n };\n Question.prototype.clearUnusedValues = function () { };\n Question.prototype.onAnyValueChanged = function (name) { };\n /**\n * Returns the current survey locale\n * @see SurveyModel.locale\n */\n Question.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : this.locOwner\n ? this.locOwner.getLocale()\n : \"\";\n };\n Question.prototype.getMarkdownHtml = function (text) {\n return this.survey\n ? this.survey.getSurveyMarkdownHtml(this, text)\n : this.locOwner\n ? this.locOwner.getMarkdownHtml(text)\n : null;\n };\n Question.prototype.getProcessedText = function (text) {\n if (this.textProcessor)\n return this.textProcessor.processText(text, this.useDisplayValuesInTitle);\n if (this.locOwner)\n return this.locOwner.getProcessedText(text);\n return text;\n };\n //ISurveyErrorOwner\n Question.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n //IValidatorOwner\n Question.prototype.getValidatorTitle = function () {\n return null;\n };\n Object.defineProperty(Question.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: true,\n configurable: true\n });\n Question.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : null;\n };\n Question.prototype.dispose = function () { };\n Question.TextPreprocessorValuesMap = {\n title: \"processedTitle\",\n require: \"requiredText\",\n };\n Question.questionCounter = 100;\n return Question;\n}(__WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"question\", [\n \"!name\",\n { name: \"visible:switch\", default: true },\n { name: \"useDisplayValuesInTitle:boolean\", default: true, layout: \"row\" },\n \"visibleIf:condition\",\n { name: \"width\" },\n { name: \"minWidth\", default: __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].minWidth },\n { name: \"maxWidth\", default: __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].maxWidth },\n { name: \"startWithNewLine:boolean\", default: true, layout: \"row\" },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3], layout: \"row\" },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n { name: \"title:text\", serializationProperty: \"locTitle\", layout: \"row\" },\n {\n name: \"titleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n layout: \"row\",\n },\n {\n name: \"description:text\",\n serializationProperty: \"locDescription\",\n layout: \"row\",\n },\n {\n name: \"descriptionLocation\",\n default: \"default\",\n choices: [\"default\", \"underInput\", \"underTitle\"],\n },\n {\n name: \"hideNumber:boolean\",\n dependsOn: \"titleLocation\",\n visibleIf: function (obj) {\n if (!obj) {\n return true;\n }\n if (obj.titleLocation === \"hidden\") {\n return false;\n }\n var parent = obj ? obj.parent : null;\n var numberingAllowedByParent = !parent || parent.showQuestionNumbers !== \"off\";\n if (!numberingAllowedByParent) {\n return false;\n }\n var survey = obj ? obj.survey : null;\n return (!survey ||\n survey.showQuestionNumbers !== \"off\" ||\n (!!parent && parent.showQuestionNumbers === \"onpanel\"));\n },\n },\n \"valueName\",\n \"enableIf:condition\",\n \"defaultValue:value\",\n \"correctAnswer:value\",\n \"isRequired:switch\",\n \"requiredIf:condition\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:switch\",\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n]);\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addAlterNativeClassName(\"question\", \"questionbase\");\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__conditionsParser__ = __webpack_require__(76);\n/* unused harmony export ExpressionRunnerBase */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return ConditionRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ExpressionRunner; });\n\n\n\nvar ExpressionRunnerBase = /** @class */ (function () {\n function ExpressionRunnerBase(expression) {\n this.processValue = new __WEBPACK_IMPORTED_MODULE_1__conditionProcessValue__[\"a\" /* ProcessValue */]();\n this.parser = new __WEBPACK_IMPORTED_MODULE_2__conditionsParser__[\"a\" /* ConditionsParser */]();\n this.isAsyncValue = false;\n this.hasFunctionValue = false;\n this.expression = expression;\n }\n Object.defineProperty(ExpressionRunnerBase.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n set: function (value) {\n if (this.expression === value)\n return;\n this.expressionValue = value;\n this.operand = this.parser.parseExpression(value);\n this.hasFunctionValue = this.canRun() ? this.operand.hasFunction() : false;\n this.isAsyncValue = this.hasFunction()\n ? this.operand.hasAsyncFunction()\n : false;\n },\n enumerable: true,\n configurable: true\n });\n ExpressionRunnerBase.prototype.getVariables = function () {\n if (!this.operand)\n return [];\n var variables = [];\n this.operand.setVariables(variables);\n return variables;\n };\n ExpressionRunnerBase.prototype.hasFunction = function () {\n return this.hasFunctionValue;\n };\n Object.defineProperty(ExpressionRunnerBase.prototype, \"isAsync\", {\n get: function () {\n return this.isAsyncValue;\n },\n enumerable: true,\n configurable: true\n });\n ExpressionRunnerBase.prototype.canRun = function () {\n return !!this.operand;\n };\n ExpressionRunnerBase.prototype.runCore = function (values, properties) {\n var _this = this;\n if (properties === void 0) { properties = null; }\n if (!this.operand)\n return null;\n this.processValue.values = values;\n this.processValue.properties = properties;\n if (!this.isAsync)\n return this.runValues();\n this.asyncFuncList = [];\n this.operand.addToAsyncList(this.asyncFuncList);\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].onAsyncReady = function () {\n _this.doAsyncFunctionReady();\n };\n }\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n this.asyncFuncList[i].evaluateAsync(this.processValue);\n }\n return false;\n };\n ExpressionRunnerBase.prototype.doAsyncFunctionReady = function () {\n for (var i = 0; i < this.asyncFuncList.length; i++) {\n if (!this.asyncFuncList[i].isReady)\n return;\n }\n this.runValues();\n };\n ExpressionRunnerBase.prototype.runValues = function () {\n var res = this.operand.evaluate(this.processValue);\n this.doOnComplete(res);\n return res;\n };\n ExpressionRunnerBase.prototype.doOnComplete = function (res) { };\n return ExpressionRunnerBase;\n}());\n\nvar ConditionRunner = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ConditionRunner, _super);\n function ConditionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ConditionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties) == true;\n };\n ConditionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res == true);\n };\n return ConditionRunner;\n}(ExpressionRunnerBase));\n\nvar ExpressionRunner = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ExpressionRunner, _super);\n function ExpressionRunner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ExpressionRunner.prototype.run = function (values, properties) {\n if (properties === void 0) { properties = null; }\n return this.runCore(values, properties);\n };\n ExpressionRunner.prototype.doOnComplete = function (res) {\n if (!!this.onRunComplete)\n this.onRunComplete(res);\n };\n return ExpressionRunner;\n}(ExpressionRunnerBase));\n\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(9);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return AnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return OneAnswerRequiredError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return RequreNumericError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return ExceedSizeError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return WebRequestError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return WebRequestEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return OtherEmptyError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return UploadingFileError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return RequiredInAllRowsError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return MinRowCountError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return KeyDuplicationError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CustomError; });\n\n\n\nvar AnswerRequiredError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(AnswerRequiredError, _super);\n function AnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n AnswerRequiredError.prototype.getErrorType = function () {\n return \"required\";\n };\n AnswerRequiredError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"requiredError\");\n };\n return AnswerRequiredError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar OneAnswerRequiredError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(OneAnswerRequiredError, _super);\n function OneAnswerRequiredError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OneAnswerRequiredError.prototype.getErrorType = function () {\n return \"requireoneanswer\";\n };\n OneAnswerRequiredError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"requiredErrorInPanel\");\n };\n return OneAnswerRequiredError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar RequreNumericError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(RequreNumericError, _super);\n function RequreNumericError(text, errorOwner) {\n if (text === void 0) { text = null; }\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequreNumericError.prototype.getErrorType = function () {\n return \"requirenumeric\";\n };\n RequreNumericError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"numericError\");\n };\n return RequreNumericError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar ExceedSizeError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ExceedSizeError, _super);\n function ExceedSizeError(maxSize, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.maxSize = maxSize;\n _this.locText.text = _this.getText();\n return _this;\n }\n ExceedSizeError.prototype.getErrorType = function () {\n return \"exceedsize\";\n };\n ExceedSizeError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"exceedMaxSize\")[\"format\"](this.getTextSize());\n };\n ExceedSizeError.prototype.getTextSize = function () {\n var sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n var fixed = [0, 0, 2, 3, 3];\n if (this.maxSize === 0) {\n return \"0 Byte\";\n }\n var i = Math.floor(Math.log(this.maxSize) / Math.log(1024));\n var value = this.maxSize / Math.pow(1024, i);\n return value.toFixed(fixed[i]) + \" \" + sizes[i];\n };\n return ExceedSizeError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar WebRequestError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(WebRequestError, _super);\n function WebRequestError(status, response, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.status = status;\n _this.response = response;\n return _this;\n }\n WebRequestError.prototype.getErrorType = function () {\n return \"webrequest\";\n };\n WebRequestError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"urlRequestError\")[\"format\"](this.status, this.response);\n };\n return WebRequestError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar WebRequestEmptyError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(WebRequestEmptyError, _super);\n function WebRequestEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n WebRequestEmptyError.prototype.getErrorType = function () {\n return \"webrequestempty\";\n };\n WebRequestEmptyError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"urlGetChoicesError\");\n };\n return WebRequestEmptyError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar OtherEmptyError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(OtherEmptyError, _super);\n function OtherEmptyError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n OtherEmptyError.prototype.getErrorType = function () {\n return \"otherempty\";\n };\n OtherEmptyError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherRequiredError\");\n };\n return OtherEmptyError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar UploadingFileError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(UploadingFileError, _super);\n function UploadingFileError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n UploadingFileError.prototype.getErrorType = function () {\n return \"uploadingfile\";\n };\n UploadingFileError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"uploadingFile\");\n };\n return UploadingFileError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar RequiredInAllRowsError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(RequiredInAllRowsError, _super);\n function RequiredInAllRowsError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n RequiredInAllRowsError.prototype.getErrorType = function () {\n return \"requiredinallrowserror\";\n };\n RequiredInAllRowsError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"requiredInAllRowsError\");\n };\n return RequiredInAllRowsError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar MinRowCountError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MinRowCountError, _super);\n function MinRowCountError(minRowCount, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, null, errorOwner) || this;\n _this.minRowCount = minRowCount;\n return _this;\n }\n MinRowCountError.prototype.getErrorType = function () {\n return \"minrowcounterror\";\n };\n MinRowCountError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"minRowCountError\")[\"format\"](this.minRowCount);\n };\n return MinRowCountError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar KeyDuplicationError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(KeyDuplicationError, _super);\n function KeyDuplicationError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n KeyDuplicationError.prototype.getErrorType = function () {\n return \"keyduplicationerror\";\n };\n KeyDuplicationError.prototype.getDefaultText = function () {\n return __WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"keyDuplicationError\");\n };\n return KeyDuplicationError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\nvar CustomError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(CustomError, _super);\n function CustomError(text, errorOwner) {\n if (errorOwner === void 0) { errorOwner = null; }\n var _this = _super.call(this, text, errorOwner) || this;\n _this.text = text;\n return _this;\n }\n CustomError.prototype.getErrorType = function () {\n return \"custom\";\n };\n return CustomError;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"d\" /* SurveyError */]));\n\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return surveyCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return defaultStandardCss; });\nvar surveyCss = {\n currentType: \"\",\n getCss: function () {\n var loc = this.currentType ? this[this.currentType] : defaultStandardCss;\n if (!loc)\n loc = defaultStandardCss;\n return loc;\n },\n};\nvar defaultStandardCss = {\n root: \"sv_main sv_default_css\",\n container: \"sv_container\",\n header: \"sv_header\",\n body: \"sv_body\",\n bodyEmpty: \"sv_body sv_body_empty\",\n footer: \"sv_nav\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"sv_completed_page\",\n navigation: {\n complete: \"sv_complete_btn\",\n prev: \"sv_prev_btn\",\n next: \"sv_next_btn\",\n start: \"sv_start_btn\",\n preview: \"sv_preview_btn\",\n edit: \"sv_edit_btn\",\n },\n progress: \"sv_progress\",\n progressBar: \"sv_progress_bar\",\n progressTextInBar: \"sv-hidden\",\n page: {\n root: \"sv_p_root\",\n title: \"sv_page_title\",\n description: \"\",\n },\n // TODO: move to the page object\n pageTitle: \"sv_page_title\",\n pageDescription: \"\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_q sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"sv_q_title\",\n number: \"sv_q_num\",\n description: \"sv_q_description\",\n comment: \"\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"\",\n indent: 20,\n footer: \"sv_q_footer\",\n formGroup: \"form-group\",\n asCell: \"sv_matrix_cell\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n },\n error: {\n root: \"sv_q_erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qcbc sv_qbln\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx\",\n item: \"sv_q_checkbox\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_checkbox_inline\",\n label: \"sv_q_checkbox_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_checkbox_control_item\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"sv_q_checkbox_control_label\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_other sv_q_checkbox_other\",\n column: \"sv_q_select_column\",\n },\n comment: \"\",\n dropdown: {\n root: \"\",\n control: \"sv_q_dropdown_control\",\n selectWrapper: \"sv_select_wrapper\",\n other: \"sv_q_dd_other\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: { root: \"sv_q_matrix_dropdown\", cell: \"sv_matrix_cell\" },\n matrixdynamic: {\n root: \"sv_q_matrix_dynamic\",\n button: \"sv_matrix_dynamic_button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n cell: \"sv_matrix_cell\",\n },\n paneldynamic: {\n root: \"sv_panel_dynamic\",\n title: \"sv_p_title\",\n button: \"\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n buttonRemove: \"\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n },\n multipletext: {\n root: \"sv_q_mt\",\n itemTitle: \"sv_q_mt_title\",\n row: \"sv_q_mt_row\",\n itemValue: \"sv_q_mt_item_value sv_q_text_root\",\n },\n radiogroup: {\n root: \"sv_qcbc\",\n item: \"sv_q_radiogroup\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"sv_q_radiogroup_label\",\n labelChecked: \"\",\n itemControl: \"sv_q_radiogroup_control_item\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_other sv_q_radiogroup_other\",\n clearButton: \"sv_q_radiogroup_clear\",\n column: \"sv_q_select_column\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemInline: \"sv_q_imagepicker_inline\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"sv_q_rating\",\n item: \"sv_q_rating_item\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"sv_q_text_root\",\n expression: \"\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv-visuallyhidden\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-file__decorator\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n chooseFile: \"sv_q_file_choose_button\",\n noFileChosen: \"sv_q_file_placeholder\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\nsurveyCss[\"standard\"] = defaultStandardCss;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ItemValue; });\n\n\n\n\n\n\n\n/**\n * Array of ItemValue is used in checkox, dropdown and radiogroup choices, matrix columns and rows.\n * It has two main properties: value and text. If text is empty, value is used for displaying.\n * The text property is localizable and support markdown.\n */\nvar ItemValue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ItemValue, _super);\n function ItemValue(value, text, typeName) {\n if (text === void 0) { text = null; }\n if (typeName === void 0) { typeName = \"itemvalue\"; }\n var _this = _super.call(this) || this;\n _this.typeName = typeName;\n _this.ownerPropertyName = \"\";\n _this.isVisibleValue = true;\n _this.locTextValue = new __WEBPACK_IMPORTED_MODULE_1__localizablestring__[\"a\" /* LocalizableString */](null, true);\n _this.locTextValue.onGetTextCallback = function (txt) {\n return txt ? txt : !_this.isValueItemEmpty ? _this.value.toString() : null;\n };\n if (text)\n _this.locText.text = text;\n if (!!value && typeof value === \"object\") {\n _this.setData(value);\n }\n else {\n _this.value = value;\n }\n if (_this.getType() != \"itemvalue\") {\n __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"a\" /* CustomPropertiesCollection */].createProperties(_this);\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(ItemValue, \"Separator\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__settings__[\"a\" /* settings */].itemValueSeparator;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_6__settings__[\"a\" /* settings */].itemValueSeparator = val;\n },\n enumerable: true,\n configurable: true\n });\n ItemValue.createArray = function (locOwner) {\n var items = [];\n ItemValue.setupArray(items, locOwner);\n return items;\n };\n ItemValue.setupArray = function (items, locOwner) {\n items.push = function (value) {\n var result = Array.prototype.push.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.unshift = function (value) {\n var result = Array.prototype.unshift.call(this, value);\n value.locOwner = locOwner;\n return result;\n };\n items.splice = function (start, deleteCount) {\n var _a;\n var items = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n items[_i - 2] = arguments[_i];\n }\n var result = (_a = Array.prototype.splice).call.apply(_a, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"d\" /* __spreadArrays */])([this,\n start,\n deleteCount], items));\n if (!items)\n items = [];\n for (var i = 0; i < items.length; i++) {\n items[i].locOwner = locOwner;\n }\n return result;\n };\n };\n ItemValue.setData = function (items, values) {\n items.length = 0;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n var item;\n if (typeof value.getType === \"function\") {\n item = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(value.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(value);\n if (!!value.originalItem) {\n item.originalItem = value.originalItem;\n }\n items.push(item);\n }\n };\n ItemValue.getData = function (items) {\n var result = new Array();\n for (var i = 0; i < items.length; i++) {\n result.push(items[i].getData());\n }\n return result;\n };\n ItemValue.getItemByValue = function (items, val) {\n for (var i = 0; i < items.length; i++) {\n if (__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isTwoValueEquals(items[i].value, val))\n return items[i];\n }\n return null;\n };\n ItemValue.getTextOrHtmlByValue = function (items, val) {\n var item = ItemValue.getItemByValue(items, val);\n return item !== null ? item.locText.textOrHtml : \"\";\n };\n ItemValue.locStrsChanged = function (items) {\n for (var i = 0; i < items.length; i++) {\n items[i].locText.strChanged();\n }\n };\n ItemValue.runConditionsForItems = function (items, filteredItems, runner, values, properties, useItemExpression) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n return ItemValue.runConditionsForItemsCore(items, filteredItems, runner, values, properties, true, useItemExpression);\n };\n ItemValue.runEnabledConditionsForItems = function (items, runner, values, properties) {\n return ItemValue.runConditionsForItemsCore(items, null, runner, values, properties, false);\n };\n ItemValue.runConditionsForItemsCore = function (items, filteredItems, runner, values, properties, isVisible, useItemExpression) {\n if (useItemExpression === void 0) { useItemExpression = true; }\n if (!values) {\n values = {};\n }\n var itemValue = values[\"item\"];\n var choiceValue = values[\"choice\"];\n var hasChanded = false;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n values[\"item\"] = item.value;\n values[\"choice\"] = item.value;\n var itemRunner = useItemExpression && !!item.getConditionRunner\n ? item.getConditionRunner(isVisible)\n : false;\n if (!itemRunner) {\n itemRunner = runner;\n }\n var newValue = true;\n if (itemRunner) {\n newValue = itemRunner.run(values, properties);\n }\n if (!!filteredItems && newValue) {\n filteredItems.push(item);\n }\n var oldValue = isVisible ? item.isVisible : item.isEnabled;\n if (newValue != oldValue) {\n hasChanded = true;\n if (isVisible) {\n if (!!item.setIsVisible)\n item.setIsVisible(newValue);\n }\n else {\n if (!!item.setIsEnabled)\n item.setIsEnabled(newValue);\n }\n }\n }\n if (itemValue) {\n values[\"item\"] = itemValue;\n }\n else {\n delete values[\"item\"];\n }\n if (choiceValue) {\n values[\"choice\"] = choiceValue;\n }\n else {\n delete values[\"choice\"];\n }\n return hasChanded;\n };\n ItemValue.prototype.onCreating = function () { };\n ItemValue.prototype.getType = function () {\n return !!this.typeName ? this.typeName : \"itemvalue\";\n };\n ItemValue.prototype.getLocale = function () {\n return this.locText.locale;\n };\n Object.defineProperty(ItemValue.prototype, \"locText\", {\n get: function () {\n return this.locTextValue;\n },\n enumerable: true,\n configurable: true\n });\n ItemValue.prototype.setLocText = function (locText) {\n this.locTextValue = locText;\n };\n Object.defineProperty(ItemValue.prototype, \"locOwner\", {\n get: function () {\n return this.locText.owner;\n },\n set: function (value) {\n this.locText.owner = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"value\", {\n get: function () {\n return this.itemValue;\n },\n set: function (newValue) {\n var oldValue = this.itemValue;\n this.itemValue = newValue;\n this.propertyValueChanged(\"value\", oldValue, this.itemValue);\n if (!this.itemValue)\n return;\n var str = this.itemValue.toString();\n var index = str.indexOf(__WEBPACK_IMPORTED_MODULE_6__settings__[\"a\" /* settings */].itemValueSeparator);\n if (index > -1) {\n this.itemValue = str.slice(0, index);\n this.text = str.slice(index + 1);\n }\n else if (!this.hasText) {\n this.locText.onChanged();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"hasText\", {\n get: function () {\n return this.locText.pureText ? true : false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"text\", {\n get: function () {\n return this.locText.calculatedText; //TODO: it will be correct to use this.locText.text, however it would require a lot of rewriting in Creator\n },\n set: function (newText) {\n var oldText = this.locText.text;\n this.locText.text = newText;\n this.propertyValueChanged(\"text\", oldText, newText);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"calculatedText\", {\n get: function () {\n return this.locText.calculatedText;\n },\n enumerable: true,\n configurable: true\n });\n ItemValue.prototype.getData = function () {\n var json = this.toJSON();\n if (!!json[\"value\"] && !!json[\"value\"][\"pos\"]) {\n delete json[\"value\"][\"pos\"];\n }\n if (Object.keys(json).length == 1 && !__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isValueEmpty(json[\"value\"]))\n return this.value;\n return json;\n };\n ItemValue.prototype.toJSON = function () {\n var res = {};\n var properties = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].getProperties(this.getType());\n if (!properties || properties.length == 0) {\n properties = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].getProperties(\"itemvalue\");\n }\n var jsoObj = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]();\n for (var i = 0; i < properties.length; i++) {\n jsoObj.valueToJson(this, res, properties[i]);\n }\n return res;\n };\n ItemValue.prototype.setData = function (value) {\n if (__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isValueEmpty(value))\n return;\n if (typeof value.value !== \"undefined\") {\n var json = value;\n if (typeof value.toJSON === \"function\") {\n json = value.toJSON();\n }\n new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toObject(json, this);\n }\n else {\n this.value = value;\n }\n };\n Object.defineProperty(ItemValue.prototype, \"visibleIf\", {\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ItemValue.prototype, \"isVisible\", {\n get: function () {\n return this.isVisibleValue;\n },\n enumerable: true,\n configurable: true\n });\n ItemValue.prototype.setIsVisible = function (val) {\n this.isVisibleValue = val;\n };\n Object.defineProperty(ItemValue.prototype, \"isEnabled\", {\n get: function () {\n return this.getPropertyValue(\"isEnabled\", true);\n },\n enumerable: true,\n configurable: true\n });\n ItemValue.prototype.setIsEnabled = function (val) {\n this.setPropertyValue(\"isEnabled\", val);\n };\n ItemValue.prototype.addUsedLocales = function (locales) {\n this.AddLocStringToUsedLocales(this.locTextValue, locales);\n };\n ItemValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n var funcName = \"itemValuePropertyChanged\";\n if (!this.locOwner || !this.locOwner[funcName])\n return;\n this.locOwner[funcName](this, name, oldValue, newValue);\n };\n ItemValue.prototype.getConditionRunner = function (isVisible) {\n if (isVisible)\n return this.getVisibleConditionRunner();\n return this.getEnableConditionRunner();\n };\n ItemValue.prototype.getVisibleConditionRunner = function () {\n if (!this.visibleIf)\n return null;\n if (!this.visibleConditionRunner)\n this.visibleConditionRunner = new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"b\" /* ConditionRunner */](this.visibleIf);\n this.visibleConditionRunner.expression = this.visibleIf;\n return this.visibleConditionRunner;\n };\n ItemValue.prototype.getEnableConditionRunner = function () {\n if (!this.enableIf)\n return null;\n if (!this.enableConditionRunner)\n this.enableConditionRunner = new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"b\" /* ConditionRunner */](this.enableIf);\n this.enableConditionRunner.expression = this.enableIf;\n return this.enableConditionRunner;\n };\n Object.defineProperty(ItemValue.prototype, \"isValueItemEmpty\", {\n get: function () {\n return !this.itemValue && this.itemValue !== 0 && this.itemValue !== false;\n },\n enumerable: true,\n configurable: true\n });\n return ItemValue;\n}(__WEBPACK_IMPORTED_MODULE_5__base__[\"a\" /* Base */]));\n\n__WEBPACK_IMPORTED_MODULE_5__base__[\"a\" /* Base */].createItemValue = function (source, type) {\n var item = null;\n if (!!type) {\n item = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */].metaData.createClass(type, {});\n }\n else if (typeof source.getType === \"function\") {\n item = new ItemValue(null, undefined, source.getType());\n }\n else {\n item = new ItemValue(null);\n }\n item.setData(source);\n return item;\n};\n__WEBPACK_IMPORTED_MODULE_5__base__[\"a\" /* Base */].itemValueLocStrChanged = function (arr) {\n ItemValue.locStrsChanged(arr);\n};\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"j\" /* JsonObjectProperty */].getItemValuesDefaultValue = function (val) {\n var res = new Array();\n ItemValue.setData(res, val || []);\n return res;\n};\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"itemvalue\", [\n \"value\",\n {\n name: \"text\",\n serializationProperty: \"locText\",\n },\n { name: \"visibleIf:condition\", showMode: \"form\" },\n { name: \"enableIf:condition\", showMode: \"form\" },\n], function (value) { return new ItemValue(value); });\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ProcessValue; });\n\nvar ProcessValue = /** @class */ (function () {\n function ProcessValue() {\n this.values = null;\n this.properties = null;\n }\n ProcessValue.prototype.getFirstName = function (text, obj) {\n if (obj === void 0) { obj = null; }\n if (!text)\n return text;\n var res = \"\";\n if (!!obj) {\n res = this.getFirstPropertyName(text, obj);\n if (!!res)\n return res;\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n if (ch == \".\" || ch == \"[\")\n break;\n res += ch;\n }\n return res;\n };\n ProcessValue.prototype.hasValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.hasValue;\n };\n ProcessValue.prototype.setValue = function (obj, text, value) {\n if (!text)\n return;\n var nonNestedObj = this.getNonNestedObject(obj, text);\n if (!nonNestedObj)\n return;\n obj = nonNestedObj.value;\n text = nonNestedObj.text;\n if (!!obj && !!text) {\n obj[text] = value;\n }\n };\n ProcessValue.prototype.getValue = function (text, values) {\n if (values === void 0) { values = null; }\n if (!values)\n values = this.values;\n var res = this.getValueCore(text, values);\n return res.value;\n };\n ProcessValue.prototype.getValueCore = function (text, values) {\n var res = { hasValue: false, value: null };\n var curValue = values;\n if (!curValue && curValue !== 0 && curValue !== false)\n return res;\n if (text &&\n text.lastIndexOf(\".length\") > -1 &&\n text.lastIndexOf(\".length\") === text.length - \".length\".length) {\n res.value = 0;\n res.hasValue = true;\n }\n var nonNestedObj = this.getNonNestedObject(curValue, text);\n if (!nonNestedObj)\n return res;\n res.value = !!nonNestedObj.text\n ? this.getObjectValue(nonNestedObj.value, nonNestedObj.text)\n : nonNestedObj.value;\n res.hasValue = !__WEBPACK_IMPORTED_MODULE_0__helpers__[\"a\" /* Helpers */].isValueEmpty(res.value);\n return res;\n };\n ProcessValue.prototype.getNonNestedObject = function (obj, text) {\n var curName = this.getFirstPropertyName(text, obj);\n while (text != curName && !!obj) {\n var isArray = text[0] == \"[\";\n if (!isArray) {\n if (!curName && text == this.getFirstName(text))\n return { value: obj, text: text };\n obj = this.getObjectValue(obj, curName);\n if (__WEBPACK_IMPORTED_MODULE_0__helpers__[\"a\" /* Helpers */].isValueEmpty(obj))\n return null;\n text = text.substr(curName.length);\n }\n else {\n var objInArray = this.getObjInArray(obj, text);\n if (!objInArray)\n return null;\n obj = objInArray.value;\n text = objInArray.text;\n }\n if (!!text && text[0] == \".\") {\n text = text.substr(1);\n }\n curName = this.getFirstPropertyName(text, obj);\n }\n return { value: obj, text: text };\n };\n ProcessValue.prototype.getObjInArray = function (curValue, text) {\n if (!Array.isArray(curValue))\n return null;\n var index = 1;\n var str = \"\";\n while (index < text.length && text[index] != \"]\") {\n str += text[index];\n index++;\n }\n text = index < text.length ? text.substr(index + 1) : \"\";\n index = this.getIntValue(str);\n if (index < 0 || index >= curValue.length)\n return null;\n return { value: curValue[index], text: text };\n };\n ProcessValue.prototype.getFirstPropertyName = function (name, obj) {\n if (!name)\n return name;\n if (obj.hasOwnProperty(name))\n return name;\n name = name.toLowerCase();\n var A = name[0];\n var a = A.toUpperCase();\n for (var key in obj) {\n var first = key[0];\n if (first === a || first === A) {\n var keyName = key.toLowerCase();\n if (keyName == name)\n return key;\n if (name.length <= keyName.length)\n continue;\n var ch = name[keyName.length];\n if (ch != \".\" && ch != \"[\")\n continue;\n if (keyName == name.substr(0, keyName.length))\n return key;\n }\n }\n return \"\";\n };\n ProcessValue.prototype.getObjectValue = function (obj, name) {\n if (!name)\n return null;\n return obj[name];\n };\n ProcessValue.prototype.getIntValue = function (str) {\n if (str == \"0\" || ((str | 0) > 0 && str % 1 == 0))\n return Number(str);\n return -1;\n };\n return ProcessValue;\n}());\n\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return LocalizableString; });\n\n\n\n/**\n * The class represents the string that supports multi-languages and markdown.\n * It uses in all objects where support for multi-languages and markdown is required.\n */\nvar LocalizableString = /** @class */ (function () {\n function LocalizableString(owner, useMarkdown) {\n if (useMarkdown === void 0) { useMarkdown = false; }\n this.owner = owner;\n this.useMarkdown = useMarkdown;\n this.values = {};\n this.htmlValues = {};\n this.renderedText = null;\n this.calculatedTextValue = null;\n this.onGetTextCallback = null;\n this.onCreating();\n }\n Object.defineProperty(LocalizableString, \"defaultLocale\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"locale\", {\n get: function () {\n return this.owner && this.owner.getLocale ? this.owner.getLocale() : \"\";\n },\n enumerable: true,\n configurable: true\n });\n LocalizableString.prototype.strChanged = function () {\n if (this.renderedText === null)\n return;\n this.calculatedTextValue = this.calText();\n if (this.renderedText !== this.calculatedTextValue) {\n this.renderedText = null;\n this.calculatedTextValue = null;\n this.onChanged();\n }\n };\n Object.defineProperty(LocalizableString.prototype, \"text\", {\n get: function () {\n return this.pureText;\n },\n set: function (value) {\n this.setLocaleText(this.locale, value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"calculatedText\", {\n get: function () {\n this.renderedText =\n this.calculatedTextValue !== null\n ? this.calculatedTextValue\n : this.calText();\n this.calculatedTextValue = null;\n return this.renderedText;\n },\n enumerable: true,\n configurable: true\n });\n LocalizableString.prototype.calText = function () {\n var res = this.pureText;\n if (res &&\n this.owner &&\n this.owner.getProcessedText &&\n res.indexOf(\"{\") > -1) {\n res = this.owner.getProcessedText(res);\n }\n if (this.onGetTextCallback)\n res = this.onGetTextCallback(res);\n return res;\n };\n Object.defineProperty(LocalizableString.prototype, \"pureText\", {\n get: function () {\n var loc = this.locale;\n if (!loc)\n loc = __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n var res = this.getValue(loc);\n if (!res && loc == __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName) {\n res = this.getValue(__WEBPACK_IMPORTED_MODULE_1__surveyStrings__[\"a\" /* surveyLocalization */].defaultLocale);\n }\n if (!res && loc !== __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName) {\n res = this.getValue(__WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName);\n }\n if (!res)\n res = \"\";\n return res;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"hasHtml\", {\n get: function () {\n return this.hasHtmlValue();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"html\", {\n get: function () {\n if (!this.hasHtml)\n return \"\";\n return this.getHtmlValue();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"isEmpty\", {\n get: function () {\n return this.getValuesKeys().length == 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"textOrHtml\", {\n get: function () {\n return this.hasHtml ? this.getHtmlValue() : this.calculatedText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LocalizableString.prototype, \"renderedHtml\", {\n get: function () {\n return this.textOrHtml;\n },\n enumerable: true,\n configurable: true\n });\n LocalizableString.prototype.getLocaleText = function (loc) {\n if (!loc)\n loc = __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n var res = this.getValue(loc);\n return res ? res : \"\";\n };\n LocalizableString.prototype.setLocaleText = function (loc, value) {\n if (value == this.getLocaleText(loc))\n return;\n if (value &&\n loc &&\n loc != __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName &&\n !this.getValue(loc) &&\n value == this.getLocaleText(__WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName))\n return;\n if (!loc)\n loc = __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n delete this.htmlValues[loc];\n if (!value) {\n if (this.getValue(loc))\n this.deleteValue(loc);\n }\n else {\n if (typeof value === \"string\") {\n if (loc != __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName &&\n value == this.getLocaleText(__WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName)) {\n this.setLocaleText(loc, null);\n }\n else {\n this.setValue(loc, value);\n if (loc == __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName) {\n this.deleteValuesEqualsToDefault(value);\n }\n }\n }\n }\n this.strChanged();\n };\n LocalizableString.prototype.hasNonDefaultText = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return false;\n return keys.length > 1 || keys[0] != __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n };\n LocalizableString.prototype.getLocales = function () {\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return [];\n return keys;\n };\n LocalizableString.prototype.getJson = function () {\n if (!!this.sharedData)\n return this.sharedData.getJson();\n var keys = this.getValuesKeys();\n if (keys.length == 0)\n return null;\n if (keys.length == 1 &&\n keys[0] == __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName &&\n !__WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].serializeLocalizableStringAsObject)\n return this.values[keys[0]];\n return this.values;\n };\n LocalizableString.prototype.setJson = function (value) {\n if (!!this.sharedData) {\n this.sharedData.setJson(value);\n return;\n }\n this.values = {};\n this.htmlValues = {};\n if (!value)\n return;\n if (typeof value === \"string\") {\n this.setLocaleText(null, value);\n }\n else {\n for (var key in value) {\n this.setLocaleText(key, value[key]);\n }\n }\n this.strChanged();\n };\n LocalizableString.prototype.equals = function (obj) {\n if (!!this.sharedData)\n return this.sharedData.equals(obj);\n if (!obj || !obj.values)\n return false;\n return __WEBPACK_IMPORTED_MODULE_0__helpers__[\"a\" /* Helpers */].isTwoValueEquals(this.values, obj.values);\n };\n LocalizableString.prototype.onChanged = function () {\n if (this.onStrChanged)\n this.onStrChanged();\n };\n LocalizableString.prototype.onCreating = function () { };\n LocalizableString.prototype.hasHtmlValue = function () {\n if (!this.owner || !this.useMarkdown)\n return false;\n var renderedText = this.calculatedText;\n if (!renderedText)\n return false;\n var loc = this.locale;\n if (!loc)\n loc = __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n this.htmlValues[loc] = this.owner.getMarkdownHtml(renderedText);\n return this.htmlValues[loc] ? true : false;\n };\n LocalizableString.prototype.getHtmlValue = function () {\n var loc = this.locale;\n if (!loc)\n loc = __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName;\n return this.htmlValues[loc];\n };\n LocalizableString.prototype.deleteValuesEqualsToDefault = function (defaultValue) {\n var keys = this.getValuesKeys();\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] == __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\" /* settings */].defaultLocaleName)\n continue;\n if (this.getValue(keys[i]) == defaultValue) {\n this.deleteValue(keys[i]);\n }\n }\n };\n LocalizableString.prototype.getValue = function (loc) {\n if (!!this.sharedData)\n return this.sharedData.getValue(loc);\n return this.values[loc];\n };\n LocalizableString.prototype.setValue = function (loc, value) {\n if (!!this.sharedData)\n this.sharedData.setValue(loc, value);\n else\n this.values[loc] = value;\n };\n LocalizableString.prototype.deleteValue = function (loc) {\n if (!!this.sharedData)\n this.sharedData.deleteValue(loc);\n else\n delete this.values[loc];\n };\n LocalizableString.prototype.getValuesKeys = function () {\n if (!!this.sharedData)\n return this.sharedData.getValuesKeys();\n return Object.keys(this.values);\n };\n LocalizableString.SerializeAsObject = false;\n return LocalizableString;\n}());\n\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(27);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyWindow__ = __webpack_require__(85);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssstandard__ = __webpack_require__(14);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return VueSurveyModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return VueSurveyWindowModel; });\n\n\n\n\n\nvar VueSurveyModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(VueSurveyModel, _super);\n function VueSurveyModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n VueSurveyModel.updatePropertiesHash = function (obj) {\n obj.setPropertyValueCoreHandler = function (propertiesHash, name, val) {\n __WEBPACK_IMPORTED_MODULE_1_vue___default.a.set(propertiesHash, name, val);\n };\n };\n VueSurveyModel.prototype.render = function () {\n if (this.renderCallback) {\n this.renderCallback();\n }\n };\n VueSurveyModel.prototype.onLoadSurveyFromService = function () {\n this.render();\n };\n VueSurveyModel.prototype.onLoadingSurveyFromService = function () {\n this.render();\n };\n Object.defineProperty(VueSurveyModel.prototype, \"css\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssstandard__[\"a\" /* surveyCss */].getCss();\n },\n set: function (value) {\n this.mergeValues(value, this.css);\n },\n enumerable: true,\n configurable: true\n });\n VueSurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n __WEBPACK_IMPORTED_MODULE_1_vue___default.a.set(valuesHash, key, value);\n };\n VueSurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n __WEBPACK_IMPORTED_MODULE_1_vue___default.a.delete(valuesHash, key);\n };\n VueSurveyModel.prototype.setPropertyValueCore = function (propertiesHash, name, val) {\n __WEBPACK_IMPORTED_MODULE_1_vue___default.a.set(propertiesHash, name, val);\n };\n VueSurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) {\n VueSurveyModel.updatePropertiesHash(question);\n _super.prototype.questionAdded.call(this, question, index, parentPanel, rootPanel);\n };\n VueSurveyModel.prototype.matrixCellCreated = function (question, options) {\n VueSurveyModel.updatePropertiesHash(options.cellQuestion);\n _super.prototype.matrixCellCreated.call(this, question, options);\n };\n VueSurveyModel.prototype.doOnPageAdded = function (page) {\n VueSurveyModel.updatePropertiesHash(page);\n _super.prototype.doOnPageAdded.call(this, page);\n };\n VueSurveyModel.prototype.doAfterRenderSurvey = function (el) {\n this.afterRenderSurvey(el);\n };\n VueSurveyModel.prototype.doAfterRenderHeader = function (el) {\n this.afterRenderHeader(el);\n };\n VueSurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) {\n VueSurveyModel.updatePropertiesHash(panel);\n _super.prototype.panelAdded.call(this, panel, index, parentPanel, rootPanel);\n };\n return VueSurveyModel;\n}(__WEBPACK_IMPORTED_MODULE_2__survey__[\"a\" /* SurveyModel */]));\n\nvar VueSurveyWindowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(VueSurveyWindowModel, _super);\n function VueSurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n return _super.call(this, jsonObj, initialModel) || this;\n }\n VueSurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new VueSurveyModel(jsonObj);\n };\n return VueSurveyWindowModel;\n}(__WEBPACK_IMPORTED_MODULE_3__surveyWindow__[\"a\" /* SurveyWindowModel */]));\n\n__WEBPACK_IMPORTED_MODULE_2__survey__[\"a\" /* SurveyModel */].platform = \"vue\";\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__ = __webpack_require__(75);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionSelectBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionCheckboxBase; });\n\n\n\n\n\n\n\n\n\n\n/**\n * It is a base class for checkbox, dropdown and radiogroup questions.\n */\nvar QuestionSelectBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionSelectBase, _super);\n function QuestionSelectBase(name) {\n var _this = _super.call(this, name) || this;\n _this.filteredChoicesValue = null;\n _this.otherItemValue = new __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */](\"other\");\n _this.choicesFromUrl = null;\n _this.cachedValueForUrlRequests = null;\n _this.isChoicesLoaded = false;\n _this.enableOnLoadingChoices = false;\n _this.isSettingDefaultValue = false;\n _this.isSettingComment = false;\n _this.isFirstLoadChoicesFromUrl = true;\n var self = _this;\n _this.createItemValues(\"choices\");\n _this.registerFunctionOnPropertyValueChanged(\"choices\", function () {\n if (!self.filterItems()) {\n self.onVisibleChoicesChanged();\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfChoicesEmpty\", function () {\n self.updateVisibilityBasedOnChoices();\n });\n _this.createNewArray(\"visibleChoices\");\n _this.choicesByUrl = _this.createRestfull();\n _this.choicesByUrl.owner = _this;\n var locOtherText = _this.createLocalizableString(\"otherText\", _this, true);\n _this.createLocalizableString(\"otherErrorText\", _this, true);\n _this.otherItemValue.locOwner = _this;\n _this.otherItemValue.setLocText(locOtherText);\n locOtherText.onGetTextCallback = function (text) {\n return !!text ? text : __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherItemText\");\n };\n _this.choicesByUrl.beforeSendRequestCallback = function () {\n self.onBeforeSendRequest();\n };\n _this.choicesByUrl.getResultCallback = function (items) {\n self.onLoadChoicesFromUrl(items);\n };\n _this.choicesByUrl.updateResultCallback = function (items, serverResult) {\n if (self.survey) {\n return self.survey.updateChoicesFromServer(self, items, serverResult);\n }\n return items;\n };\n _this.createLocalizableString(\"otherPlaceHolder\", _this);\n return _this;\n }\n QuestionSelectBase.prototype.getType = function () {\n return \"selectbase\";\n };\n QuestionSelectBase.prototype.supportGoNextPageError = function () {\n return !this.isOtherSelected || !!this.comment;\n };\n QuestionSelectBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"otherItem\", {\n /**\n * Returns the other item. By using this property, you may change programmatically it's value and text.\n * @see hasOther\n */\n get: function () {\n return this.otherItemValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"isOtherSelected\", {\n /**\n * Returns true if a user select the 'other' item.\n */\n get: function () {\n return this.hasOther && this.getHasOther(this.renderedValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n * @see choicesEnableIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesVisibleIf\", val);\n this.filterItems();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesEnableIf\", {\n /**\n * An expression that returns true or false. It runs against each choices item and if for this item it returns true, then the item is enabled otherwise the item becomes disabled. Please use {item} to get the current item value in the expression.\n * @see choicesVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"choicesEnableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"choicesEnableIf\", val);\n this.filterItems();\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsEnableCondition(values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.setDefaultValue = function () {\n this.isSettingDefaultValue =\n !this.isValueEmpty(this.defaultValue) &&\n this.hasUnknownValue(this.defaultValue);\n _super.prototype.setDefaultValue.call(this);\n this.isSettingDefaultValue = false;\n };\n QuestionSelectBase.prototype.filterItems = function () {\n if (this.isLoadingFromJson ||\n !this.data ||\n this.areInvisibleElementsShowing)\n return false;\n var values = this.getDataFilteredValues();\n var properties = this.getDataFilteredProperties();\n this.runItemsEnableCondition(values, properties);\n return this.runItemsCondition(values, properties);\n };\n QuestionSelectBase.prototype.runItemsCondition = function (values, properties) {\n this.setConditionalChoicesRunner();\n var hasChanges = this.runConditionsForItems(values, properties);\n if (!!this.filteredChoicesValue &&\n this.filteredChoicesValue.length === this.activeChoices.length) {\n this.filteredChoicesValue = null;\n }\n if (hasChanges) {\n this.onVisibleChoicesChanged();\n this.clearIncorrectValues();\n }\n return hasChanges;\n };\n QuestionSelectBase.prototype.runItemsEnableCondition = function (values, properties) {\n this.setConditionalEnableChoicesRunner();\n var hasChanged = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].runEnabledConditionsForItems(this.activeChoices, this.conditionChoicesEnableIfRunner, values, properties);\n if (hasChanged) {\n this.clearDisabledValues();\n }\n };\n QuestionSelectBase.prototype.setConditionalChoicesRunner = function () {\n if (this.choicesVisibleIf) {\n if (!this.conditionChoicesVisibleIfRunner) {\n this.conditionChoicesVisibleIfRunner = new __WEBPACK_IMPORTED_MODULE_8__conditions__[\"b\" /* ConditionRunner */](this.choicesVisibleIf);\n }\n this.conditionChoicesVisibleIfRunner.expression = this.choicesVisibleIf;\n }\n else {\n this.conditionChoicesVisibleIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.setConditionalEnableChoicesRunner = function () {\n if (this.choicesEnableIf) {\n if (!this.conditionChoicesEnableIfRunner) {\n this.conditionChoicesEnableIfRunner = new __WEBPACK_IMPORTED_MODULE_8__conditions__[\"b\" /* ConditionRunner */](this.choicesEnableIf);\n }\n this.conditionChoicesEnableIfRunner.expression = this.choicesEnableIf;\n }\n else {\n this.conditionChoicesEnableIfRunner = null;\n }\n };\n QuestionSelectBase.prototype.runConditionsForItems = function (values, properties) {\n this.filteredChoicesValue = [];\n return __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].runConditionsForItems(this.activeChoices, this.filteredChoices, this.areInvisibleElementsShowing\n ? null\n : this.conditionChoicesVisibleIfRunner, values, properties);\n };\n QuestionSelectBase.prototype.getHasOther = function (val) {\n return val === this.otherItem.value;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"validatedValue\", {\n get: function () {\n return this.rendredValueToDataCore(this.value);\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.createRestfull = function () {\n return new __WEBPACK_IMPORTED_MODULE_7__choicesRestfull__[\"a\" /* ChoicesRestfull */]();\n };\n QuestionSelectBase.prototype.getQuestionComment = function () {\n if (!!this.commentValue)\n return this.commentValue;\n if (this.getStoreOthersAsComment())\n return _super.prototype.getQuestionComment.call(this);\n return this.commentValue;\n };\n QuestionSelectBase.prototype.setQuestionComment = function (newValue) {\n if (this.hasComment || this.getStoreOthersAsComment())\n _super.prototype.setQuestionComment.call(this, newValue);\n else {\n if (!this.isSettingComment && newValue != this.commentValue) {\n this.isSettingComment = true;\n this.commentValue = newValue;\n if (this.isOtherSelected && !this.isRenderedValueSetting) {\n this.value = this.rendredValueToData(this.renderedValue);\n }\n this.isSettingComment = false;\n }\n }\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"renderedValue\", {\n get: function () {\n return this.getPropertyValue(\"renderedValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"renderedValue\", val);\n this.value = this.rendredValueToData(val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.setQuestionValue = function (newValue) {\n if (this.isLoadingFromJson ||\n __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(this.value, newValue))\n return;\n _super.prototype.setQuestionValue.call(this, newValue);\n this.setPropertyValue(\"renderedValue\", this.rendredValueFromData(newValue));\n if (this.hasComment)\n return;\n var isOtherSel = this.isOtherSelected;\n if (isOtherSel && !!this.prevCommentValue) {\n var oldComment = this.prevCommentValue;\n this.prevCommentValue = \"\";\n this.comment = oldComment;\n }\n if (!isOtherSel && !!this.comment) {\n if (this.getStoreOthersAsComment()) {\n this.prevCommentValue = this.comment;\n }\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.setNewValue = function (newValue) {\n newValue = this.valueFromData(newValue);\n if ((!this.choicesByUrl.isRunning &&\n !this.choicesByUrl.isWaitingForParameters) ||\n !this.isValueEmpty(newValue)) {\n this.cachedValueForUrlRequests = newValue;\n }\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionSelectBase.prototype.valueFromData = function (val) {\n var choiceitem = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.activeChoices, val);\n if (!!choiceitem) {\n return choiceitem.value;\n }\n return _super.prototype.valueFromData.call(this, val);\n };\n QuestionSelectBase.prototype.rendredValueFromData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.renderedValueFromDataCore(val);\n };\n QuestionSelectBase.prototype.rendredValueToData = function (val) {\n if (this.getStoreOthersAsComment())\n return val;\n return this.rendredValueToDataCore(val);\n };\n QuestionSelectBase.prototype.renderedValueFromDataCore = function (val) {\n if (!this.hasUnknownValue(val, true))\n return this.valueFromData(val);\n this.comment = val;\n return this.otherItem.value;\n };\n QuestionSelectBase.prototype.rendredValueToDataCore = function (val) {\n if (val == this.otherItem.value && this.getQuestionComment()) {\n val = this.getQuestionComment();\n }\n return val;\n };\n QuestionSelectBase.prototype.hasUnknownValue = function (val, includeOther) {\n if (includeOther === void 0) { includeOther = false; }\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isValueEmpty(val))\n return false;\n if (includeOther && val == this.otherItem.value)\n return false;\n return __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.filteredChoices, val) == null;\n };\n QuestionSelectBase.prototype.isValueDisabled = function (val) {\n var itemValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.filteredChoices, val);\n return !!itemValue && !itemValue.isEnabled;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choices\", {\n /**\n * The list of items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown.\n * @see choicesByUrl\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"choices\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hideIfChoicesEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible choices.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfChoicesEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfChoicesEmpty\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"keepIncorrectValues\", {\n get: function () {\n return this.getPropertyValue(\"keepIncorrectValues\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"keepIncorrectValues\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"storeOthersAsComment\", {\n /**\n * Please use survey.storeOthersAsComment to change the behavior on the survey level. This property is depricated and invisible in Survey Creator.\n * By default the entered text in the others input in the checkbox/radiogroup/dropdown are stored as \"question name \" + \"-Comment\". The value itself is \"question name\": \"others\". Set this property to false, to store the entered text directly in the \"question name\" key.\n * Possible values are: \"default\", true, false\n * @see SurveyModel.storeOthersAsComment\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", \"default\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.hasOtherChanged = function () {\n this.onVisibleChoicesChanged();\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"choicesOrder\", {\n /**\n * Use this property to render items in a specific order: \"asc\", \"desc\", \"random\". Default value is \"none\".\n */\n get: function () {\n return this.getPropertyValue(\"choicesOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.choicesOrder)\n return;\n this.setPropertyValue(\"choicesOrder\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherText\", {\n /**\n * Use this property to set the different text for other item.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherText\", __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherText\", val);\n this.onVisibleChoicesChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherText\", {\n get: function () {\n return this.getLocalizableString(\"otherText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherPlaceHolder\", {\n /**\n * Use this property to set the place holder text for other or comment field .\n */\n get: function () {\n return this.getLocalizableStringText(\"otherPlaceHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherPlaceHolder\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"otherPlaceHolder\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"otherErrorText\", {\n /**\n * The text that shows when the other item is choosed by the other input is empty.\n */\n get: function () {\n return this.getLocalizableStringText(\"otherErrorText\", __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"otherRequiredError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"otherErrorText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"locOtherErrorText\", {\n get: function () {\n return this.getLocalizableString(\"otherErrorText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"visibleChoices\", {\n /**\n * The list of items as they will be rendered. If needed items are sorted and the other item is added.\n * @see hasOther\n * @see choicesOrder\n * @see enabledChoices\n */\n get: function () {\n return this.getPropertyValue(\"visibleChoices\", []);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"enabledChoices\", {\n /**\n * The list of enabled items as they will be rendered. The disabled items are not included\n * @see hasOther\n * @see choicesOrder\n * @see visibleChoices\n */\n get: function () {\n var res = [];\n var items = this.visibleChoices;\n for (var i = 0; i < items.length; i++) {\n if (items[i].isEnabled)\n res.push(items[i]);\n }\n return res;\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.updateVisibleChoices = function () {\n if (this.isLoadingFromJson)\n return;\n var newValue = new Array();\n var calcValue = this.calcVisibleChoices();\n if (!calcValue)\n calcValue = [];\n for (var i = 0; i < calcValue.length; i++) {\n newValue.push(calcValue[i]);\n }\n this.setPropertyValue(\"visibleChoices\", newValue);\n };\n QuestionSelectBase.prototype.calcVisibleChoices = function () {\n if (this.canUseFilteredChoices())\n return this.filteredChoices;\n var res = this.sortVisibleChoices(this.filteredChoices.slice());\n this.addToVisibleChoices(res);\n return res;\n };\n QuestionSelectBase.prototype.canUseFilteredChoices = function () {\n return !this.hasOther && this.choicesOrder == \"none\";\n };\n QuestionSelectBase.prototype.addToVisibleChoices = function (items) {\n if (this.hasOther) {\n items.push(this.otherItem);\n }\n };\n QuestionSelectBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.isNode = true;\n questionPlainData.data = (questionPlainData.data || []).concat(values.map(function (dataValue, index) {\n var choice = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(_this.visibleChoices, dataValue);\n var choiceDataItem = {\n name: index,\n title: \"Choice\",\n value: dataValue,\n displayValue: _this.getChoicesDisplayValue(_this.visibleChoices, dataValue),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n if (!!choice) {\n (options.calculations || []).forEach(function (calculation) {\n choiceDataItem[calculation.propertyName] =\n choice[calculation.propertyName];\n });\n }\n if (_this.isOtherSelected && _this.otherItemValue === choice) {\n choiceDataItem.isOther = true;\n choiceDataItem.displayValue = _this.comment;\n }\n return choiceDataItem;\n }));\n }\n return questionPlainData;\n };\n /**\n * Returns the text for the current value. If the value is null then returns empty string. If 'other' is selected then returns the text for other value.\n */\n QuestionSelectBase.prototype.getDisplayValueCore = function (keysAsText, value) {\n return this.getChoicesDisplayValue(this.visibleChoices, value);\n };\n QuestionSelectBase.prototype.getChoicesDisplayValue = function (items, val) {\n if (val == this.otherItemValue.value)\n return this.comment ? this.comment : this.locOtherText.textOrHtml;\n var str = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(items, val);\n return str == \"\" && val ? val : str;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"filteredChoices\", {\n get: function () {\n return this.filteredChoicesValue\n ? this.filteredChoicesValue\n : this.activeChoices;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"activeChoices\", {\n get: function () {\n return this.choicesFromUrl ? this.choicesFromUrl : this.getChoices();\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.getChoices = function () {\n return this.choices;\n };\n QuestionSelectBase.prototype.supportComment = function () {\n return true;\n };\n QuestionSelectBase.prototype.supportOther = function () {\n return true;\n };\n QuestionSelectBase.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!this.hasOther || !this.isOtherSelected || this.comment)\n return;\n errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__[\"h\" /* OtherEmptyError */](this.otherErrorText, this));\n };\n QuestionSelectBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.runChoicesByUrl();\n };\n QuestionSelectBase.prototype.getStoreOthersAsComment = function () {\n if (this.isSettingDefaultValue)\n return false;\n return (this.storeOthersAsComment === true ||\n (this.storeOthersAsComment == \"default\" &&\n (this.survey != null ? this.survey.storeOthersAsComment : true)) ||\n (!this.choicesByUrl.isEmpty && !this.choicesFromUrl));\n };\n QuestionSelectBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.runChoicesByUrl();\n this.onVisibleChoicesChanged();\n };\n QuestionSelectBase.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n if (name != this.getValueName()) {\n this.runChoicesByUrl();\n }\n };\n QuestionSelectBase.prototype.runChoicesByUrl = function () {\n if (!this.choicesByUrl || this.isLoadingFromJson)\n return;\n var processor = this.surveyImpl\n ? this.surveyImpl.getTextProcessor()\n : this.textProcessor;\n if (!processor)\n processor = this.survey;\n if (!processor)\n return;\n this.isReadyValue = this.isChoicesLoaded || this.choicesByUrl.isEmpty;\n this.choicesByUrl.run(processor);\n };\n QuestionSelectBase.prototype.onBeforeSendRequest = function () {\n if (__WEBPACK_IMPORTED_MODULE_9__settings__[\"a\" /* settings */].disableOnGettingChoicesFromWeb === true && !this.isReadOnly) {\n this.enableOnLoadingChoices = true;\n this.readOnly = true;\n }\n };\n QuestionSelectBase.prototype.onLoadChoicesFromUrl = function (array) {\n if (this.enableOnLoadingChoices) {\n this.readOnly = false;\n }\n if (!this.isReadOnly) {\n var errors = [];\n if (this.choicesByUrl && this.choicesByUrl.error) {\n errors.push(this.choicesByUrl.error);\n }\n this.errors = errors;\n }\n var newChoices = null;\n var checkCachedValuesOnExisting = true;\n if (this.isFirstLoadChoicesFromUrl &&\n !this.cachedValueForUrlRequests &&\n this.defaultValue) {\n this.cachedValueForUrlRequests = this.defaultValue;\n checkCachedValuesOnExisting = false;\n }\n if (this.isValueEmpty(this.cachedValueForUrlRequests)) {\n this.cachedValueForUrlRequests = this.value;\n }\n this.isFirstLoadChoicesFromUrl = false;\n var cachedValues = this.createCachedValueForUrlRequests(this.cachedValueForUrlRequests, checkCachedValuesOnExisting);\n if (array && array.length > 0) {\n newChoices = new Array();\n __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].setData(newChoices, array);\n }\n this.choicesFromUrl = newChoices;\n this.filterItems();\n this.onVisibleChoicesChanged();\n if (newChoices) {\n var newValue = this.updateCachedValueForUrlRequests(cachedValues, newChoices);\n if (!!newValue && !this.isReadOnly) {\n var hasChanged = !__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(this.value, newValue.value);\n try {\n this.allowNotifyValueChanged = false;\n this.locNotificationInData = true;\n this.value = undefined;\n this.locNotificationInData = false;\n this.allowNotifyValueChanged = hasChanged;\n this.value = newValue.value;\n }\n finally {\n this.allowNotifyValueChanged = true;\n }\n }\n }\n this.choicesLoaded();\n };\n QuestionSelectBase.prototype.createCachedValueForUrlRequests = function (val, checkOnExisting) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(this.createCachedValueForUrlRequests(val[i], true));\n }\n return res;\n }\n var isExists = checkOnExisting ? !this.hasUnknownValue(val) : true;\n return { value: val, isExists: isExists };\n };\n QuestionSelectBase.prototype.updateCachedValueForUrlRequests = function (val, newChoices) {\n if (this.isValueEmpty(val))\n return null;\n if (Array.isArray(val)) {\n var res = [];\n for (var i = 0; i < val.length; i++) {\n var updatedValue = this.updateCachedValueForUrlRequests(val[i], newChoices);\n if (updatedValue && !this.isValueEmpty(updatedValue.value)) {\n var newValue = updatedValue.value;\n var item = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(newChoices, updatedValue.value);\n if (!!item) {\n newValue = item.value;\n }\n res.push(newValue);\n }\n }\n return { value: res };\n }\n var value = val.isExists && this.hasUnknownValue(val.value) ? null : val.value;\n var item = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(newChoices, value);\n if (!!item) {\n value = item.value;\n }\n return { value: value };\n };\n QuestionSelectBase.prototype.onVisibleChoicesChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.updateVisibleChoices();\n this.updateVisibilityBasedOnChoices();\n if (!!this.visibleChoicesChangedCallback)\n this.visibleChoicesChangedCallback();\n };\n QuestionSelectBase.prototype.updateVisibilityBasedOnChoices = function () {\n if (this.hideIfChoicesEmpty) {\n this.visible = !this.filteredChoices || this.filteredChoices.length > 0;\n }\n };\n QuestionSelectBase.prototype.sortVisibleChoices = function (array) {\n var order = this.choicesOrder.toLowerCase();\n if (order == \"asc\")\n return this.sortArray(array, 1);\n if (order == \"desc\")\n return this.sortArray(array, -1);\n if (order == \"random\")\n return this.randomizeArray(array);\n return array;\n };\n QuestionSelectBase.prototype.sortArray = function (array, mult) {\n return array.sort(function (a, b) {\n if (a.calculatedText < b.calculatedText)\n return -1 * mult;\n if (a.calculatedText > b.calculatedText)\n return 1 * mult;\n return 0;\n });\n };\n QuestionSelectBase.prototype.randomizeArray = function (array) {\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].randomizeArray(array);\n };\n QuestionSelectBase.prototype.clearIncorrectValues = function () {\n if (this.keepIncorrectValues)\n return;\n if (!!this.survey &&\n this.survey.questionCountByValueName(this.getValueName()) > 1)\n return;\n if (this.clearIncorrectValuesCallback) {\n this.clearIncorrectValuesCallback();\n }\n else {\n this.clearIncorrectValuesCore();\n }\n };\n QuestionSelectBase.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearIncorrectValues();\n };\n QuestionSelectBase.prototype.clearDisabledValues = function () {\n if (!this.survey || !this.survey.clearValueOnDisableItems)\n return;\n this.clearDisabledValuesCore();\n };\n QuestionSelectBase.prototype.clearIncorrectValuesCore = function () {\n var val = this.value;\n if (this.canClearValueAnUnknow(val)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.canClearValueAnUnknow = function (val) {\n if (!this.getStoreOthersAsComment() && this.isOtherSelected)\n return false;\n return this.hasUnknownValue(val, true);\n };\n QuestionSelectBase.prototype.clearDisabledValuesCore = function () {\n if (this.isValueDisabled(this.value)) {\n this.clearValue();\n }\n };\n QuestionSelectBase.prototype.clearUnusedValues = function () {\n _super.prototype.clearUnusedValues.call(this);\n if (!this.isOtherSelected && !this.hasComment) {\n this.comment = \"\";\n }\n };\n QuestionSelectBase.prototype.getColumnClass = function () {\n var columnClass = this.cssClasses.column;\n if (this.hasColumns) {\n columnClass += \" sv-q-column-\" + this.colCount;\n }\n return columnClass;\n };\n QuestionSelectBase.prototype.getLabelClass = function (isChecked) {\n var labelClass = this.cssClasses.label;\n if (isChecked) {\n labelClass += \" \" + this.cssClasses.labelChecked;\n }\n return labelClass;\n };\n QuestionSelectBase.prototype.getControlLabelClass = function (isChecked) {\n var controlLabelClass = this.cssClasses.controlLabel;\n if (isChecked) {\n controlLabelClass += \" \" + this.cssClasses.controlLabelChecked;\n }\n return controlLabelClass;\n };\n Object.defineProperty(QuestionSelectBase.prototype, \"columns\", {\n get: function () {\n var columns = [];\n var colCount = this.colCount;\n if (this.hasColumns && this.visibleChoices.length > 0) {\n for (var i = 0; i < colCount; i++) {\n var column = [];\n for (var j = i; j < this.visibleChoices.length; j += colCount) {\n column.push(this.visibleChoices[j]);\n }\n columns.push(column);\n }\n }\n return columns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSelectBase.prototype, \"hasColumns\", {\n get: function () {\n return this.colCount > 1;\n },\n enumerable: true,\n configurable: true\n });\n QuestionSelectBase.prototype.choicesLoaded = function () {\n this.isChoicesLoaded = true;\n var oldIsReady = this.isReadyValue;\n this.isReadyValue = true;\n this.onReadyChanged &&\n this.onReadyChanged.fire(this, {\n question: this,\n isReady: true,\n oldIsReady: oldIsReady,\n });\n };\n return QuestionSelectBase;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n/**\n * A base class for checkbox and radiogroup questions. It introduced a colCount property.\n */\nvar QuestionCheckboxBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCheckboxBase, _super);\n function QuestionCheckboxBase(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n Object.defineProperty(QuestionCheckboxBase.prototype, \"colCount\", {\n /**\n * The number of columns for radiogroup and checkbox questions. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\", this.isFlowLayout ? 0 : 1);\n },\n set: function (value) {\n if (value < 0 || value > 5 || this.isFlowLayout)\n return;\n this.setPropertyValue(\"colCount\", value);\n this.fireCallback(this.colCountChangedCallback);\n },\n enumerable: true,\n configurable: true\n });\n QuestionCheckboxBase.prototype.onParentChanged = function () {\n _super.prototype.onParentChanged.call(this);\n if (this.isFlowLayout) {\n this.setPropertyValue(\"colCount\", null);\n }\n };\n return QuestionCheckboxBase;\n}(QuestionSelectBase));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"selectbase\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n {\n name: \"choices:itemvalue[]\",\n baseValue: function () {\n return __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"choices_Item\");\n },\n },\n {\n name: \"choicesOrder\",\n default: \"none\",\n choices: [\"none\", \"asc\", \"desc\", \"random\"],\n },\n {\n name: \"choicesByUrl:restfull\",\n className: \"ChoicesRestfull\",\n onGetValue: function (obj) {\n return obj.choicesByUrl.getData();\n },\n onSetValue: function (obj, value) {\n obj.choicesByUrl.setData(value);\n },\n },\n \"hideIfChoicesEmpty:boolean\",\n \"choicesVisibleIf:condition\",\n \"choicesEnableIf:condition\",\n \"hasOther:boolean\",\n {\n name: \"otherPlaceHolder\",\n serializationProperty: \"locOtherPlaceHolder\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"otherText\",\n serializationProperty: \"locOtherText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"otherErrorText\",\n serializationProperty: \"locOtherErrorText\",\n dependsOn: \"hasOther\",\n visibleIf: function (obj) {\n return obj.hasOther;\n },\n },\n {\n name: \"storeOthersAsComment\",\n default: \"default\",\n choices: [\"default\", true, false],\n visible: false,\n },\n], null, \"question\");\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"checkboxbase\", [\n {\n name: \"colCount:number\",\n default: 1,\n choices: [0, 1, 2, 3, 4, 5],\n layout: \"row\",\n },\n], null, \"selectbase\");\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DragDropInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return QuestionRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return PanelModelBase; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return PanelModel; });\n\n\n\n\n\n\n\n\n\nvar DragDropInfo = /** @class */ (function () {\n function DragDropInfo(source, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.source = source;\n this.target = target;\n this.nestedPanelDepth = nestedPanelDepth;\n }\n return DragDropInfo;\n}());\n\nvar QuestionRowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionRowModel, _super);\n function QuestionRowModel(panel) {\n var _this = _super.call(this) || this;\n _this.panel = panel;\n _this.visible = panel.areInvisibleElementsShowing;\n _this.createNewArray(\"elements\");\n return _this;\n }\n Object.defineProperty(QuestionRowModel.prototype, \"elements\", {\n get: function () {\n return this.getPropertyValue(\"elements\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visible\", {\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"visible\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRowModel.prototype, \"visibleElements\", {\n get: function () {\n return this.elements.filter(function (e) { return e.isVisible; });\n },\n enumerable: true,\n configurable: true\n });\n QuestionRowModel.prototype.updateVisible = function () {\n this.visible = this.calcVisible();\n this.setWidth();\n };\n QuestionRowModel.prototype.addElement = function (q) {\n this.elements.push(q);\n this.updateVisible();\n };\n Object.defineProperty(QuestionRowModel.prototype, \"index\", {\n get: function () {\n return this.panel.rows.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n QuestionRowModel.prototype.setWidth = function () {\n var visCount = this.visibleElements.length;\n if (visCount == 0)\n return;\n var counter = 0;\n var preSetWidthElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n this.setElementMaxMinWidth(el);\n if (el.isVisible) {\n var width = this.getElementWidth(el);\n if (!!width) {\n el.renderWidth = this.getRenderedWidthFromWidth(width);\n preSetWidthElements.push(el);\n }\n el.rightIndent = counter < visCount - 1 ? 1 : 0;\n counter++;\n }\n else {\n el.renderWidth = \"\";\n }\n }\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (!el.isVisible || preSetWidthElements.indexOf(el) > -1)\n continue;\n if (preSetWidthElements.length == 0) {\n el.renderWidth = (100 / visCount).toFixed(6) + \"%\";\n }\n else {\n el.renderWidth = this.getRenderedCalcWidth(el, preSetWidthElements, visCount);\n }\n }\n };\n QuestionRowModel.prototype.setElementMaxMinWidth = function (el) {\n if (el.width &&\n typeof el.width === \"string\" &&\n el.width.indexOf(\"%\") === -1) {\n el.minWidth = el.width;\n el.maxWidth = el.width;\n }\n };\n QuestionRowModel.prototype.getRenderedCalcWidth = function (el, preSetWidthElements, visCount) {\n var expression = \"100%\";\n for (var i = 0; i < preSetWidthElements.length; i++) {\n expression += \" - \" + preSetWidthElements[i].renderWidth;\n }\n var calcWidthEl = visCount - preSetWidthElements.length;\n if (calcWidthEl > 1) {\n expression = \"(\" + expression + \")/\" + calcWidthEl.toString();\n }\n return \"calc(\" + expression + \")\";\n };\n QuestionRowModel.prototype.getElementWidth = function (el) {\n var width = el.width;\n if (!width || typeof width !== \"string\")\n return \"\";\n return width.trim();\n };\n QuestionRowModel.prototype.getRenderedWidthFromWidth = function (width) {\n return __WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].isNumber(width) ? width + \"px\" : width;\n };\n QuestionRowModel.prototype.calcVisible = function () {\n return this.visibleElements.length > 0;\n };\n return QuestionRowModel;\n}(__WEBPACK_IMPORTED_MODULE_3__base__[\"a\" /* Base */]));\n\n/**\n * A base class for a Panel and Page objects.\n */\nvar PanelModelBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PanelModelBase, _super);\n function PanelModelBase(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.isQuestionsReady = false;\n _this.questionsValue = new Array();\n _this.conditionVersion = -1;\n _this.createNewArray(\"rows\");\n _this.elementsValue = _this.createNewArray(\"elements\", _this.onAddElement.bind(_this), _this.onRemoveElement.bind(_this));\n _this.registerFunctionOnPropertyValueChanged(\"questionTitleLocation\", _this.onVisibleChanged.bind(_this));\n _this.id = PanelModelBase.getPanelId();\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"requiredErrorText\", _this);\n return _this;\n }\n PanelModelBase.getPanelId = function () {\n return \"sp_\" + PanelModelBase.panelCounter++;\n };\n PanelModelBase.prototype.getType = function () {\n return \"panelbase\";\n };\n PanelModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (this.isDesignMode)\n this.onVisibleChanged();\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setSurveyImpl(value);\n }\n };\n PanelModelBase.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.markQuestionListDirty();\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"title\", {\n /**\n * PanelModel or PageModel title property.\n * @description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"_showTitle\", {\n get: function () {\n return ((this.survey.showPageTitles && this.title.length > 0) ||\n (this.isDesignMode && __WEBPACK_IMPORTED_MODULE_8__settings__[\"a\" /* settings */].allowShowEmptyTitleInDesignMode));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"_showDescription\", {\n get: function () {\n return ((this.survey.showPageTitles && this.description.length > 0) ||\n (this.isDesignMode && __WEBPACK_IMPORTED_MODULE_8__settings__[\"a\" /* settings */].allowShowEmptyTitleInDesignMode &&\n __WEBPACK_IMPORTED_MODULE_8__settings__[\"a\" /* settings */].allowShowEmptyDescriptionInDesignMode));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"description\", {\n /**\n * PanelModel or PageModel description property. It renders under title by using smaller font. Unlike the title, description can be empty.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"description\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].locStrsChanged();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.getLocalizableStringText(\"requiredErrorText\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"requiredErrorText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.getLocalizableString(\"requiredErrorText\");\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : \"\";\n };\n PanelModelBase.prototype.getMarkdownHtml = function (text) {\n return this.survey ? this.survey.getSurveyMarkdownHtml(this, text) : null;\n };\n PanelModelBase.prototype.getProcessedText = function (text) {\n return this.textProcessor\n ? this.textProcessor.processText(text, true)\n : text;\n };\n Object.defineProperty(PanelModelBase.prototype, \"parent\", {\n /**\n * A parent element. It is always null for the Page object and always not null for the Panel object. Panel object may contain Questions and other Panels.\n */\n get: function () {\n return this.getPropertyValue(\"parent\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"parent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"depth\", {\n get: function () {\n if (this.parent == null)\n return 0;\n return this.parent.depth + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"visibleIf\", {\n /**\n * An expression that returns true or false. If it returns true the Panel becomes visible and if it returns false the Panel becomes invisible. The library runs the expression on survey start and on changing a question value. If the property is empty then visible property is used.\n * @see visible\n */\n get: function () {\n return this.getPropertyValue(\"visibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIf\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"cssClasses\", {\n get: function () {\n var classes = { panel: {}, error: {}, row: \"\" };\n this.copyCssClasses(classes.panel, this.css.panel);\n this.copyCssClasses(classes.error, this.css.error);\n if (!!this.css.row) {\n classes.row = this.css.row;\n }\n if (this.survey) {\n this.survey.updatePanelCssClasses(this, classes);\n }\n return classes;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"id\", {\n /**\n * A unique element identificator. It is generated automatically.\n */\n get: function () {\n return this.getPropertyValue(\"id\");\n },\n set: function (val) {\n this.setPropertyValue(\"id\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModelBase.prototype, \"isPanel\", {\n /**\n * Returns true if the current object is Panel. Returns false if the current object is Page (a root Panel).\n */\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getPanel = function () {\n return this;\n };\n PanelModelBase.prototype.getLayoutType = function () {\n return \"row\";\n };\n PanelModelBase.prototype.isLayoutTypeSupported = function (layoutType) {\n return layoutType !== \"flow\";\n };\n Object.defineProperty(PanelModelBase.prototype, \"questions\", {\n /**\n * Returns the list of all questions located in the Panel/Page, including in the nested Panels.\n * @see Question\n * @see elements\n */\n get: function () {\n if (!this.isQuestionsReady) {\n this.questionsValue = [];\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el.isPanel) {\n var qs = el.questions;\n for (var j = 0; j < qs.length; j++) {\n this.questionsValue.push(qs[j]);\n }\n }\n else {\n this.questionsValue.push(el);\n }\n }\n this.isQuestionsReady = true;\n }\n return this.questionsValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the question by its name\n * @param name the question name\n */\n PanelModelBase.prototype.getQuestionByName = function (name) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].name == name)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns the element by its name. It works recursively.\n * @param name the element name\n */\n PanelModelBase.prototype.getElementByName = function (name) {\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.name == name)\n return el;\n var pnl = el.getPanel();\n if (!!pnl) {\n var res = pnl.getElementByName(name);\n if (!!res)\n return res;\n }\n }\n return null;\n };\n PanelModelBase.prototype.getQuestionByValueName = function (valueName) {\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].getValueName() == valueName)\n return questions[i];\n }\n return null;\n };\n /**\n * Returns question values on the current page\n */\n PanelModelBase.prototype.getValue = function () {\n var data = {};\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n if (q.isEmpty())\n continue;\n var valueName = q.getValueName();\n data[valueName] = q.value;\n if (!!this.data) {\n var comment = this.data.getComment(valueName);\n if (!!comment) {\n data[valueName + __WEBPACK_IMPORTED_MODULE_8__settings__[\"a\" /* settings */].commentPrefix] = comment;\n }\n }\n }\n return data;\n };\n /**\n * Returns question comments on the current page\n */\n PanelModelBase.prototype.getComments = function () {\n var comments = {};\n if (!this.data)\n return comments;\n var questions = this.questions;\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var comment = this.data.getComment(q.getValueName());\n if (!!comment) {\n comments[q.getValueName()] = comment;\n }\n }\n return comments;\n };\n /**\n * Call this function to remove all question values from the current page/panel, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radigroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * @see Question.clearIncorrectValues\n */\n PanelModelBase.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearIncorrectValues();\n }\n };\n /**\n * Call this function to clear all errors in the panel / page and all its child elements (panels and questions)\n */\n PanelModelBase.prototype.clearErrors = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].clearErrors();\n }\n this.errors = [];\n };\n PanelModelBase.prototype.markQuestionListDirty = function () {\n this.isQuestionsReady = false;\n if (this.parent)\n this.parent.markQuestionListDirty();\n };\n Object.defineProperty(PanelModelBase.prototype, \"elements\", {\n /**\n * Returns the list of the elements in the object, Panel/Page. Elements can be questions or panels. The function doesn't return elements in the nested Panels.\n */\n get: function () {\n return this.elementsValue;\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return this.elements;\n };\n /**\n * Returns true if the current element belongs to the Panel/Page. It looks in nested Panels as well.\n * @param element\n * @see PanelModel\n */\n PanelModelBase.prototype.containsElement = function (element) {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n if (el == element)\n return true;\n var pnl = el.getPanel();\n if (!!pnl) {\n if (pnl.containsElement(element))\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isRequired\", {\n /**\n * Set this property to true, to require the answer at least in one question in the panel.\n */\n get: function () {\n return this.getPropertyValue(\"isRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isRequired\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns true, if there is an error on this Page or inside the current Panel\n * @param fireCallback set it to true, to show errors in UI\n * @param focusOnFirstError set it to true to focus on the first question that doesn't pass the validation\n */\n PanelModelBase.prototype.hasErrors = function (fireCallback, focusOnFirstError, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n if (rec === void 0) { rec = null; }\n rec = !!rec\n ? rec\n : {\n fireCallback: fireCallback,\n focuseOnFirstError: focusOnFirstError,\n firstErrorQuestion: null,\n result: false,\n };\n this.hasErrorsCore(rec);\n if (rec.firstErrorQuestion) {\n rec.firstErrorQuestion.focus(true);\n }\n return rec.result;\n };\n PanelModelBase.prototype.hasErrorsInPanels = function (rec) {\n var errors = [];\n this.hasRequiredError(rec, errors);\n if (this.survey) {\n var customError = this.survey.validatePanel(this);\n if (customError) {\n errors.push(customError);\n rec.result = true;\n }\n }\n if (!!rec.fireCallback) {\n this.errors = errors;\n }\n };\n //ISurveyErrorOwner\n PanelModelBase.prototype.getErrorCustomText = function (text, error) {\n if (!!this.survey)\n return this.survey.getErrorCustomText(text, error);\n return text;\n };\n PanelModelBase.prototype.hasRequiredError = function (rec, errors) {\n if (!this.isRequired)\n return;\n var visQuestions = [];\n this.addQuestionsToList(visQuestions, true);\n if (visQuestions.length == 0)\n return;\n for (var i = 0; i < visQuestions.length; i++) {\n if (!visQuestions[i].isEmpty())\n return;\n }\n rec.result = true;\n errors.push(new __WEBPACK_IMPORTED_MODULE_7__error__[\"b\" /* OneAnswerRequiredError */](this.requiredErrorText, this));\n if (rec.focuseOnFirstError && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = visQuestions[0];\n }\n };\n PanelModelBase.prototype.hasErrorsCore = function (rec) {\n var elements = this.elements;\n var element = null;\n for (var i = 0; i < elements.length; i++) {\n element = elements[i];\n if (!element.isVisible)\n continue;\n if (element.isPanel) {\n element.hasErrorsCore(rec);\n }\n else {\n var question = element;\n if (question.isReadOnly)\n continue;\n if (question.hasErrors(rec.fireCallback, rec)) {\n if (rec.focuseOnFirstError && rec.firstErrorQuestion == null) {\n rec.firstErrorQuestion = question;\n }\n rec.result = true;\n }\n }\n }\n this.hasErrorsInPanels(rec);\n this.updateContainsErrors();\n };\n PanelModelBase.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].containsErrors)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.updateElementVisibility = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isVisible\", el.isVisible);\n if (el.isPanel) {\n el.updateElementVisibility();\n }\n }\n };\n PanelModelBase.prototype.getFirstQuestionToFocus = function (withError) {\n if (withError === void 0) { withError = false; }\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (!el.isVisible)\n continue;\n if (el.isPanel) {\n var res = el.getFirstQuestionToFocus(withError);\n if (!!res)\n return res;\n }\n else {\n var q = el;\n if (q.hasInput && (!withError || q.currentErrorCount > 0))\n return q;\n }\n }\n return null;\n };\n /**\n * Call it to focus the input on the first question\n */\n PanelModelBase.prototype.focusFirstQuestion = function () {\n var q = this.getFirstQuestionToFocus();\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Call it to focus the input of the first question that has an error.\n */\n PanelModelBase.prototype.focusFirstErrorQuestion = function () {\n var q = this.getFirstQuestionToFocus(true);\n if (!!q) {\n q.focus();\n }\n };\n /**\n * Fill list array with the questions.\n * @param list\n * @param visibleOnly set it to true to get visible questions only\n */\n PanelModelBase.prototype.addQuestionsToList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, false);\n };\n /**\n * Fill list array with the panels.\n * @param list\n */\n PanelModelBase.prototype.addPanelsIntoList = function (list, visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n this.addElementsToList(list, visibleOnly, includingDesignTime, true);\n };\n PanelModelBase.prototype.addElementsToList = function (list, visibleOnly, includingDesignTime, isPanel) {\n if (visibleOnly && !this.visible)\n return;\n this.addElementsToListCore(list, this.elements, visibleOnly, includingDesignTime, isPanel);\n };\n PanelModelBase.prototype.addElementsToListCore = function (list, elements, visibleOnly, includingDesignTime, isPanel) {\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (visibleOnly && !el.visible)\n continue;\n if ((isPanel && el.isPanel) || (!isPanel && !el.isPanel)) {\n list.push(el);\n }\n if (el.isPanel) {\n el.addElementsToListCore(list, el.elements, visibleOnly, includingDesignTime, isPanel);\n }\n else {\n if (includingDesignTime) {\n this.addElementsToListCore(list, el.getElementsInDesign(false), visibleOnly, includingDesignTime, isPanel);\n }\n }\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"isActive\", {\n /**\n * Returns true if the current object is Page and it is the current page.\n */\n get: function () {\n return !this.survey || this.survey.currentPage == this.root;\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.updateCustomWidgets = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].updateCustomWidgets();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"questionTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for this panel/page.\n * @see SurveyModel.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getQuestionTitleLocation = function () {\n if (this.onGetQuestionTitleLocation)\n return this.onGetQuestionTitleLocation();\n if (this.questionTitleLocation != \"default\")\n return this.questionTitleLocation;\n if (this.parent)\n return this.parent.getQuestionTitleLocation();\n return this.survey ? this.survey.questionTitleLocation : \"top\";\n };\n PanelModelBase.prototype.getStartIndex = function () {\n if (!!this.parent)\n return this.parent.getQuestionStartIndex();\n if (!!this.survey)\n return this.survey.questionStartIndex;\n return \"\";\n };\n PanelModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n PanelModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n Object.defineProperty(PanelModelBase.prototype, \"root\", {\n get: function () {\n var res = this;\n while (res.parent)\n res = res.parent;\n return res;\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.childVisibilityChanged = function () {\n var newIsVisibleValue = this.getIsPageVisible(null);\n var oldIsVisibleValue = this.getPropertyValue(\"isVisible\", true);\n if (newIsVisibleValue !== oldIsVisibleValue) {\n this.onVisibleChanged();\n }\n };\n PanelModelBase.prototype.createRow = function () {\n return new QuestionRowModel(this);\n };\n PanelModelBase.prototype.onSurveyLoad = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onSurveyLoad();\n }\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onFirstRendering = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onFirstRendering();\n }\n this.onRowsChanged();\n };\n Object.defineProperty(PanelModelBase.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.onRowsChanged = function () {\n if (this.isLoadingFromJson)\n return;\n this.setPropertyValue(\"rows\", this.buildRows());\n };\n PanelModelBase.prototype.onAddElement = function (element, index) {\n element.setSurveyImpl(this.surveyImpl);\n element.parent = this;\n this.markQuestionListDirty();\n this.updateRowsOnElementAdded(element, index);\n if (element.isPanel) {\n var p = element;\n if (this.survey) {\n this.survey.panelAdded(p, index, this, this.root);\n }\n }\n else {\n if (this.survey) {\n var q = element;\n this.survey.questionAdded(q, index, this, this.root);\n }\n }\n if (!!this.addElementCallback)\n this.addElementCallback(element);\n var self = this;\n element.registerFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\"], function () {\n self.onElementVisibilityChanged(element);\n }, this.id);\n element.registerFunctionOnPropertyValueChanged(\"startWithNewLine\", function () {\n self.onElementStartWithNewLineChanged(element);\n }, this.id);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onRemoveElement = function (element) {\n element.parent = null;\n this.markQuestionListDirty();\n element.unRegisterFunctionOnPropertiesValueChanged([\"visible\", \"isVisible\", \"startWithNewLine\"], this.id);\n this.updateRowsOnElementRemoved(element);\n if (!element.isPanel) {\n if (this.survey)\n this.survey.questionRemoved(element);\n }\n else {\n if (this.survey)\n this.survey.panelRemoved(element);\n }\n if (!!this.removeElementCallback)\n this.removeElementCallback(element);\n this.onElementVisibilityChanged(this);\n };\n PanelModelBase.prototype.onElementVisibilityChanged = function (element) {\n if (this.isLoadingFromJson)\n return;\n this.updateRowsVisibility(element);\n this.childVisibilityChanged();\n if (!!this.parent) {\n this.parent.onElementVisibilityChanged(this);\n }\n };\n PanelModelBase.prototype.onElementStartWithNewLineChanged = function (element) {\n this.onRowsChanged();\n };\n PanelModelBase.prototype.updateRowsVisibility = function (element) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row.elements.indexOf(element) > -1) {\n row.updateVisible();\n break;\n }\n }\n };\n PanelModelBase.prototype.canBuildRows = function () {\n return !this.isLoadingFromJson && this.getChildrenLayoutType() == \"row\";\n };\n PanelModelBase.prototype.buildRows = function () {\n if (!this.canBuildRows())\n return [];\n var result = new Array();\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n var isNewRow = i == 0 || el.startWithNewLine;\n var row = isNewRow ? this.createRow() : result[result.length - 1];\n if (isNewRow)\n result.push(row);\n row.addElement(el);\n }\n for (var i = 0; i < result.length; i++) {\n result[i].updateVisible();\n }\n return result;\n };\n PanelModelBase.prototype.updateRowsOnElementAdded = function (element, index) {\n if (!this.canBuildRows())\n return;\n var dragDropInfo = new DragDropInfo(null, element);\n dragDropInfo.target = element;\n dragDropInfo.isEdge = this.elements.length > 1;\n if (this.elements.length < 2) {\n dragDropInfo.destination = this;\n }\n else {\n dragDropInfo.isBottom = index > 0;\n if (index == 0) {\n dragDropInfo.destination = this.elements[1];\n }\n else {\n dragDropInfo.destination = this.elements[index - 1];\n }\n }\n this.dragDropAddTargetToRow(dragDropInfo, null);\n };\n PanelModelBase.prototype.updateRowsOnElementRemoved = function (element) {\n if (!this.canBuildRows())\n return;\n this.updateRowsRemoveElementFromRow(element, this.findRowByElement(element));\n };\n PanelModelBase.prototype.updateRowsRemoveElementFromRow = function (element, row) {\n if (!row || !row.panel)\n return;\n var elIndex = row.elements.indexOf(element);\n if (elIndex < 0)\n return;\n row.elements.splice(elIndex, 1);\n if (row.elements.length > 0) {\n row.updateVisible();\n }\n else {\n if (row.index >= 0) {\n row.panel.rows.splice(row.index, 1);\n }\n }\n };\n PanelModelBase.prototype.findRowByElement = function (el) {\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(el) > -1)\n return rows[i];\n }\n return null;\n };\n PanelModelBase.prototype.elementWidthChanged = function (el) {\n if (this.isLoadingFromJson)\n return;\n var row = this.findRowByElement(el);\n if (!!row) {\n row.updateVisible();\n }\n };\n Object.defineProperty(PanelModelBase.prototype, \"processedTitle\", {\n /**\n * Returns rendered title text or html.\n */\n get: function () {\n return this.getRenderedTitle(this.locTitle.textOrHtml);\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getRenderedTitle = function (str) {\n return this.textProcessor != null\n ? this.textProcessor.processText(str, true)\n : str;\n };\n Object.defineProperty(PanelModelBase.prototype, \"visible\", {\n /**\n * Use it to get/set the object visibility.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"visible\", true);\n },\n set: function (value) {\n if (value === this.visible)\n return;\n this.setPropertyValue(\"visible\", value);\n this.setPropertyValue(\"isVisible\", this.isVisible);\n if (!this.isLoadingFromJson)\n this.onVisibleChanged();\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.onVisibleChanged = function () {\n this.setPropertyValue(\"isVisible\", this.isVisible);\n };\n Object.defineProperty(PanelModelBase.prototype, \"isVisible\", {\n /**\n * Returns true if object is visible or survey is in design mode right now.\n */\n get: function () {\n return this.areInvisibleElementsShowing || this.getIsPageVisible(null);\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (!this.visible)\n return false;\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i] == exceptionQuestion)\n continue;\n if (this.elements[i].isVisible)\n return true;\n }\n return false;\n };\n PanelModelBase.prototype.setVisibleIndex = function (index) {\n if (!this.isVisible || index < 0) {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setVisibleIndex(-1);\n }\n return 0;\n }\n var startIndex = index;\n index += this.beforeSetVisibleIndex(index);\n var panelStartIndex = this.getPanelStartIndex(index);\n var panelIndex = panelStartIndex;\n for (var i = 0; i < this.elements.length; i++) {\n panelIndex += this.elements[i].setVisibleIndex(panelIndex);\n }\n if (this.isContinueNumbering()) {\n index += panelIndex - panelStartIndex;\n }\n return index - startIndex;\n };\n PanelModelBase.prototype.beforeSetVisibleIndex = function (index) {\n return 0;\n };\n PanelModelBase.prototype.getPanelStartIndex = function (index) {\n return index;\n };\n PanelModelBase.prototype.isContinueNumbering = function () {\n return true;\n };\n Object.defineProperty(PanelModelBase.prototype, \"isReadOnly\", {\n /**\n * Returns true if readOnly property is true or survey is in display mode or parent panel/page is readOnly.\n * @see SurveyModel.model\n * @see readOnly\n */\n get: function () {\n var isParentReadOnly = !!this.parent && this.parent.isReadOnly;\n var isSurveyReadOnly = !!this.survey && this.survey.isDisplayMode;\n return this.readOnly || isParentReadOnly || isSurveyReadOnly;\n },\n enumerable: true,\n configurable: true\n });\n PanelModelBase.prototype.onReadOnlyChanged = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.setPropertyValue(\"isReadOnly\", el.isReadOnly);\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n PanelModelBase.prototype.updateElementCss = function () {\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.updateElementCss();\n }\n _super.prototype.updateElementCss.call(this);\n };\n Object.defineProperty(PanelModelBase.prototype, \"enableIf\", {\n /**\n * An expression that returns true or false. If it returns false the Panel/Page becomes read only and an end-user will not able to answer on qustions inside it.\n * The library runs the expression on survey start and on changing a question value. If the property is empty then readOnly property is used.\n * @see readOnly\n * @see isReadOnly\n */\n get: function () {\n return this.getPropertyValue(\"enableIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"enableIf\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Add an element into Panel or Page. Returns true if the element added successfully. Otherwise returns false.\n * @param element\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addElement = function (element, index) {\n if (index === void 0) { index = -1; }\n if (!this.canAddElement(element))\n return false;\n if (index < 0 || index >= this.elements.length) {\n this.elements.push(element);\n }\n else {\n this.elements.splice(index, 0, element);\n }\n return true;\n };\n PanelModelBase.prototype.canAddElement = function (element) {\n return (!!element && element.isLayoutTypeSupported(this.getChildrenLayoutType()));\n };\n /**\n * Add a question into Panel or Page. Returns true if the question added successfully. Otherwise returns false.\n * @param question\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addQuestion = function (question, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(question, index);\n };\n /**\n * Add a panel into Panel or Page. Returns true if the panel added successfully. Otherwise returns false.\n * @param panel\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addPanel = function (panel, index) {\n if (index === void 0) { index = -1; }\n return this.addElement(panel, index);\n };\n /**\n * Creates a new question and adds it at location of index, by default the end of the elements list. Returns null, if the question could not be created or could not be added into page or panel.\n * @param questionType the possible values are: \"text\", \"checkbox\", \"dropdown\", \"matrix\", \"html\", \"matrixdynamic\", \"matrixdropdown\" and so on.\n * @param name a question name\n * @param index element index in the elements array\n */\n PanelModelBase.prototype.addNewQuestion = function (questionType, name, index) {\n if (name === void 0) { name = null; }\n if (index === void 0) { index = -1; }\n var question = __WEBPACK_IMPORTED_MODULE_6__questionfactory__[\"a\" /* QuestionFactory */].Instance.createQuestion(questionType, name);\n if (!this.addQuestion(question, index))\n return null;\n return question;\n };\n /**\n * Creates a new panel and adds it into the end of the elements list. Returns null, if the panel could not be created or could not be added into page or panel.\n * @param name a panel name\n */\n PanelModelBase.prototype.addNewPanel = function (name) {\n if (name === void 0) { name = null; }\n var panel = this.createNewPanel(name);\n if (!this.addPanel(panel))\n return null;\n return panel;\n };\n /**\n * Returns the index of element parameter in the elements list.\n * @param element question or panel\n */\n PanelModelBase.prototype.indexOf = function (element) {\n return this.elements.indexOf(element);\n };\n PanelModelBase.prototype.createNewPanel = function (name) {\n return new PanelModel(name);\n };\n /**\n * Remove an element (Panel or Question) from the elements list.\n * @param element\n * @see elements\n */\n PanelModelBase.prototype.removeElement = function (element) {\n var index = this.elements.indexOf(element);\n if (index < 0) {\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].removeElement(element))\n return true;\n }\n return false;\n }\n this.elements.splice(index, 1);\n return true;\n };\n /**\n * Remove question from the elements list.\n * @param question\n * @see elements\n * @see removeElement\n */\n PanelModelBase.prototype.removeQuestion = function (question) {\n this.removeElement(question);\n };\n PanelModelBase.prototype.runCondition = function (values, properties) {\n if (this.isDesignMode)\n return;\n if (values.conditionVersion < this.conditionVersion)\n return;\n this.conditionVersion = values.conditionVersion;\n var elements = this.elements.slice();\n for (var i = 0; i < elements.length; i++) {\n if (values.conditionVersion < this.conditionVersion)\n return;\n elements[i].runCondition(values, properties);\n }\n if (values.conditionVersion < this.conditionVersion)\n return;\n if (!this.areInvisibleElementsShowing) {\n this.runVisibleCondition(values, properties);\n }\n this.runEnableCondition(values, properties);\n };\n PanelModelBase.prototype.runVisibleCondition = function (values, properties) {\n var _this = this;\n if (!this.visibleIf)\n return;\n var conditionRunner = new __WEBPACK_IMPORTED_MODULE_5__conditions__[\"b\" /* ConditionRunner */](this.visibleIf);\n conditionRunner.onRunComplete = function (res) {\n _this.visible = res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.runEnableCondition = function (values, properties) {\n var _this = this;\n if (!this.enableIf)\n return;\n var conditionRunner = new __WEBPACK_IMPORTED_MODULE_5__conditions__[\"b\" /* ConditionRunner */](this.enableIf);\n conditionRunner.onRunComplete = function (res) {\n _this.readOnly = !res;\n };\n conditionRunner.run(values, properties);\n };\n PanelModelBase.prototype.onAnyValueChanged = function (name) {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].onAnyValueChanged(name);\n }\n };\n PanelModelBase.prototype.dragDropAddTarget = function (dragDropInfo) {\n var prevRow = this.dragDropFindRow(dragDropInfo.target);\n if (this.dragDropAddTargetToRow(dragDropInfo, prevRow)) {\n this.updateRowsRemoveElementFromRow(dragDropInfo.target, prevRow);\n }\n };\n PanelModelBase.prototype.dragDropFindRow = function (findElement) {\n if (!findElement || findElement.isPage)\n return null;\n var element = findElement;\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].elements.indexOf(element) > -1)\n return rows[i];\n }\n for (var i = 0; i < this.elements.length; i++) {\n var pnl = this.elements[i].getPanel();\n if (!pnl)\n continue;\n var row = pnl.dragDropFindRow(element);\n if (!!row)\n return row;\n }\n return null;\n };\n PanelModelBase.prototype.dragDropAddTargetToRow = function (dragDropInfo, prevRow) {\n if (!dragDropInfo.destination)\n return true;\n if (this.dragDropAddTargetToEmptyPanel(dragDropInfo))\n return true;\n var dest = dragDropInfo.destination;\n var destRow = this.dragDropFindRow(dest);\n if (!destRow)\n return true;\n if (!dragDropInfo.target.startWithNewLine)\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanel = function (dragDropInfo) {\n if (dragDropInfo.destination.isPage) {\n this.dragDropAddTargetToEmptyPanelCore(this.root, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n var dest = dragDropInfo.destination;\n if (dest.isPanel && !dragDropInfo.isEdge) {\n var panel = dest;\n if (dragDropInfo.target[\"template\"] === dest) {\n return false;\n }\n if (dragDropInfo.nestedPanelDepth < 0 ||\n dragDropInfo.nestedPanelDepth >= panel.depth) {\n this.dragDropAddTargetToEmptyPanelCore(dest, dragDropInfo.target, dragDropInfo.isBottom);\n return true;\n }\n }\n return false;\n };\n PanelModelBase.prototype.dragDropAddTargetToExistingRow = function (dragDropInfo, destRow, prevRow) {\n var index = destRow.elements.indexOf(dragDropInfo.destination);\n if (index == 0 &&\n !dragDropInfo.isBottom &&\n destRow.elements[0].startWithNewLine) {\n if (destRow.index > 0) {\n dragDropInfo.isBottom = true;\n destRow = destRow.panel.rows[destRow.index - 1];\n dragDropInfo.destination =\n destRow.elements[destRow.elements.length - 1];\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n }\n else {\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n }\n }\n var prevRowIndex = -1;\n if (prevRow == destRow) {\n prevRowIndex = destRow.elements.indexOf(dragDropInfo.target);\n }\n if (dragDropInfo.isBottom)\n index++;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (srcRow == destRow &&\n srcRow.elements.indexOf(dragDropInfo.source) == index)\n return false;\n if (index == prevRowIndex)\n return false;\n if (prevRowIndex > -1) {\n destRow.elements.splice(prevRowIndex, 1);\n if (prevRowIndex < index)\n index--;\n }\n destRow.elements.splice(index, 0, dragDropInfo.target);\n destRow.updateVisible();\n return prevRowIndex < 0;\n };\n PanelModelBase.prototype.dragDropAddTargetToNewRow = function (dragDropInfo, destRow, prevRow) {\n var targetRow = destRow.panel.createRow();\n targetRow.addElement(dragDropInfo.target);\n var index = destRow.index;\n if (dragDropInfo.isBottom) {\n index++;\n }\n //same row\n if (!!prevRow && prevRow.panel == targetRow.panel && prevRow.index == index)\n return false;\n var srcRow = this.findRowByElement(dragDropInfo.source);\n if (!!srcRow &&\n srcRow.panel == targetRow.panel &&\n srcRow.elements.length == 1 &&\n srcRow.index == index)\n return false;\n destRow.panel.rows.splice(index, 0, targetRow);\n return true;\n };\n PanelModelBase.prototype.dragDropAddTargetToEmptyPanelCore = function (panel, target, isBottom) {\n var targetRow = panel.createRow();\n targetRow.addElement(target);\n if (panel.elements.length == 0 || isBottom) {\n panel.rows.push(targetRow);\n }\n else {\n panel.rows.splice(0, 0, targetRow);\n }\n };\n PanelModelBase.prototype.dragDropMoveElement = function (src, target, targetIndex) {\n var srcIndex = src.parent.elements.indexOf(src);\n if (targetIndex > srcIndex) {\n targetIndex--;\n }\n this.removeElement(src);\n this.addElement(target, targetIndex);\n };\n PanelModelBase.prototype.dispose = function () {\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].dispose();\n }\n this.elements.splice(0, this.elements.length);\n };\n PanelModelBase.panelCounter = 100;\n return PanelModelBase;\n}(__WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */]));\n\n/**\n * A container element, similar to the Page objects. However, unlike the Page, Panel can't be a root.\n * It may contain questions and other panels.\n */\nvar PanelModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PanelModel, _super);\n function PanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.name = name;\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"state\", function () {\n if (self.stateChangedCallback)\n self.stateChangedCallback();\n });\n _this.registerFunctionOnPropertyValueChanged(\"width\", function () {\n if (!!self.parent) {\n self.parent.elementWidthChanged(self);\n }\n });\n _this.registerFunctionOnPropertiesValueChanged([\"indent\", \"innerIndent\", \"rightIndent\"], function () {\n self.onIndentChanged();\n });\n return _this;\n }\n PanelModel.prototype.getType = function () {\n return \"panel\";\n };\n PanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onIndentChanged();\n };\n Object.defineProperty(PanelModel.prototype, \"isPanel\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"page\", {\n /**\n * Get/set the page where the panel is located.\n */\n get: function () {\n return this.getPage(this.parent);\n },\n set: function (val) {\n this.setPage(this.parent, val);\n },\n enumerable: true,\n configurable: true\n });\n PanelModel.prototype.delete = function () {\n if (!!this.parent) {\n this.removeSelfFromList(this.parent.elements);\n }\n };\n Object.defineProperty(PanelModel.prototype, \"state\", {\n /**\n * Set this property to \"collapsed\" to render only Panel title and expanded button and to \"expanded\" to render the collapsed button in the Panel caption\n */\n get: function () {\n return this.getPropertyValue(\"state\");\n },\n set: function (val) {\n this.setPropertyValue(\"state\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"isCollapsed\", {\n /**\n * Returns true if the Panel is in the collapsed state\n * @see state\n * @see collapse\n * @see isExpanded\n */\n get: function () {\n return this.state == \"collapsed\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"isExpanded\", {\n /**\n * Returns true if the Panel is in the expanded state\n * @see state\n * @see expand\n * @see isCollapsed\n */\n get: function () {\n if (this.isDesignMode)\n return;\n return this.state == \"expanded\";\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Collapse the Panel\n * @see state\n */\n PanelModel.prototype.collapse = function () {\n if (this.isDesignMode)\n return;\n this.state = \"collapsed\";\n };\n /**\n * Expand the Panel\n * @see state\n */\n PanelModel.prototype.expand = function () {\n this.state = \"expanded\";\n };\n /**\n * Move panel to a new container Page/Panel. Add as a last element if insertBefore parameter is not used or inserted into the given index,\n * if insert parameter is number, or before the given element, if the insertBefore parameter is a question or panel\n * @param container Page or Panel to where a question is relocated.\n * @param insertBefore Use it if you want to set the panel to a specific position. You may use a number (use 0 to insert int the beginning) or element, if you want to insert before this element.\n */\n PanelModel.prototype.moveTo = function (container, insertBefore) {\n if (insertBefore === void 0) { insertBefore = null; }\n return this.moveToBase(this.parent, container, insertBefore);\n };\n Object.defineProperty(PanelModel.prototype, \"visibleIndex\", {\n /**\n * Returns the visible index of the panel in the survey. Commonly it is -1 and it doesn't show.\n * You have to set showNumber to true to show index/numbering for the Panel\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showNumber\", {\n /**\n * Set showNumber to true to start showing the number for this panel.\n * @see visibleIndex\n */\n get: function () {\n return this.getPropertyValue(\"showNumber\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showNumber\", val);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the elements numbers inside panel are displayed.\n *\n * The following options are available:\n *\n * - `default` - display questions numbers as defined in parent panel or survey\n * - `onpanel` - display questions numbers, start numbering from beginning of this page\n * - `off` - turn off the numbering for questions titles\n * @see showNumber\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\", \"default\");\n },\n set: function (value) {\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.notifySurveyOnVisibilityChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index for elements inside the panel. The first question index is '1.' by default and it is taken from survey.questionStartIndex property.\n * You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see survey.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: true,\n configurable: true\n });\n PanelModel.prototype.getQuestionStartIndex = function () {\n if (!!this.questionStartIndex)\n return this.questionStartIndex;\n return _super.prototype.getQuestionStartIndex.call(this);\n };\n Object.defineProperty(PanelModel.prototype, \"no\", {\n /**\n * The property returns the question number. If question is invisible then it returns empty string.\n * If visibleIndex is 1, then no is 2, or 'B' if survey.questionStartIndex is 'A'.\n * @see SurveyModel.questionStartIndex\n */\n get: function () {\n return this.getPropertyValue(\"no\", \"\");\n },\n enumerable: true,\n configurable: true\n });\n PanelModel.prototype.setNo = function (visibleIndex) {\n this.setPropertyValue(\"no\", __WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].getNumberByIndex(this.visibleIndex, this.getStartIndex()));\n };\n PanelModel.prototype.beforeSetVisibleIndex = function (index) {\n var visibleIndex = -1;\n if (this.showNumber && (this.isDesignMode || !this.locTitle.isEmpty)) {\n visibleIndex = index;\n }\n this.setPropertyValue(\"visibleIndex\", visibleIndex);\n this.setNo(visibleIndex);\n return visibleIndex < 0 ? 0 : 1;\n };\n PanelModel.prototype.getPanelStartIndex = function (index) {\n if (this.showQuestionNumbers == \"off\")\n return -1;\n if (this.showQuestionNumbers == \"onpanel\")\n return 0;\n return index;\n };\n PanelModel.prototype.isContinueNumbering = function () {\n return (this.showQuestionNumbers != \"off\" && this.showQuestionNumbers != \"onpanel\");\n };\n PanelModel.prototype.notifySurveyOnVisibilityChanged = function () {\n if (this.survey != null && !this.isLoadingFromJson) {\n this.survey.panelVisibilityChanged(this, this.isVisible);\n }\n };\n PanelModel.prototype.hasErrorsCore = function (rec) {\n _super.prototype.hasErrorsCore.call(this, rec);\n if (this.isCollapsed && rec.result && rec.fireCallback) {\n this.expand();\n }\n };\n PanelModel.prototype.getRenderedTitle = function (str) {\n if (!str) {\n if (this.isCollapsed || this.isExpanded)\n return this.name;\n if (this.isDesignMode)\n return \"[\" + this.name + \"]\";\n }\n return _super.prototype.getRenderedTitle.call(this, str);\n };\n Object.defineProperty(PanelModel.prototype, \"width\", {\n /**\n * The Panel width.\n */\n get: function () {\n return this.getPropertyValue(\"width\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"indent\", {\n /**\n * The left indent. Set this property to increase the panel left indent.\n */\n get: function () {\n return this.getPropertyValue(\"indent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"indent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerIndent\", {\n /**\n * The inner indent. Set this property to increase the panel content margin.\n */\n get: function () {\n return this.getPropertyValue(\"innerIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"innerIndent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"renderWidth\", {\n get: function () {\n return this.getPropertyValue(\"renderWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"startWithNewLine\", {\n /**\n * The Panel renders on the new line if the property is true. If the property is false, the panel tries to render on the same line/row with a previous question/panel.\n */\n get: function () {\n return this.getPropertyValue(\"startWithNewLine\", true);\n },\n set: function (value) {\n this.setPropertyValue(\"startWithNewLine\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"rightIndent\", {\n /**\n * The right indent of the Panel.\n */\n get: function () {\n return this.getPropertyValue(\"rightIndent\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"rightIndent\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"paddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingLeft\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"innerPaddingLeft\", {\n get: function () {\n return this.getPropertyValue(\"innerPaddingLeft\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"innerPaddingLeft\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"paddingRight\", {\n get: function () {\n return this.getPropertyValue(\"paddingRight\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"paddingRight\", val);\n },\n enumerable: true,\n configurable: true\n });\n PanelModel.prototype.onIndentChanged = function () {\n this.innerPaddingLeft = this.getIndentSize(this.innerIndent);\n this.paddingLeft = this.getIndentSize(this.indent);\n this.paddingRight = this.getIndentSize(this.rightIndent);\n };\n PanelModel.prototype.getIndentSize = function (indent) {\n if (indent < 1)\n return \"\";\n if (!this.data)\n return \"\";\n var css = this.survey[\"css\"];\n if (!css)\n return \"\";\n return indent * css.question.indent + \"px\";\n };\n PanelModel.prototype.clearOnDeletingContainer = function () {\n this.elements.forEach(function (element) {\n if (element instanceof __WEBPACK_IMPORTED_MODULE_4__question__[\"a\" /* Question */] || element instanceof PanelModel) {\n element.clearOnDeletingContainer();\n }\n });\n };\n Object.defineProperty(PanelModel.prototype, \"hasEditButton\", {\n get: function () {\n if (this.survey && this.survey.state == \"preview\")\n return this.depth == 1;\n return false;\n },\n enumerable: true,\n configurable: true\n });\n PanelModel.prototype.cancelPreview = function () {\n if (!this.hasEditButton)\n return;\n this.survey.cancelPreviewByPage(this);\n };\n PanelModel.prototype.onVisibleChanged = function () {\n _super.prototype.onVisibleChanged.call(this);\n this.setPropertyValue(\"isVisible\", this.isVisible);\n this.notifySurveyOnVisibilityChanged();\n };\n return PanelModel;\n}(PanelModelBase));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"panelbase\", [\n \"name\",\n {\n name: \"elements\",\n alternativeName: \"questions\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"visible:boolean\", default: true },\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"readOnly:boolean\",\n {\n name: \"questionTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\", \"hidden\"],\n },\n { name: \"title\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n], function () {\n return new PanelModelBase();\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"panel\", [\n {\n name: \"state\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\"],\n },\n \"isRequired:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n { name: \"startWithNewLine:boolean\", default: true },\n \"width\",\n { name: \"innerIndent:number\", default: 0, choices: [0, 1, 2, 3] },\n { name: \"indent:number\", default: 0, choices: [0, 1, 2, 3] },\n {\n name: \"page\",\n isSerializable: false,\n visibleIf: function (obj) {\n var survey = obj ? obj.survey : null;\n return !survey || survey.pages.length > 1;\n },\n choices: function (obj) {\n var survey = obj ? obj.survey : null;\n return survey\n ? survey.pages.map(function (p) {\n return { value: p.name, text: p.title };\n })\n : [];\n },\n },\n \"showNumber:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"default\",\n choices: [\"default\", \"onpanel\", \"off\"],\n },\n \"questionStartIndex\",\n], function () {\n return new PanelModel();\n}, \"panelbase\");\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers__ = __webpack_require__(6);\n/* unused harmony export TextPreProcessorItem */\n/* unused harmony export TextPreProcessorValue */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return TextPreProcessor; });\n\nvar TextPreProcessorItem = /** @class */ (function () {\n function TextPreProcessorItem() {\n }\n return TextPreProcessorItem;\n}());\n\nvar TextPreProcessorValue = /** @class */ (function () {\n function TextPreProcessorValue(name, returnDisplayValue) {\n this.name = name;\n this.returnDisplayValue = returnDisplayValue;\n this.isExists = false;\n this.canProcess = true;\n }\n return TextPreProcessorValue;\n}());\n\nvar TextPreProcessor = /** @class */ (function () {\n function TextPreProcessor() {\n }\n TextPreProcessor.prototype.process = function (text, returnDisplayValue, doEncoding) {\n if (returnDisplayValue === void 0) { returnDisplayValue = false; }\n if (doEncoding === void 0) { doEncoding = false; }\n this.hasAllValuesOnLastRunValue = true;\n if (!text)\n return text;\n if (!this.onProcess)\n return text;\n var items = this.getItems(text);\n for (var i = items.length - 1; i >= 0; i--) {\n var item = items[i];\n var name = this.getName(text.substring(item.start + 1, item.end));\n if (!name)\n continue;\n var textValue = new TextPreProcessorValue(name, returnDisplayValue);\n this.onProcess(textValue);\n if (!textValue.isExists) {\n if (textValue.canProcess) {\n this.hasAllValuesOnLastRunValue = false;\n }\n continue;\n }\n if (__WEBPACK_IMPORTED_MODULE_0__helpers__[\"a\" /* Helpers */].isValueEmpty(textValue.value)) {\n this.hasAllValuesOnLastRunValue = false;\n }\n var replacedValue = !__WEBPACK_IMPORTED_MODULE_0__helpers__[\"a\" /* Helpers */].isValueEmpty(textValue.value)\n ? textValue.value\n : \"\";\n if (doEncoding) {\n replacedValue = encodeURIComponent(replacedValue);\n }\n text =\n text.substr(0, item.start) + replacedValue + text.substr(item.end + 1);\n }\n return text;\n };\n Object.defineProperty(TextPreProcessor.prototype, \"hasAllValuesOnLastRun\", {\n get: function () {\n return !!this.hasAllValuesOnLastRunValue;\n },\n enumerable: true,\n configurable: true\n });\n TextPreProcessor.prototype.getItems = function (text) {\n var items = [];\n var length = text.length;\n var start = -1;\n var ch = \"\";\n for (var i = 0; i < length; i++) {\n ch = text[i];\n if (ch == \"{\")\n start = i;\n if (ch == \"}\") {\n if (start > -1) {\n var item = new TextPreProcessorItem();\n item.start = start;\n item.end = i;\n items.push(item);\n }\n start = -1;\n }\n }\n return items;\n };\n TextPreProcessor.prototype.getName = function (name) {\n if (!name)\n return;\n return name.trim();\n };\n return TextPreProcessor;\n}());\n\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__functionsfactory__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditionProcessValue__ = __webpack_require__(16);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return Operand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return BinaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return UnaryOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return ArrayOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return Const; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return Variable; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return FunctionOperand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return OperandMaker; });\n\n\n\n\nvar Operand = /** @class */ (function () {\n function Operand() {\n }\n Operand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n return \"\";\n };\n Operand.prototype.hasFunction = function () {\n return false;\n };\n Operand.prototype.hasAsyncFunction = function () {\n return false;\n };\n Operand.prototype.addToAsyncList = function (list) { };\n return Operand;\n}());\n\nvar BinaryOperand = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(BinaryOperand, _super);\n function BinaryOperand(operatorName, left, right, isArithmeticOp) {\n if (left === void 0) { left = null; }\n if (right === void 0) { right = null; }\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n var _this = _super.call(this) || this;\n _this.operatorName = operatorName;\n _this.left = left;\n _this.right = right;\n _this.isArithmeticValue = isArithmeticOp;\n if (isArithmeticOp) {\n _this.consumer = OperandMaker.binaryFunctions[\"arithmeticOp\"](operatorName);\n }\n else {\n _this.consumer = OperandMaker.binaryFunctions[operatorName];\n }\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n BinaryOperand.prototype.getType = function () {\n return \"binary\";\n };\n Object.defineProperty(BinaryOperand.prototype, \"isArithmetic\", {\n get: function () {\n return this.isArithmeticValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"isConjunction\", {\n get: function () {\n return this.operatorName == \"or\" || this.operatorName == \"and\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"conjunction\", {\n get: function () {\n return this.isConjunction ? this.operatorName : \"\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"leftOperand\", {\n get: function () {\n return this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BinaryOperand.prototype, \"rightOperand\", {\n get: function () {\n return this.right;\n },\n enumerable: true,\n configurable: true\n });\n BinaryOperand.prototype.evaluateParam = function (x, processValue) {\n return x == null ? null : x.evaluate(processValue);\n };\n BinaryOperand.prototype.evaluate = function (processValue) {\n return this.consumer.call(this, this.evaluateParam(this.left, processValue), this.evaluateParam(this.right, processValue));\n };\n BinaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"(\" +\n OperandMaker.safeToString(this.left, func) +\n \" \" +\n OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n OperandMaker.safeToString(this.right, func) +\n \")\");\n };\n BinaryOperand.prototype.setVariables = function (variables) {\n if (this.left != null)\n this.left.setVariables(variables);\n if (this.right != null)\n this.right.setVariables(variables);\n };\n BinaryOperand.prototype.hasFunction = function () {\n return ((!!this.left && this.left.hasFunction()) ||\n (!!this.right && this.right.hasFunction()));\n };\n BinaryOperand.prototype.hasAsyncFunction = function () {\n return ((!!this.left && this.left.hasAsyncFunction()) ||\n (!!this.right && this.right.hasAsyncFunction()));\n };\n BinaryOperand.prototype.addToAsyncList = function (list) {\n if (!!this.left)\n this.left.addToAsyncList(list);\n if (!!this.right)\n this.right.addToAsyncList(list);\n };\n return BinaryOperand;\n}(Operand));\n\nvar UnaryOperand = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(UnaryOperand, _super);\n function UnaryOperand(expressionValue, operatorName) {\n var _this = _super.call(this) || this;\n _this.expressionValue = expressionValue;\n _this.operatorName = operatorName;\n _this.consumer = OperandMaker.unaryFunctions[operatorName];\n if (_this.consumer == null) {\n OperandMaker.throwInvalidOperatorError(operatorName);\n }\n return _this;\n }\n Object.defineProperty(UnaryOperand.prototype, \"operator\", {\n get: function () {\n return this.operatorName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(UnaryOperand.prototype, \"expression\", {\n get: function () {\n return this.expressionValue;\n },\n enumerable: true,\n configurable: true\n });\n UnaryOperand.prototype.getType = function () {\n return \"unary\";\n };\n UnaryOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (OperandMaker.operatorToString(this.operatorName) +\n \" \" +\n this.expression.toString(func));\n };\n UnaryOperand.prototype.evaluate = function (processValue) {\n var value = this.expression.evaluate(processValue);\n return this.consumer.call(this, value);\n };\n UnaryOperand.prototype.setVariables = function (variables) {\n this.expression.setVariables(variables);\n };\n return UnaryOperand;\n}(Operand));\n\nvar ArrayOperand = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ArrayOperand, _super);\n function ArrayOperand(values) {\n var _this = _super.call(this) || this;\n _this.values = values;\n return _this;\n }\n ArrayOperand.prototype.getType = function () {\n return \"array\";\n };\n ArrayOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return (\"[\" +\n this.values\n .map(function (el) {\n return el.toString(func);\n })\n .join(\", \") +\n \"]\");\n };\n ArrayOperand.prototype.evaluate = function (processValue) {\n return this.values.map(function (el) {\n return el.evaluate(processValue);\n });\n };\n ArrayOperand.prototype.setVariables = function (variables) {\n this.values.forEach(function (el) {\n el.setVariables(variables);\n });\n };\n ArrayOperand.prototype.hasFunction = function () {\n return this.values.some(function (operand) { return operand.hasFunction(); });\n };\n ArrayOperand.prototype.hasAsyncFunction = function () {\n return this.values.some(function (operand) { return operand.hasAsyncFunction(); });\n };\n ArrayOperand.prototype.addToAsyncList = function (list) {\n this.values.forEach(function (operand) { return operand.addToAsyncList(list); });\n };\n return ArrayOperand;\n}(Operand));\n\nvar Const = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Const, _super);\n function Const(value) {\n var _this = _super.call(this) || this;\n _this.value = value;\n return _this;\n }\n Const.prototype.getType = function () {\n return \"const\";\n };\n Const.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.value.toString();\n };\n Object.defineProperty(Const.prototype, \"correctValue\", {\n get: function () {\n return this.getCorrectValue(this.value);\n },\n enumerable: true,\n configurable: true\n });\n Const.prototype.evaluate = function () {\n return this.getCorrectValue(this.value);\n };\n Const.prototype.setVariables = function (variables) { };\n Const.prototype.getCorrectValue = function (value) {\n if (!value || typeof value != \"string\")\n return value;\n if (this.isBooleanValue(value))\n return value.toLowerCase() === \"true\";\n if (OperandMaker.isNumeric(value)) {\n if (value.indexOf(\"0x\") == 0)\n return parseInt(value);\n return parseFloat(value);\n }\n return value;\n };\n Const.prototype.isBooleanValue = function (value) {\n return (value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n return Const;\n}(Operand));\n\nvar Variable = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Variable, _super);\n function Variable(variableName) {\n var _this = _super.call(this, variableName) || this;\n _this.variableName = variableName;\n return _this;\n }\n Variable.prototype.getType = function () {\n return \"variable\";\n };\n Variable.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return \"{\" + this.variableName + \"}\";\n };\n Object.defineProperty(Variable.prototype, \"variable\", {\n get: function () {\n return this.variableName;\n },\n enumerable: true,\n configurable: true\n });\n Variable.prototype.evaluate = function (processValue) {\n return processValue.hasValue(this.variableName)\n ? this.getCorrectValue(processValue.getValue(this.variableName))\n : null;\n };\n Variable.prototype.setVariables = function (variables) {\n variables.push(this.variableName);\n };\n return Variable;\n}(Const));\n\nvar FunctionOperand = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(FunctionOperand, _super);\n function FunctionOperand(origionalValue, parameters) {\n var _this = _super.call(this) || this;\n _this.origionalValue = origionalValue;\n _this.parameters = parameters;\n _this.isReadyValue = false;\n if (Array.isArray(parameters) && parameters.length === 0) {\n _this.parameters = new ArrayOperand([]);\n }\n return _this;\n }\n FunctionOperand.prototype.getType = function () {\n return \"function\";\n };\n FunctionOperand.prototype.evaluateAsync = function (processValue) {\n var _this = this;\n this.isReadyValue = false;\n var asyncProcessValue = new __WEBPACK_IMPORTED_MODULE_3__conditionProcessValue__[\"a\" /* ProcessValue */]();\n asyncProcessValue.values = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].createCopy(processValue.values);\n asyncProcessValue.properties = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].createCopy(processValue.properties);\n asyncProcessValue.properties.returnResult = function (result) {\n _this.asynResult = result;\n _this.isReadyValue = true;\n _this.onAsyncReady();\n };\n this.evaluateCore(asyncProcessValue);\n };\n FunctionOperand.prototype.evaluate = function (processValue) {\n if (this.isReady)\n return this.asynResult;\n return this.evaluateCore(processValue);\n };\n FunctionOperand.prototype.evaluateCore = function (processValue) {\n return __WEBPACK_IMPORTED_MODULE_2__functionsfactory__[\"a\" /* FunctionFactory */].Instance.run(this.origionalValue, this.parameters.evaluate(processValue), processValue.properties);\n };\n FunctionOperand.prototype.toString = function (func) {\n if (func === void 0) { func = undefined; }\n if (!!func) {\n var res = func(this);\n if (!!res)\n return res;\n }\n return this.origionalValue + \"(\" + this.parameters.toString(func) + \")\";\n };\n FunctionOperand.prototype.setVariables = function (variables) {\n this.parameters.setVariables(variables);\n };\n Object.defineProperty(FunctionOperand.prototype, \"isReady\", {\n get: function () {\n return this.isReadyValue;\n },\n enumerable: true,\n configurable: true\n });\n FunctionOperand.prototype.hasFunction = function () {\n return true;\n };\n FunctionOperand.prototype.hasAsyncFunction = function () {\n return __WEBPACK_IMPORTED_MODULE_2__functionsfactory__[\"a\" /* FunctionFactory */].Instance.isAsyncFunction(this.origionalValue);\n };\n FunctionOperand.prototype.addToAsyncList = function (list) {\n if (this.hasAsyncFunction()) {\n list.push(this);\n }\n };\n return FunctionOperand;\n}(Operand));\n\nvar OperandMaker = /** @class */ (function () {\n function OperandMaker() {\n }\n OperandMaker.throwInvalidOperatorError = function (op) {\n throw new Error(\"Invalid operator: '\" + op + \"'\");\n };\n OperandMaker.safeToString = function (operand, func) {\n return operand == null ? \"\" : operand.toString(func);\n };\n OperandMaker.toOperandString = function (value) {\n if (!!value &&\n !OperandMaker.isNumeric(value) &&\n !OperandMaker.isBooleanValue(value))\n value = \"'\" + value + \"'\";\n return value;\n };\n OperandMaker.isSpaceString = function (str) {\n return !!str && !str.replace(\" \", \"\");\n };\n OperandMaker.isNumeric = function (value) {\n if (!!value &&\n (value.indexOf(\"-\") > -1 ||\n value.indexOf(\"+\") > 1 ||\n value.indexOf(\"*\") > -1 ||\n value.indexOf(\"^\") > -1 ||\n value.indexOf(\"/\") > -1 ||\n value.indexOf(\"%\") > -1))\n return false;\n if (OperandMaker.isSpaceString(value))\n return false;\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isNumber(value);\n };\n OperandMaker.isBooleanValue = function (value) {\n return (!!value &&\n (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\"));\n };\n OperandMaker.operatorToString = function (operatorName) {\n var opStr = OperandMaker.signs[operatorName];\n return opStr == null ? operatorName : opStr;\n };\n OperandMaker.unaryFunctions = {\n empty: function (value) {\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(value);\n },\n notempty: function (value) {\n return !OperandMaker.unaryFunctions.empty(value);\n },\n negate: function (value) {\n return !value;\n },\n };\n OperandMaker.binaryFunctions = {\n arithmeticOp: function (operatorName) {\n return function (a, b) {\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(a) && !OperandMaker.isSpaceString(a)) {\n a = typeof b === \"string\" ? \"\" : 0;\n }\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(b) && !OperandMaker.isSpaceString(b)) {\n b = typeof a === \"string\" ? \"\" : 0;\n }\n var consumer = OperandMaker.binaryFunctions[operatorName];\n return consumer == null ? null : consumer.call(this, a, b);\n };\n },\n and: function (a, b) {\n return a && b;\n },\n or: function (a, b) {\n return a || b;\n },\n plus: function (a, b) {\n return a + b;\n },\n minus: function (a, b) {\n return a - b;\n },\n mul: function (a, b) {\n return a * b;\n },\n div: function (a, b) {\n if (!b)\n return null;\n return a / b;\n },\n mod: function (a, b) {\n if (!b)\n return null;\n return a % b;\n },\n power: function (a, b) {\n return Math.pow(a, b);\n },\n greater: function (left, right) {\n if (left == null || right == null)\n return false;\n return left > right;\n },\n less: function (left, right) {\n if (left == null || right == null)\n return false;\n return left < right;\n },\n greaterorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.greater(left, right);\n },\n lessorequal: function (left, right) {\n if (OperandMaker.binaryFunctions.equal(left, right))\n return true;\n return OperandMaker.binaryFunctions.less(left, right);\n },\n equal: function (left, right) {\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(left, right, true);\n },\n notequal: function (left, right) {\n return !__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(left, right, true);\n },\n contains: function (left, right) {\n return OperandMaker.binaryFunctions.containsCore(left, right, true);\n },\n notcontains: function (left, right) {\n if (!left && !__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(right))\n return true;\n return OperandMaker.binaryFunctions.containsCore(left, right, false);\n },\n anyof: function (left, right) {\n if (!left && __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(right))\n return true;\n if (!left || (!Array.isArray(left) && left.length === 0))\n return false;\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(right))\n return true;\n if (!Array.isArray(left))\n return OperandMaker.binaryFunctions.contains(right, left);\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (OperandMaker.binaryFunctions.contains(left, right[i]))\n return true;\n }\n return false;\n },\n allof: function (left, right) {\n if (!left && !__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(right))\n return false;\n if (!Array.isArray(right))\n return OperandMaker.binaryFunctions.contains(left, right);\n for (var i = 0; i < right.length; i++) {\n if (!OperandMaker.binaryFunctions.contains(left, right[i]))\n return false;\n }\n return true;\n },\n containsCore: function (left, right, isContains) {\n if (!left)\n return false;\n if (!left.length) {\n left = left.toString();\n }\n if (typeof left === \"string\" || left instanceof String) {\n if (!right)\n return false;\n right = right.toString();\n var found = left.indexOf(right) > -1;\n return isContains ? found : !found;\n }\n var rightArray = Array.isArray(right) ? right : [right];\n for (var rIndex = 0; rIndex < rightArray.length; rIndex++) {\n var i = 0;\n right = rightArray[rIndex];\n for (; i < left.length; i++) {\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(left[i], right))\n break;\n }\n if (i == left.length)\n return !isContains;\n }\n return isContains;\n },\n };\n OperandMaker.signs = {\n less: \"<\",\n lessorequal: \"<=\",\n greater: \">\",\n greaterorequal: \">=\",\n equal: \"==\",\n notequal: \"!=\",\n plus: \"+\",\n minus: \"-\",\n mul: \"*\",\n div: \"/\",\n and: \"and\",\n or: \"or\",\n power: \"^\",\n mod: \"%\",\n negate: \"!\",\n };\n return OperandMaker;\n}());\n\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return FunctionFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return registerFunction; });\nvar FunctionFactory = /** @class */ (function () {\n function FunctionFactory() {\n this.functionHash = {};\n this.isAsyncHash = {};\n }\n FunctionFactory.prototype.register = function (name, func, isAsync) {\n if (isAsync === void 0) { isAsync = false; }\n this.functionHash[name] = func;\n if (isAsync)\n this.isAsyncHash[name] = true;\n };\n FunctionFactory.prototype.unregister = function (name) {\n delete this.functionHash[name];\n delete this.isAsyncHash[name];\n };\n FunctionFactory.prototype.hasFunction = function (name) {\n return !!this.functionHash[name];\n };\n FunctionFactory.prototype.isAsyncFunction = function (name) {\n return !!this.isAsyncHash[name];\n };\n FunctionFactory.prototype.clear = function () {\n this.functionHash = {};\n };\n FunctionFactory.prototype.getAll = function () {\n var result = [];\n for (var key in this.functionHash) {\n result.push(key);\n }\n return result.sort();\n };\n FunctionFactory.prototype.run = function (name, params, properties) {\n if (properties === void 0) { properties = null; }\n var func = this.functionHash[name];\n if (!func)\n return null;\n var classRunner = {\n func: func,\n };\n if (properties) {\n for (var key in properties) {\n classRunner[key] = properties[key];\n }\n }\n return classRunner.func(params);\n };\n FunctionFactory.Instance = new FunctionFactory();\n return FunctionFactory;\n}());\n\nvar registerFunction = FunctionFactory.Instance.register;\nfunction getParamsAsArray(value, arr) {\n if (value === undefined || value === null)\n return;\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n getParamsAsArray(value[i], arr);\n }\n }\n else {\n arr.push(value);\n }\n}\nfunction sum(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return res;\n}\nFunctionFactory.Instance.register(\"sum\", sum);\nfunction min_max(params, isMin) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = undefined;\n for (var i = 0; i < arr.length; i++) {\n if (res === undefined) {\n res = arr[i];\n }\n if (isMin) {\n if (res > arr[i])\n res = arr[i];\n }\n else {\n if (res < arr[i])\n res = arr[i];\n }\n }\n return res;\n}\nfunction min(params) {\n return min_max(params, true);\n}\nFunctionFactory.Instance.register(\"min\", min);\nfunction max(params) {\n return min_max(params, false);\n}\nFunctionFactory.Instance.register(\"max\", max);\nfunction count(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n return arr.length;\n}\nFunctionFactory.Instance.register(\"count\", count);\nfunction avg(params) {\n var arr = [];\n getParamsAsArray(params, arr);\n var res = 0;\n for (var i = 0; i < arr.length; i++) {\n res += arr[i];\n }\n return arr.length > 0 ? res / arr.length : 0;\n}\nFunctionFactory.Instance.register(\"avg\", avg);\nfunction getInArrayParams(params) {\n if (params.length != 2)\n return null;\n var arr = params[0];\n if (!arr)\n return null;\n if (!Array.isArray(arr) && !Array.isArray(Object.keys(arr)))\n return null;\n var name = params[1];\n if (typeof name !== \"string\" && !(name instanceof String))\n return null;\n return { data: arr, name: name };\n}\nfunction calcInArray(params, func) {\n var v = getInArrayParams(params);\n if (!v)\n return undefined;\n var res = undefined;\n if (Array.isArray(v.data)) {\n for (var i = 0; i < v.data.length; i++) {\n var item = v.data[i];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n else {\n for (var key in v.data) {\n var item = v.data[key];\n if (!!item && item[v.name]) {\n res = func(res, item[v.name]);\n }\n }\n }\n return res;\n}\nfunction sumInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return +res + +val;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"sumInArray\", sumInArray);\nfunction minInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res < val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"minInArray\", minInArray);\nfunction maxInArray(params) {\n return calcInArray(params, function (res, val) {\n if (res == undefined)\n return val;\n return res > val ? res : val;\n });\n}\nFunctionFactory.Instance.register(\"maxInArray\", maxInArray);\nfunction countInArray(params) {\n var res = calcInArray(params, function (res, val) {\n if (res == undefined)\n res = 0;\n return res + 1;\n });\n return res !== undefined ? res : 0;\n}\nFunctionFactory.Instance.register(\"countInArray\", countInArray);\nfunction avgInArray(params) {\n var count = countInArray(params);\n if (count == 0)\n return 0;\n return sumInArray(params) / count;\n}\nFunctionFactory.Instance.register(\"avgInArray\", avgInArray);\nfunction iif(params) {\n if (!params && params.length !== 3)\n return \"\";\n return params[0] ? params[1] : params[2];\n}\nFunctionFactory.Instance.register(\"iif\", iif);\nfunction getDate(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n return new Date(params[0]);\n}\nFunctionFactory.Instance.register(\"getDate\", getDate);\nfunction age(params) {\n if (!params && params.length < 1)\n return null;\n if (!params[0])\n return null;\n var birthDay = new Date(params[0]);\n var ageDifMs = Date.now() - birthDay.getTime();\n var ageDate = new Date(ageDifMs); // miliseconds from epoch\n return Math.abs(ageDate.getUTCFullYear() - 1970);\n}\nFunctionFactory.Instance.register(\"age\", age);\nfunction isContainerReady(params) {\n if (!params && params.length < 1)\n return false;\n if (!params[0] || !this.survey)\n return false;\n var name = params[0];\n var container = this.survey.getPageByName(name);\n if (!container)\n container = this.survey.getPanelByName(name);\n if (!container)\n return false;\n var questions = container.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasErrors(false))\n return false;\n }\n return true;\n}\nFunctionFactory.Instance.register(\"isContainerReady\", isContainerReady);\nfunction isDisplayMode() {\n return this.survey && this.survey.isDisplayMode;\n}\nFunctionFactory.Instance.register(\"isDisplayMode\", isDisplayMode);\nfunction currentDate() {\n return new Date();\n}\nFunctionFactory.Instance.register(\"currentDate\", currentDate);\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__martixBase__ = __webpack_require__(79);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__textPreProcessor__ = __webpack_require__(21);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__question_expression__ = __webpack_require__(83);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__functionsfactory__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return matrixDropdownColumnTypes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return MatrixDropdownColumn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixDropdownCell; });\n/* unused harmony export MatrixDropdownTotalCell */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return MatrixDropdownRowModelBase; });\n/* unused harmony export MatrixDropdownTotalRowModel */\n/* unused harmony export QuestionMatrixDropdownRenderedCell */\n/* unused harmony export QuestionMatrixDropdownRenderedRow */\n/* unused harmony export QuestionMatrixDropdownRenderedTable */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return QuestionMatrixDropdownModelBase; });\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data) {\n if (cellQuestion.hasOther) {\n cellQuestion.storeOthersAsComment = false;\n }\n if ((!cellQuestion.choices || cellQuestion.choices.length == 0) &&\n cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choices = question.choices;\n }\n if (!cellQuestion.choicesByUrl.isEmpty) {\n cellQuestion.choicesByUrl.run(data);\n }\n}\nvar matrixDropdownColumnTypes = {\n dropdown: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"optionsCaption\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n if (cellQuestion.locOptionsCaption.isEmpty &&\n !question.locOptionsCaption.isEmpty) {\n cellQuestion.optionsCaption = question.optionsCaption;\n }\n },\n },\n checkbox: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n \"hasSelectAll\",\n \"hasNone\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n radiogroup: {\n properties: [\n \"choices\",\n \"choicesOrder\",\n \"choicesByUrl\",\n \"otherText\",\n \"choicesVisibleIf\",\n ],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n onUpdateSelectBaseCellQuestion(cellQuestion, column, question, data);\n cellQuestion.colCount =\n column.colCount > -1 ? column.colCount : question.columnColCount;\n },\n },\n text: {\n properties: [\"placeHolder\", \"inputType\", \"maxLength\", \"min\", \"max\", \"step\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n comment: {\n properties: [\"placeHolder\", \"rows\", \"maxLength\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n boolean: {\n properties: [\"defaultValue\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) {\n cellQuestion.showTitle = true;\n },\n },\n expression: {\n properties: [\"expression\", \"displayStyle\", \"currency\"],\n onCellQuestionUpdate: function (cellQuestion, column, question, data) { },\n },\n rating: {\n properties: [\"rateValues\"],\n },\n};\nvar MatrixDropdownColumn = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDropdownColumn, _super);\n function MatrixDropdownColumn(name, title) {\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.colOwnerValue = null;\n _this.indexValue = -1;\n _this._isVisible = true;\n _this._hasVisibleCell = true;\n var self = _this;\n _this.createLocalizableString(\"totalFormat\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"showInMultipleColumns\", function () {\n self.doShowInMultipleColumnsChanged();\n });\n _this.updateTemplateQuestion();\n _this.name = name;\n if (title)\n _this.title = title;\n return _this;\n }\n MatrixDropdownColumn.getColumnTypes = function () {\n var res = [];\n for (var key in matrixDropdownColumnTypes) {\n res.push(key);\n }\n return res;\n };\n MatrixDropdownColumn.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.templateQuestion.endLoadingFromJson();\n };\n MatrixDropdownColumn.prototype.getDynamicPropertyName = function () {\n return \"cellType\";\n };\n MatrixDropdownColumn.prototype.getDynamicType = function () {\n return this.calcCellQuestionType();\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colOwner\", {\n get: function () {\n return this.colOwnerValue;\n },\n set: function (value) {\n this.colOwnerValue = value;\n this.updateTemplateQuestion();\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownColumn.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.locTitle.strChanged();\n };\n MatrixDropdownColumn.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.templateQuestion.addUsedLocales(locales);\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"index\", {\n get: function () {\n return this.indexValue;\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIndex = function (val) {\n this.indexValue = val;\n };\n MatrixDropdownColumn.prototype.getType = function () {\n return \"matrixdropdowncolumn\";\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"cellType\", {\n get: function () {\n return this.getPropertyValue(\"cellType\");\n },\n set: function (val) {\n val = val.toLocaleLowerCase();\n this.setPropertyValue(\"cellType\", val);\n this.updateTemplateQuestion();\n if (!!this.colOwner) {\n this.colOwner.onColumnCellTypeChanged(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"templateQuestion\", {\n get: function () {\n return this.templateQuestionValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"value\", {\n get: function () {\n return this.templateQuestion.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownColumn.prototype.setIsVisible = function (newVal) {\n this._isVisible = newVal;\n };\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasVisibleCell\", {\n get: function () {\n return this._hasVisibleCell;\n },\n set: function (newVal) {\n this._hasVisibleCell = newVal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"name\", {\n get: function () {\n return this.templateQuestion.name;\n },\n set: function (val) {\n this.templateQuestion.name = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"title\", {\n get: function () {\n return this.templateQuestion.title;\n },\n set: function (val) {\n this.templateQuestion.title = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTitle\", {\n get: function () {\n return this.templateQuestion.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"fullTitle\", {\n get: function () {\n return this.locTitle.textOrHtml;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isRequired\", {\n get: function () {\n return this.templateQuestion.isRequired;\n },\n set: function (val) {\n this.templateQuestion.isRequired = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredErrorText\", {\n get: function () {\n return this.templateQuestion.requiredErrorText;\n },\n set: function (val) {\n this.templateQuestion.requiredErrorText = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.templateQuestion.locRequiredErrorText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"readOnly\", {\n get: function () {\n return this.templateQuestion.readOnly;\n },\n set: function (val) {\n this.templateQuestion.readOnly = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasOther\", {\n get: function () {\n return this.templateQuestion.hasOther;\n },\n set: function (val) {\n this.templateQuestion.hasOther = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"visibleIf\", {\n get: function () {\n return this.templateQuestion.visibleIf;\n },\n set: function (val) {\n this.templateQuestion.visibleIf = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"enableIf\", {\n get: function () {\n return this.templateQuestion.enableIf;\n },\n set: function (val) {\n this.templateQuestion.enableIf = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"requiredIf\", {\n get: function () {\n return this.templateQuestion.requiredIf;\n },\n set: function (val) {\n this.templateQuestion.requiredIf = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"showInMultipleColumns\", {\n get: function () {\n return this.getPropertyValue(\"showInMultipleColumns\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showInMultipleColumns\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isSupportMultipleColumns\", {\n get: function () {\n return [\"checkbox\", \"radiogroup\"].indexOf(this.cellType) > -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"isShowInMultipleColumns\", {\n get: function () {\n return this.showInMultipleColumns && this.isSupportMultipleColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"validators\", {\n get: function () {\n return this.templateQuestion.validators;\n },\n set: function (val) {\n this.templateQuestion.validators = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalType\", {\n get: function () {\n return this.getPropertyValue(\"totalType\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalType\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalExpression\", {\n get: function () {\n return this.getPropertyValue(\"totalExpression\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalExpression\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"hasTotal\", {\n get: function () {\n return this.totalType != \"none\" || !!this.totalExpression;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalFormat\", {\n get: function () {\n return this.getLocalizableStringText(\"totalFormat\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalFormat\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"locTotalFormat\", {\n get: function () {\n return this.getLocalizableString(\"totalFormat\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMaximumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMaximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMaximumFractionDigits\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalMinimumFractionDigits\", {\n get: function () {\n return this.getPropertyValue(\"totalMinimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"totalMinimumFractionDigits\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalDisplayStyle\", {\n get: function () {\n return this.getPropertyValue(\"totalDisplayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"totalDisplayStyle\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"totalCurrency\", {\n get: function () {\n return this.getPropertyValue(\"totalCurrency\");\n },\n set: function (val) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_10__question_expression__[\"b\" /* getCurrecyCodes */])().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"totalCurrency\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"minWidth\", {\n get: function () {\n return this.getPropertyValue(\"minWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"minWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"width\", {\n get: function () {\n return this.getPropertyValue(\"width\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownColumn.prototype, \"colCount\", {\n get: function () {\n return this.getPropertyValue(\"colCount\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 4)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownColumn.prototype.getLocale = function () {\n return this.colOwner ? this.colOwner.getLocale() : \"\";\n };\n MatrixDropdownColumn.prototype.getMarkdownHtml = function (text) {\n return this.colOwner ? this.colOwner.getMarkdownHtml(text) : null;\n };\n MatrixDropdownColumn.prototype.getProcessedText = function (text) {\n return this.colOwner ? this.colOwner.getProcessedText(text) : text;\n };\n MatrixDropdownColumn.prototype.createCellQuestion = function (data) {\n var qType = this.calcCellQuestionType();\n var cellQuestion = this.createNewQuestion(qType);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n return cellQuestion;\n };\n MatrixDropdownColumn.prototype.updateCellQuestion = function (cellQuestion, data, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n this.setQuestionProperties(cellQuestion, onUpdateJson);\n this.callOnCellQuestionUpdate(cellQuestion, data);\n };\n MatrixDropdownColumn.prototype.callOnCellQuestionUpdate = function (cellQuestion, data) {\n var qType = cellQuestion.getType();\n var qDefinition = matrixDropdownColumnTypes[qType];\n if (qDefinition && qDefinition[\"onCellQuestionUpdate\"]) {\n qDefinition[\"onCellQuestionUpdate\"](cellQuestion, this, this.colOwner, data);\n }\n };\n MatrixDropdownColumn.prototype.defaultCellTypeChanged = function () {\n this.updateTemplateQuestion();\n };\n MatrixDropdownColumn.prototype.calcCellQuestionType = function () {\n if (this.cellType !== \"default\")\n return this.cellType;\n if (this.colOwner)\n return this.colOwner.getCellType();\n return __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].matrixDefaultCellType;\n };\n MatrixDropdownColumn.prototype.updateTemplateQuestion = function () {\n var prevCellType = this.templateQuestion\n ? this.templateQuestion.getType()\n : \"\";\n var curCellType = this.calcCellQuestionType();\n if (curCellType === prevCellType)\n return;\n if (this.templateQuestion) {\n this.removeProperties(prevCellType);\n }\n this.templateQuestionValue = this.createNewQuestion(curCellType);\n this.templateQuestion.locOwner = this;\n this.addProperties(curCellType);\n var self = this;\n this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n self.doColumnPropertiesChanged(options.name, options.newValue);\n });\n };\n MatrixDropdownColumn.prototype.createNewQuestion = function (cellType) {\n var question = __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].createClass(cellType);\n if (!question) {\n question = __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].createClass(\"text\");\n }\n question.loadingOwner = this;\n this.setQuestionProperties(question);\n return question;\n };\n MatrixDropdownColumn.prototype.setQuestionProperties = function (question, onUpdateJson) {\n if (onUpdateJson === void 0) { onUpdateJson = null; }\n if (this.templateQuestion) {\n var json = new __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(this.templateQuestion, true);\n if (onUpdateJson) {\n onUpdateJson(json);\n }\n json.type = question.getType();\n new __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"b\" /* JsonObject */]().toObject(json, question);\n }\n };\n MatrixDropdownColumn.prototype.propertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.propertyValueChanged.call(this, name, oldValue, newValue);\n this.doColumnPropertiesChanged(name, newValue);\n };\n MatrixDropdownColumn.prototype.doColumnPropertiesChanged = function (name, newValue) {\n if (name == \"visibleChoices\")\n return; //TODO descriptor doesn't return that it is a read-only property\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnPropertyChanged(this, name, newValue);\n }\n };\n MatrixDropdownColumn.prototype.doShowInMultipleColumnsChanged = function () {\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onShowInMultipleColumnsChanged(this);\n }\n };\n MatrixDropdownColumn.prototype.getProperties = function (curCellType) {\n return __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].getDynamicPropertiesByObj(this, curCellType);\n };\n MatrixDropdownColumn.prototype.removeProperties = function (curCellType) {\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n delete this[prop.name];\n if (prop.serializationProperty) {\n delete this[prop.serializationProperty];\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperties = function (curCellType) {\n var question = this.templateQuestion;\n var properties = this.getProperties(curCellType);\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n this.addProperty(question, prop.name, false);\n if (prop.serializationProperty) {\n this.addProperty(question, prop.serializationProperty, true);\n }\n }\n };\n MatrixDropdownColumn.prototype.addProperty = function (question, propName, isReadOnly) {\n var desc = {\n configurable: true,\n get: function () {\n return question[propName];\n },\n };\n if (!isReadOnly) {\n desc[\"set\"] = function (v) {\n question[propName] = v;\n };\n }\n Object.defineProperty(this, propName, desc);\n };\n return MatrixDropdownColumn;\n}(__WEBPACK_IMPORTED_MODULE_4__base__[\"a\" /* Base */]));\n\nvar MatrixDropdownCell = /** @class */ (function () {\n function MatrixDropdownCell(column, row, data) {\n this.column = column;\n this.row = row;\n this.data = data;\n this.questionValue = this.createQuestion(column, row, data);\n this.questionValue.updateCustomWidget();\n }\n MatrixDropdownCell.prototype.locStrsChanged = function () {\n this.question.locStrsChanged();\n };\n MatrixDropdownCell.prototype.createQuestion = function (column, row, data) {\n var res = data.createQuestion(this.row, this.column);\n res.validateValueCallback = function () {\n return data.validateCell(row, column.name, row.value);\n };\n __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"a\" /* CustomPropertiesCollection */].getProperties(column.getType()).forEach(function (property) {\n var propertyName = property.name;\n if (column[propertyName] !== undefined) {\n res[propertyName] = column[propertyName];\n }\n });\n return res;\n };\n Object.defineProperty(MatrixDropdownCell.prototype, \"question\", {\n get: function () {\n return this.questionValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownCell.prototype, \"value\", {\n get: function () {\n return this.question.value;\n },\n set: function (value) {\n this.question.value = value;\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownCell.prototype.runCondition = function (values, properties) {\n this.question.runCondition(values, properties);\n };\n return MatrixDropdownCell;\n}());\n\nvar MatrixDropdownTotalCell = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDropdownTotalCell, _super);\n function MatrixDropdownTotalCell(column, row, data) {\n var _this = _super.call(this, column, row, data) || this;\n _this.column = column;\n _this.row = row;\n _this.data = data;\n _this.updateCellQuestion();\n return _this;\n }\n MatrixDropdownTotalCell.prototype.createQuestion = function (column, row, data) {\n var res = __WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].createClass(\"expression\");\n res.setSurveyImpl(row);\n return res;\n };\n MatrixDropdownTotalCell.prototype.locStrsChanged = function () {\n this.updateCellQuestion();\n _super.prototype.locStrsChanged.call(this);\n };\n MatrixDropdownTotalCell.prototype.updateCellQuestion = function () {\n this.question.locCalculation();\n this.column.updateCellQuestion(this.question, null, function (json) {\n delete json[\"defaultValue\"];\n });\n this.question.expression = this.getTotalExpression();\n this.question.format = this.column.totalFormat;\n this.question.currency = this.column.totalCurrency;\n this.question.displayStyle = this.column.totalDisplayStyle;\n this.question.maximumFractionDigits = this.column.totalMaximumFractionDigits;\n this.question.minimumFractionDigits = this.column.totalMinimumFractionDigits;\n this.question.unlocCalculation();\n };\n MatrixDropdownTotalCell.prototype.getTotalExpression = function () {\n if (!!this.column.totalExpression)\n return this.column.totalExpression;\n if (this.column.totalType == \"none\")\n return \"\";\n var funName = this.column.totalType + \"InArray\";\n if (!__WEBPACK_IMPORTED_MODULE_11__functionsfactory__[\"a\" /* FunctionFactory */].Instance.hasFunction(funName))\n return \"\";\n return funName + \"({self}, '\" + this.column.name + \"')\";\n };\n return MatrixDropdownTotalCell;\n}(MatrixDropdownCell));\n\nvar MatrixDropdownRowModelBase = /** @class */ (function () {\n function MatrixDropdownRowModelBase(data, value) {\n this.isSettingValue = false;\n this.cells = [];\n this.data = data;\n this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_5__textPreProcessor__[\"a\" /* TextPreProcessor */]();\n var self = this;\n this.textPreProcessor.onProcess = function (textValue) {\n self.getProcessedTextValue(textValue);\n };\n this.idValue = MatrixDropdownRowModelBase.getId();\n }\n MatrixDropdownRowModelBase.getId = function () {\n return \"srow_\" + MatrixDropdownRowModelBase.idCounter++;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowName\", {\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"value\", {\n get: function () {\n var result = {};\n for (var i = 0; i < this.cells.length; i++) {\n var question = this.cells[i].question;\n if (!question.isEmpty()) {\n result[question.getValueName()] = question.value;\n }\n }\n return result;\n },\n set: function (value) {\n this.isSettingValue = true;\n for (var i = 0; i < this.cells.length; i++) {\n var question = this.cells[i].question;\n var val = !!value ? value[question.getValueName()] : null;\n question.updateValueFromSurvey(val);\n question.onSurveyValueChanged(val);\n }\n this.isSettingValue = false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"locText\", {\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getAllValues = function () {\n return this.value;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredValues = function () {\n var allValues = this.getAllValues();\n var values = { row: allValues };\n for (var key in allValues) {\n values[key] = allValues[key];\n }\n return values;\n };\n MatrixDropdownRowModelBase.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey(), row: this };\n };\n MatrixDropdownRowModelBase.prototype.runCondition = function (values, properties) {\n if (!!this.data) {\n values[MatrixDropdownRowModelBase.OwnerVariableName] = this.data.value;\n }\n values[MatrixDropdownRowModelBase.IndexVariableName] = this.rowIndex;\n if (!properties)\n properties = {};\n properties[MatrixDropdownRowModelBase.RowVariableName] = this;\n for (var i = 0; i < this.cells.length; i++) {\n values[MatrixDropdownRowModelBase.RowVariableName] = this.value;\n this.cells[i].runCondition(values, properties);\n }\n };\n MatrixDropdownRowModelBase.prototype.onAnyValueChanged = function (name) {\n for (var i = 0; i < this.cells.length; i++) {\n this.cells[i].question.onAnyValueChanged(name);\n }\n };\n MatrixDropdownRowModelBase.prototype.getDataValueCore = function (valuesHash, key) {\n var survey = this.getSurvey();\n if (!!survey) {\n return survey.getDataValueCore(valuesHash, key);\n }\n else {\n return valuesHash[key];\n }\n };\n MatrixDropdownRowModelBase.prototype.getValue = function (name) {\n var question = this.getQuestionByColumnName(name);\n return !!question ? question.value : null;\n };\n MatrixDropdownRowModelBase.prototype.setValue = function (name, newColumnValue) {\n if (this.isSettingValue)\n return;\n var newValue = this.value;\n var changedValue = this.getValue(name);\n var changedQuestion = this.getQuestionByColumnName(name);\n var changingValue = this.data.onRowChanging(this, name, newValue);\n if (!!changedQuestion &&\n !__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isTwoValueEquals(changingValue, changedValue)) {\n this.getQuestionByColumnName(name).value = changingValue;\n }\n else {\n this.data.onRowChanged(this, name, newValue, newColumnValue == null && !changedQuestion);\n this.onAnyValueChanged(MatrixDropdownRowModelBase.RowVariableName);\n }\n };\n MatrixDropdownRowModelBase.prototype.getVariable = function (name) {\n return undefined;\n };\n MatrixDropdownRowModelBase.prototype.setVariable = function (name, newValue) { };\n MatrixDropdownRowModelBase.prototype.getComment = function (name) {\n var result = this.getValue(name + __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].commentPrefix);\n return result ? result : \"\";\n };\n MatrixDropdownRowModelBase.prototype.setComment = function (name, newValue, locNotification) {\n this.setValue(name + __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].commentPrefix, newValue);\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"isEmpty\", {\n get: function () {\n var val = this.value;\n if (__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isValueEmpty(val))\n return true;\n for (var key in val) {\n if (val[key] !== undefined && val[key] !== null)\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n MatrixDropdownRowModelBase.prototype.getQuestionByColumn = function (column) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column == column)\n return this.cells[i].question;\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getQuestionByColumnName = function (columnName) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column.name == columnName)\n return this.cells[i].question;\n }\n return null;\n };\n MatrixDropdownRowModelBase.prototype.getSharedQuestionByName = function (columnName) {\n return !!this.data\n ? this.data.getSharedQuestionByName(columnName, this)\n : null;\n };\n MatrixDropdownRowModelBase.prototype.clearIncorrectValues = function (val) {\n for (var key in val) {\n var question = this.getQuestionByColumnName(key);\n if (question) {\n var qVal = question.value;\n question.clearIncorrectValues();\n if (!__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isTwoValueEquals(qVal, question.value)) {\n this.setValue(key, question.value);\n }\n }\n else {\n if (!this.getSharedQuestionByName(key)) {\n this.setValue(key, null);\n }\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.getLocale = function () {\n return this.data ? this.data.getLocale() : \"\";\n };\n MatrixDropdownRowModelBase.prototype.getMarkdownHtml = function (text) {\n return this.data ? this.data.getMarkdownHtml(text) : null;\n };\n MatrixDropdownRowModelBase.prototype.getProcessedText = function (text) {\n return this.data ? this.data.getProcessedText(text) : text;\n };\n MatrixDropdownRowModelBase.prototype.locStrsChanged = function () {\n for (var i = 0; i < this.cells.length; i++) {\n this.cells[i].locStrsChanged();\n }\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnChanged = function (column, name, newValue) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column === column) {\n this.updateCellOnColumnChanged(this.cells[i], name, newValue);\n return;\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.onQuestionReadOnlyChanged = function (parentIsReadOnly) {\n for (var i = 0; i < this.cells.length; i++) {\n if (!!this.cells[i].question) {\n this.cells[i].question.readOnly = parentIsReadOnly;\n }\n }\n };\n MatrixDropdownRowModelBase.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.question[name] = newValue;\n };\n MatrixDropdownRowModelBase.prototype.buildCells = function (value) {\n this.isSettingValue = true;\n var columns = this.data.columns;\n for (var i = 0; i < columns.length; i++) {\n var column = columns[i];\n if (!column.isVisible)\n continue;\n var cell = this.createCell(column);\n this.cells.push(cell);\n if (!!value && !__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isValueEmpty(value[column.name])) {\n cell.question.value = value[column.name];\n }\n }\n this.isSettingValue = false;\n };\n MatrixDropdownRowModelBase.prototype.createCell = function (column) {\n return new MatrixDropdownCell(column, this, this.data);\n };\n MatrixDropdownRowModelBase.prototype.geSurveyData = function () {\n return this;\n };\n MatrixDropdownRowModelBase.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n Object.defineProperty(MatrixDropdownRowModelBase.prototype, \"rowIndex\", {\n get: function () {\n return !!this.data ? this.data.getRowIndex(this) + 1 : -1;\n },\n enumerable: true,\n configurable: true\n });\n //ITextProcessor\n MatrixDropdownRowModelBase.prototype.getProcessedTextValue = function (textValue) {\n var firstName = new __WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__[\"a\" /* ProcessValue */]().getFirstName(textValue.name);\n textValue.isExists =\n firstName == MatrixDropdownRowModelBase.RowVariableName;\n textValue.canProcess = textValue.isExists;\n if (!textValue.isExists)\n return;\n var values = { row: this.value };\n textValue.value = new __WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__[\"a\" /* ProcessValue */]().getValue(textValue.name, values);\n };\n MatrixDropdownRowModelBase.prototype.getTextProcessor = function () {\n return this;\n };\n MatrixDropdownRowModelBase.prototype.processText = function (text, returnDisplayValue) {\n text = this.textPreProcessor.process(text, returnDisplayValue);\n if (!this.getSurvey())\n return text;\n return this.getSurvey().processText(text, returnDisplayValue);\n };\n MatrixDropdownRowModelBase.prototype.processTextEx = function (text, returnDisplayValue) {\n text = this.processText(text, returnDisplayValue);\n if (!this.getSurvey())\n return text;\n var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n var res = this.getSurvey().processTextEx(text, returnDisplayValue, false);\n res.hasAllValuesOnLastRun =\n res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n return res;\n };\n MatrixDropdownRowModelBase.RowVariableName = \"row\";\n MatrixDropdownRowModelBase.OwnerVariableName = \"self\";\n MatrixDropdownRowModelBase.IndexVariableName = \"rowIndex\";\n MatrixDropdownRowModelBase.idCounter = 1;\n return MatrixDropdownRowModelBase;\n}());\n\nvar MatrixDropdownTotalRowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDropdownTotalRowModel, _super);\n function MatrixDropdownTotalRowModel(data) {\n var _this = _super.call(this, data, null) || this;\n _this.buildCells(null);\n return _this;\n }\n MatrixDropdownTotalRowModel.prototype.createCell = function (column) {\n return new MatrixDropdownTotalCell(column, this, this.data);\n };\n MatrixDropdownTotalRowModel.prototype.setValue = function (name, newValue) {\n if (!!this.data && !this.isSettingValue) {\n this.data.onTotalValueChanged();\n }\n };\n MatrixDropdownTotalRowModel.prototype.runCondition = function (values, properties) {\n var counter = 0;\n var prevValue;\n do {\n prevValue = __WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].getUnbindValue(this.value);\n _super.prototype.runCondition.call(this, values, properties);\n counter++;\n } while (!__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isTwoValueEquals(prevValue, this.value) && counter < 3);\n };\n MatrixDropdownTotalRowModel.prototype.updateCellOnColumnChanged = function (cell, name, newValue) {\n cell.updateCellQuestion();\n };\n return MatrixDropdownTotalRowModel;\n}(MatrixDropdownRowModelBase));\n\nvar QuestionMatrixDropdownRenderedCell = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedCell() {\n this.minWidth = \"\";\n this.width = \"\";\n this.idValue = QuestionMatrixDropdownRenderedCell.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasQuestion\", {\n get: function () {\n return !!this.question;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"hasTitle\", {\n get: function () {\n return !!this.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnTop\", {\n get: function () {\n return this.showErrorOnCore(\"top\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"showErrorOnBottom\", {\n get: function () {\n return this.showErrorOnCore(\"bottom\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.prototype.showErrorOnCore = function (location) {\n return (this.getShowErrorLocation() == location &&\n (!this.isChoice || this.isFirstChoice));\n };\n QuestionMatrixDropdownRenderedCell.prototype.getShowErrorLocation = function () {\n return this.hasQuestion ? this.question.survey.questionErrorLocation : \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"item\", {\n get: function () {\n return this.itemValue;\n },\n set: function (val) {\n this.itemValue = val;\n if (!!val) {\n val.hideCaption = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isChoice\", {\n get: function () {\n return !!this.item;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"choiceValue\", {\n get: function () {\n return this.isChoice ? this.item.value : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isCheckbox\", {\n get: function () {\n return this.isChoice && this.question.getType() == \"checkbox\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedCell.prototype, \"isFirstChoice\", {\n get: function () {\n return this.choiceIndex === 0;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownRenderedCell.counter = 1;\n return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedRow() {\n this.cells = [];\n this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownRenderedRow.counter = 1;\n return QuestionMatrixDropdownRenderedRow;\n}());\n\nvar QuestionMatrixDropdownRenderedTable = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixDropdownRenderedTable, _super);\n function QuestionMatrixDropdownRenderedTable(matrix) {\n var _this = _super.call(this) || this;\n _this.matrix = matrix;\n _this.createNewArray(\"rows\");\n _this.build();\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showHeader\", {\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"showFooter\", {\n get: function () {\n return this.matrix.hasFooter && this.matrix.isColumnLayoutHorizontal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasFooter\", {\n get: function () {\n return !!this.footerRow;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"hasRemoveRows\", {\n get: function () {\n return this.hasRemoveRowsValue;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.isRequireReset = function () {\n return (this.hasRemoveRows != this.matrix.canRemoveRows ||\n !this.matrix.isColumnLayoutHorizontal);\n };\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"headerRow\", {\n get: function () {\n return this.headerRowValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"footerRow\", {\n get: function () {\n return this.footerRowValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedTable.prototype, \"rows\", {\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownRenderedTable.prototype.build = function () {\n this.hasRemoveRowsValue = this.matrix.canRemoveRows;\n //build rows now\n var rows = this.matrix.visibleRows;\n this.buildHeader();\n this.buildRows();\n this.buildFooter();\n };\n QuestionMatrixDropdownRenderedTable.prototype.onAddedRow = function () {\n if (this.rows.length >= this.matrix.visibleRows.length)\n return;\n this.rows.push(this.createHorizontalRow(this.matrix.visibleRows[this.matrix.visibleRows.length - 1]));\n };\n QuestionMatrixDropdownRenderedTable.prototype.onRemovedRow = function (index) {\n if (this.rows.length <= index)\n return;\n this.rows.splice(index, 1);\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHeader = function () {\n var colHeaders = this.matrix.isColumnLayoutHorizontal && this.matrix.showHeader;\n var isShown = colHeaders ||\n (this.matrix.hasRowText && !this.matrix.isColumnLayoutHorizontal);\n this.setPropertyValue(\"showHeader\", isShown);\n if (!isShown)\n return;\n this.headerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.hasRowText && this.matrix.showHeader) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n if (this.matrix.isColumnLayoutHorizontal) {\n for (var i = 0; i < this.matrix.visibleColumns.length; i++) {\n var column = this.matrix.visibleColumns[i];\n if (!column.hasVisibleCell)\n continue;\n if (column.isShowInMultipleColumns) {\n this.createMutlipleColumnsHeader(column);\n }\n else {\n this.headerRow.cells.push(this.createHeaderCell(column));\n }\n }\n }\n else {\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n this.headerRow.cells.push(this.createTextCell(rows[i].locText));\n }\n if (this.matrix.hasFooter) {\n this.headerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n }\n if (this.hasRemoveRows) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildFooter = function () {\n if (!this.showFooter)\n return;\n this.footerRowValue = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.hasRowText) {\n this.footerRow.cells.push(this.createTextCell(this.matrix.getFooterText()));\n }\n var cells = this.matrix.visibleTotalRow.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleColumnsFooter(this.footerRow, cell);\n }\n else {\n this.footerRow.cells.push(this.createEditCell(cell));\n }\n }\n if (this.hasRemoveRows) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildRows = function () {\n var rows = this.matrix.isColumnLayoutHorizontal\n ? this.buildHorizontalRows()\n : this.buildVerticalRows();\n this.setPropertyValue(\"rows\", rows);\n };\n QuestionMatrixDropdownRenderedTable.prototype.canRemoveRow = function (row) {\n return this.matrix.canRemoveRow(row);\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildHorizontalRows = function () {\n var rows = this.matrix.visibleRows;\n var renderedRows = [];\n for (var i = 0; i < rows.length; i++) {\n renderedRows.push(this.createHorizontalRow(rows[i]));\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHorizontalRow = function (row) {\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.hasRowText) {\n res.cells.push(this.createTextCell(row.locText));\n }\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (!cell.column.hasVisibleCell)\n continue;\n if (cell.column.isShowInMultipleColumns) {\n this.createMutlipleEditCells(res, cell);\n }\n else {\n res.cells.push(this.createEditCell(cell));\n }\n }\n if (this.hasRemoveRows) {\n res.cells.push(this.createRemoveRowCell(row));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.buildVerticalRows = function () {\n var columns = this.matrix.columns;\n var renderedRows = [];\n for (var i = 0; i < columns.length; i++) {\n var col = columns[i];\n if (col.isVisible && col.hasVisibleCell) {\n if (col.isShowInMultipleColumns) {\n this.createMutlipleVerticalRows(renderedRows, col, i);\n }\n else {\n renderedRows.push(this.createVerticalRow(col, i));\n }\n }\n }\n if (this.hasRemoveRows) {\n renderedRows.push(this.createVerticalRemoveRow());\n }\n return renderedRows;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleVerticalRows = function (renderedRows, column, index) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n renderedRows.push(this.createVerticalRow(column, index, choices[i], i));\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createVerticalRow = function (column, index, choice, choiceIndex) {\n if (choice === void 0) { choice = null; }\n if (choiceIndex === void 0) { choiceIndex = -1; }\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n var lTitle = !!choice ? choice.locText : column.locTitle;\n res.cells.push(this.createTextCell(lTitle));\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n var rCell = this.createEditCell(rows[i].cells[index]);\n rCell.item = choice;\n rCell.choiceIndex = choiceIndex >= 0 ? choiceIndex : i;\n res.cells.push(rCell);\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createEditCell(this.matrix.visibleTotalRow.cells[index]));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createVerticalRemoveRow = function () {\n var res = new QuestionMatrixDropdownRenderedRow();\n if (this.matrix.showHeader) {\n res.cells.push(this.createTextCell(null));\n }\n var rows = this.matrix.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n res.cells.push(this.createRemoveRowCell(rows[i]));\n }\n if (this.matrix.hasTotal) {\n res.cells.push(this.createTextCell(null));\n }\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleEditCells = function (rRow, cell, isFooter) {\n if (isFooter === void 0) { isFooter = false; }\n var choices = this.getMultipleColumnChoices(cell.column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var rCell = this.createEditCell(cell);\n if (!isFooter) {\n rCell.item = choices[i];\n rCell.choiceIndex = i;\n }\n rRow.cells.push(rCell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEditCell = function (cell) {\n var res = new QuestionMatrixDropdownRenderedCell();\n res.cell = cell;\n res.row = cell.row;\n res.question = cell.question;\n res.matrix = this.matrix;\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsFooter = function (rRow, cell) {\n this.createMutlipleEditCells(rRow, cell, true);\n };\n QuestionMatrixDropdownRenderedTable.prototype.createMutlipleColumnsHeader = function (column) {\n var choices = this.getMultipleColumnChoices(column);\n if (!choices)\n return;\n for (var i = 0; i < choices.length; i++) {\n var cell = this.createTextCell(choices[i].locText);\n this.setHeaderCell(column, cell);\n this.headerRow.cells.push(cell);\n }\n };\n QuestionMatrixDropdownRenderedTable.prototype.getMultipleColumnChoices = function (column) {\n var choices = column.templateQuestion.choices;\n if (!!choices && Array.isArray(choices) && choices.length == 0)\n return this.matrix.choices;\n var choices = column.templateQuestion.visibleChoices;\n if (!choices || !Array.isArray(choices))\n return null;\n return choices;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createHeaderCell = function (column) {\n var cell = this.createTextCell(!!column ? column.locTitle : null);\n this.setHeaderCell(column, cell);\n return cell;\n };\n QuestionMatrixDropdownRenderedTable.prototype.setHeaderCell = function (column, cell) {\n cell.minWidth = column != null ? this.matrix.getColumnWidth(column) : \"\";\n cell.width = column != null ? column.width : this.matrix.getRowTitleWidth();\n };\n QuestionMatrixDropdownRenderedTable.prototype.createRemoveRowCell = function (row) {\n var res = new QuestionMatrixDropdownRenderedCell();\n res.row = row;\n res.isRemoveRow = this.canRemoveRow(row);\n return res;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createTextCell = function (locTitle) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.locTitle = !!locTitle\n ? locTitle\n : new __WEBPACK_IMPORTED_MODULE_9__localizablestring__[\"a\" /* LocalizableString */](this.matrix, false);\n return cell;\n };\n return QuestionMatrixDropdownRenderedTable;\n}(__WEBPACK_IMPORTED_MODULE_4__base__[\"a\" /* Base */]));\n\n/**\n * A base class for matrix dropdown and matrix dynamic questions.\n */\nvar QuestionMatrixDropdownModelBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixDropdownModelBase, _super);\n function QuestionMatrixDropdownModelBase(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.isRowChanging = false;\n _this.lockResetRenderedTable = false;\n _this.isDoingonAnyValueChanged = false;\n var self = _this;\n _this.createItemValues(\"choices\");\n _this.createLocalizableString(\"optionsCaption\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function (newColumns) {\n self.updateColumnsIndexes(newColumns);\n self.generatedVisibleRows = null;\n self.generatedTotalRow = null;\n self.resetRenderedTable();\n self.fireCallback(self.columnsChangedCallback);\n });\n _this.registerFunctionOnPropertiesValueChanged([\"columnLayout\", \"addRowLocation\"], function () {\n self.fireCallback(self.columnLayoutChangedCallback);\n });\n _this.registerFunctionOnPropertiesValueChanged([\"cellType\", \"optionsCaption\", \"columnColCount\", \"rowTitleWidth\"], function () {\n self.generatedVisibleRows = null;\n self.resetRenderedTable();\n self.fireCallback(self.columnsChangedCallback);\n });\n _this.registerFunctionOnPropertiesValueChanged([\n \"columnLayout\",\n \"showHeader\",\n \"minRowCount\",\n \"isReadOnly\",\n \"rowCount\",\n \"hasFooter\",\n ], function () {\n self.resetRenderedTable();\n });\n return _this;\n }\n Object.defineProperty(QuestionMatrixDropdownModelBase, \"defaultCellType\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].matrixDefaultCellType;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].matrixDefaultCellType = val;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.addDefaultColumns = function (matrix) {\n var colNames = __WEBPACK_IMPORTED_MODULE_8__questionfactory__[\"a\" /* QuestionFactory */].DefaultColums;\n for (var i = 0; i < colNames.length; i++)\n matrix.addColumn(colNames[i]);\n };\n QuestionMatrixDropdownModelBase.prototype.createColumnValues = function () {\n var _this = this;\n return this.createNewArray(\"columns\", function (item) {\n item.colOwner = _this;\n });\n };\n QuestionMatrixDropdownModelBase.prototype.getType = function () {\n return \"matrixdropdownbase\";\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isRowsDynamic\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnLayout\", {\n /**\n * Set columnLayout to 'vertical' to place columns vertically and rows horizontally. It makes sense when we have many columns and few rows.\n * @see columns\n * @see rowCount\n */\n get: function () {\n return this.getPropertyValue(\"columnLayout\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnLayout\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnsLocation\", {\n get: function () {\n return this.columnLayout;\n },\n set: function (val) {\n this.columnLayout = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isColumnLayoutHorizontal\", {\n /**\n * Returns true if columns are located horizontally\n * @see columnLayout\n */\n get: function () {\n return this.columnLayout != \"vertical\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasRowText\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getFooterText = function () {\n return null;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"canRemoveRows\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.canRemoveRow = function (row) {\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowsChanged = function () {\n this.resetRenderedTable();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onStartRowAddingRemoving = function () {\n this.lockResetRenderedTable = true;\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowAdding = function () {\n this.lockResetRenderedTable = false;\n if (!this.renderedTable)\n return;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n this.renderedTable.onAddedRow();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onEndRowRemoving = function (index) {\n this.lockResetRenderedTable = false;\n if (this.renderedTable.isRequireReset()) {\n this.resetRenderedTable();\n }\n else {\n this.renderedTable.onRemovedRow(index);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.resetRenderedTable = function () {\n if (this.lockResetRenderedTable || this.isLoadingFromJson)\n return;\n this.renderedTableValue = null;\n this.fireCallback(this.onRenderedTableResetCallback);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"renderedTable\", {\n get: function () {\n if (!this.renderedTableValue) {\n this.renderedTableValue = this.createRenderedTable();\n if (!!this.onRenderedTableCreatedCallback) {\n this.onRenderedTableCreatedCallback(this.renderedTableValue);\n }\n }\n return this.renderedTableValue;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.createRenderedTable = function () {\n return new QuestionMatrixDropdownRenderedTable(this);\n };\n QuestionMatrixDropdownModelBase.prototype.onMatrixRowCreated = function (row) {\n if (!this.survey)\n return;\n var options = {\n rowValue: row.value,\n row: row,\n column: null,\n columnName: null,\n cell: null,\n cellQuestion: null,\n value: null,\n };\n for (var i = 0; i < this.visibleColumns.length; i++) {\n options.column = this.visibleColumns[i];\n options.columnName = options.column.name;\n var cell = row.cells[i];\n options.cell = cell;\n options.cellQuestion = cell.question;\n options.value = cell.value;\n if (!!this.onCellCreatedCallback) {\n this.onCellCreatedCallback(options);\n }\n this.survey.matrixCellCreated(this, options);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"cellType\", {\n /**\n * Use this property to change the default cell type.\n */\n get: function () {\n return this.getPropertyValue(\"cellType\", __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].matrixDefaultCellType);\n },\n set: function (val) {\n val = val.toLowerCase();\n if (this.cellType == val)\n return;\n this.setPropertyValue(\"cellType\", val);\n this.updateColumnsCellType();\n this.fireCallback(this.updateCellsCallback);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.updateColumnsCellType = function () {\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].defaultCellTypeChanged();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.updateColumnsIndexes = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n cols[i].setIndex(i);\n }\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnColCount\", {\n /**\n * The default column count for radiogroup and checkbox cell types.\n */\n get: function () {\n return this.getPropertyValue(\"columnColCount\", 0);\n },\n set: function (value) {\n if (value < 0 || value > 4)\n return;\n this.setPropertyValue(\"columnColCount\", value);\n this.fireCallback(this.updateCellsCallback);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"columnMinWidth\", {\n /**\n * Use this property to set the minimum column width.\n */\n get: function () {\n return this.getPropertyValue(\"columnMinWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnMinWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"horizontalScroll\", {\n /**\n * Set this property to true to show the horizontal scroll.\n */\n get: function () {\n return this.getPropertyValue(\"horizontalScroll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"horizontalScroll\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnPropertyChanged = function (column, name, newValue) {\n this.updateHasFooter();\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.updateCellQuestionOnColumnChanged(column, name, newValue);\n }\n this.onColumnsChanged();\n if (column.isShowInMultipleColumns) {\n this.onShowInMultipleColumnsChanged(column);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.onShowInMultipleColumnsChanged = function (column) {\n this.generatedVisibleRows = null;\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.onColumnCellTypeChanged = function (column) {\n this.generatedVisibleRows = null;\n this.resetRenderedTable();\n };\n QuestionMatrixDropdownModelBase.prototype.getRowTitleWidth = function () {\n return \"\";\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasFooter\", {\n get: function () {\n return this.getPropertyValue(\"hasFooter\", false);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.updateHasFooter = function () {\n this.setPropertyValue(\"hasFooter\", this.hasTotal);\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"hasTotal\", {\n get: function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].hasTotal)\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getCellType = function () {\n return this.cellType;\n };\n QuestionMatrixDropdownModelBase.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var columnName = \"\";\n for (var i = path.length - 1; i >= 0; i--) {\n if (path[i] == \".\")\n break;\n columnName = path[i] + columnName;\n }\n var column = this.getColumnByName(columnName);\n if (!column)\n return null;\n var question = column.createCellQuestion(null);\n if (!question)\n return null;\n return question.getConditionJson(operator);\n };\n QuestionMatrixDropdownModelBase.prototype.clearIncorrectValues = function () {\n var rows = this.visibleRows;\n if (!rows)\n return;\n for (var i = 0; i < rows.length; i++) {\n rows[i].clearIncorrectValues(this.getRowValue(i));\n }\n };\n QuestionMatrixDropdownModelBase.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n if (!!this.generatedVisibleRows) {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n for (var j = 0; j < row.cells.length; j++) {\n row.cells[j].question.clearErrors();\n }\n }\n }\n };\n QuestionMatrixDropdownModelBase.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n var counter = 0;\n var prevTotalValue;\n do {\n prevTotalValue = __WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].getUnbindValue(this.totalValue);\n this.runCellsCondition(values, properties);\n this.runTotalsCondition(values, properties);\n counter++;\n } while (!__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isTwoValueEquals(prevTotalValue, this.totalValue) &&\n counter < 3);\n };\n QuestionMatrixDropdownModelBase.prototype.shouldRunColumnExpression = function () {\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.runCellsCondition = function (values, properties) {\n if (!this.generatedVisibleRows)\n return;\n var newValues = this.getRowConditionValues(values);\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].runCondition(newValues, properties);\n }\n this.checkColumnsVisibility();\n };\n QuestionMatrixDropdownModelBase.prototype.checkColumnsVisibility = function () {\n var hasChanged = false;\n for (var i = 0; i < this.visibleColumns.length; i++) {\n if (!this.visibleColumns[i].visibleIf)\n continue;\n hasChanged =\n this.isColumnVisibilityChanged(this.visibleColumns[i]) || hasChanged;\n }\n if (hasChanged) {\n this.resetRenderedTable();\n }\n };\n QuestionMatrixDropdownModelBase.prototype.isColumnVisibilityChanged = function (column) {\n var curVis = column.hasVisibleCell;\n var hasVisCell = false;\n var rows = this.generatedVisibleRows;\n for (var i = 0; i < rows.length; i++) {\n var cell = rows[i].cells[column.index];\n if (!!cell && !!cell.question && cell.question.isVisible) {\n hasVisCell = true;\n break;\n }\n }\n if (curVis != hasVisCell) {\n column.hasVisibleCell = hasVisCell;\n }\n return curVis != hasVisCell;\n };\n QuestionMatrixDropdownModelBase.prototype.runTotalsCondition = function (values, properties) {\n if (!this.generatedTotalRow)\n return;\n this.generatedTotalRow.runCondition(this.getRowConditionValues(values), properties);\n };\n QuestionMatrixDropdownModelBase.prototype.getRowConditionValues = function (values) {\n var newValues = {};\n if (values && values instanceof Object) {\n newValues = JSON.parse(JSON.stringify(values));\n }\n var totalRow = {};\n if (!__WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\" /* Helpers */].isValueEmpty(this.totalValue)) {\n totalRow = JSON.parse(JSON.stringify(this.totalValue));\n }\n newValues[\"row\"] = {};\n newValues[\"totalRow\"] = totalRow;\n return newValues;\n };\n QuestionMatrixDropdownModelBase.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var rows = this.generatedVisibleRows;\n if (!rows)\n return;\n var columns = this.columns;\n for (var i = 0; i < columns.length; i++) {\n columns[i].locStrsChanged();\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].locStrsChanged();\n }\n if (!!this.generatedTotalRow) {\n this.generatedTotalRow.locStrsChanged();\n }\n };\n /**\n * Returns the column by it's name. Returns null if a column with this name doesn't exist.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnByName = function (columnName) {\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].name == columnName)\n return this.columns[i];\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.getColumnName = function (columnName) {\n return this.getColumnByName(columnName);\n };\n /**\n * Returns the column width.\n * @param column\n */\n QuestionMatrixDropdownModelBase.prototype.getColumnWidth = function (column) {\n return column.minWidth ? column.minWidth : this.columnMinWidth;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"choices\", {\n /**\n * The default choices for dropdown, checkbox and radiogroup cell types.\n */\n get: function () {\n return this.getPropertyValue(\"choices\");\n },\n set: function (val) {\n this.setPropertyValue(\"choices\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"optionsCaption\", {\n /**\n * The default options caption for dropdown cell type.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", __WEBPACK_IMPORTED_MODULE_7__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.addColumn = function (name, title) {\n if (title === void 0) { title = null; }\n var column = new MatrixDropdownColumn(name, title);\n this.columns.push(column);\n return column;\n };\n QuestionMatrixDropdownModelBase.prototype.getVisibleRows = function () {\n var _this = this;\n if (this.isLoadingFromJson)\n return null;\n if (!this.generatedVisibleRows) {\n this.generatedVisibleRows = this.generateRows();\n this.generatedVisibleRows.forEach(function (row) { return _this.onMatrixRowCreated(row); });\n if (this.data) {\n this.runCellsCondition(this.data.getFilteredValues(), this.data.getFilteredProperties());\n }\n this.updateValueOnRowsGeneration(this.generatedVisibleRows);\n }\n return this.generatedVisibleRows;\n };\n QuestionMatrixDropdownModelBase.prototype.updateValueOnRowsGeneration = function (rows) {\n var oldValue = this.createNewValue(true);\n var newValue = this.createNewValue();\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n var rowValue = this.getRowValue(i);\n var rValue = row.value;\n if (this.isTwoValueEquals(rowValue, rValue))\n continue;\n newValue = this.getNewValueOnRowChanged(row, \"\", rValue, false, newValue)\n .value;\n }\n if (this.isTwoValueEquals(oldValue, newValue))\n return;\n this.isRowChanging = true;\n this.setNewValue(newValue);\n this.isRowChanging = false;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"totalValue\", {\n get: function () {\n if (!this.hasTotal || !this.visibleTotalRow)\n return {};\n return this.visibleTotalRow.value;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.getVisibleTotalRow = function () {\n if (this.isLoadingFromJson)\n return null;\n if (this.hasTotal) {\n if (!this.generatedTotalRow) {\n this.generatedTotalRow = this.generateTotalRow();\n if (this.data) {\n var properties = { survey: this.survey };\n this.runTotalsCondition(this.data.getAllValues(), properties);\n }\n }\n }\n else {\n this.generatedTotalRow = null;\n }\n return this.generatedTotalRow;\n };\n Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"visibleTotalRow\", {\n get: function () {\n return this.getVisibleTotalRow();\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.updateColumnsIndexes(this.columns);\n this.generatedVisibleRows = null;\n this.generatedTotalRow = null;\n this.updateHasFooter();\n };\n /**\n * Returns the row value. If the row value is empty, the object is empty: {}.\n * @param rowIndex row index from 0 to visible row count - 1.\n */\n QuestionMatrixDropdownModelBase.prototype.getRowValue = function (rowIndex) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n var newValue = this.createNewValue();\n return this.getRowValueCore(visRows[rowIndex], newValue);\n };\n /**\n * Set the row value.\n * @param rowIndex row index from 0 to visible row count - 1.\n * @param rowValue an object {\"column name\": columnValue,... }\n */\n QuestionMatrixDropdownModelBase.prototype.setRowValue = function (rowIndex, rowValue) {\n if (rowIndex < 0)\n return null;\n var visRows = this.visibleRows;\n if (rowIndex >= visRows.length)\n return null;\n visRows[rowIndex].value = rowValue;\n this.onRowChanged(visRows[rowIndex], \"\", rowValue, false);\n };\n QuestionMatrixDropdownModelBase.prototype.generateRows = function () {\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.generateTotalRow = function () {\n return new MatrixDropdownTotalRowModel(this);\n };\n QuestionMatrixDropdownModelBase.prototype.createNewValue = function (nullOnEmpty) {\n if (nullOnEmpty === void 0) { nullOnEmpty = false; }\n var res = !this.value ? {} : this.createValueCopy();\n if (nullOnEmpty && this.isMatrixValueEmpty(res))\n return null;\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n var result = !!questionValue && !!questionValue[row.rowName]\n ? questionValue[row.rowName]\n : null;\n if (!result && create) {\n result = {};\n if (!!questionValue) {\n questionValue[row.rowName] = result;\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.getRowDisplayValue = function (row, rowValue) {\n if (!rowValue)\n return rowValue;\n for (var key in rowValue) {\n var question = row.getQuestionByColumnName(key);\n if (!question) {\n question = this.getSharedQuestionByName(key, row);\n }\n if (!!question) {\n rowValue[key] = question.displayValue;\n }\n }\n return rowValue;\n };\n QuestionMatrixDropdownModelBase.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.visibleRows.map(function (row) {\n var rowDataItem = {\n name: row.rowName,\n title: row.rowName,\n value: row.value,\n displayValue: _this.getRowDisplayValue(row, row.value),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: row.cells\n .map(function (cell) {\n return cell.question.getPlainData(options);\n })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] = row[calculation.propertyName];\n });\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixDropdownModelBase.prototype.onBeforeValueChanged = function (val) { };\n QuestionMatrixDropdownModelBase.prototype.onSetQuestionValue = function () {\n if (this.isRowChanging)\n return;\n this.onBeforeValueChanged(this.value);\n if (!this.generatedVisibleRows || this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.createNewValue();\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n this.generatedVisibleRows[i].value = this.getRowValueCore(row, val);\n }\n this.isRowChanging = false;\n };\n QuestionMatrixDropdownModelBase.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.onSetQuestionValue();\n this.updateIsAnswered();\n };\n QuestionMatrixDropdownModelBase.prototype.supportGoNextPageAutomatic = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var question = cells[colIndex].question;\n if (question &&\n (!question.supportGoNextPageAutomatic() || !question.value))\n return false;\n }\n }\n return true;\n };\n QuestionMatrixDropdownModelBase.prototype.getContainsErrors = function () {\n return (_super.prototype.getContainsErrors.call(this) ||\n this.checkForAnswersOrErrors(function (question) { return question.containsErrors; }, false));\n };\n QuestionMatrixDropdownModelBase.prototype.getIsAnswered = function () {\n return (_super.prototype.getIsAnswered.call(this) &&\n this.checkForAnswersOrErrors(function (question) { return question.isAnswered; }, true));\n };\n QuestionMatrixDropdownModelBase.prototype.checkForAnswersOrErrors = function (predicate, every) {\n if (every === void 0) { every = false; }\n var rows = this.generatedVisibleRows;\n if (!rows)\n return false;\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (question && question.isVisible)\n if (predicate(question)) {\n if (!every)\n return true;\n }\n else {\n if (every)\n return false;\n }\n }\n }\n return every ? true : false;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var errosInColumns = this.hasErrorInColumns(fireCallback, rec);\n return _super.prototype.hasErrors.call(this, fireCallback) || errosInColumns;\n };\n QuestionMatrixDropdownModelBase.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n if (!this.generatedVisibleRows)\n return false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!!question && question.isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionMatrixDropdownModelBase.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n var rows = this.generatedVisibleRows;\n if (rows === null)\n return result;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var errors = row.cells[j].question.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionMatrixDropdownModelBase.prototype.hasErrorInColumns = function (fireCallback, rec) {\n var _this = this;\n if (!this.generatedVisibleRows)\n return false;\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n if (!cells)\n continue;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!cells[colIndex])\n continue;\n var question = cells[colIndex].question;\n if (!question || !question.visible)\n continue;\n question.onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n if (!!rec && rec.isOnValueChanged === true && question.isEmpty())\n continue;\n res = question.hasErrors(fireCallback, rec) || res;\n }\n }\n return res;\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstInputElementId = function () {\n var question = this.getFirstCellQuestion(false);\n return question ? question.inputId : _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstErrorInputElementId = function () {\n var question = this.getFirstCellQuestion(true);\n return question ? question.inputId : _super.prototype.getFirstErrorInputElementId.call(this);\n };\n QuestionMatrixDropdownModelBase.prototype.getFirstCellQuestion = function (onError) {\n if (!this.generatedVisibleRows)\n return null;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var cells = this.generatedVisibleRows[i].cells;\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n if (!onError)\n return cells[colIndex].question;\n if (cells[colIndex].question.currentErrorCount > 0)\n return cells[colIndex].question;\n }\n }\n return null;\n };\n QuestionMatrixDropdownModelBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n if (!this.generateRows)\n return;\n for (var i = 0; i < this.visibleRows.length; i++) {\n this.visibleRows[i].onQuestionReadOnlyChanged(this.isReadOnly);\n }\n };\n //IMatrixDropdownData\n QuestionMatrixDropdownModelBase.prototype.createQuestion = function (row, column) {\n return this.createQuestionCore(row, column);\n };\n QuestionMatrixDropdownModelBase.prototype.createQuestionCore = function (row, column) {\n var question = column.createCellQuestion(row);\n if (this.isReadOnly) {\n question.readOnly = true;\n }\n question.setSurveyImpl(row);\n return question;\n };\n QuestionMatrixDropdownModelBase.prototype.deleteRowValue = function (newValue, row) {\n if (!newValue)\n return newValue;\n delete newValue[row.rowName];\n return this.isObject(newValue) && Object.keys(newValue).length == 0\n ? null\n : newValue;\n };\n QuestionMatrixDropdownModelBase.prototype.onAnyValueChanged = function (name) {\n if (this.isLoadingFromJson ||\n this.isDoingonAnyValueChanged ||\n !this.generatedVisibleRows)\n return;\n this.isDoingonAnyValueChanged = true;\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length; i++) {\n rows[i].onAnyValueChanged(name);\n }\n var totalRow = this.visibleTotalRow;\n if (!!totalRow) {\n totalRow.onAnyValueChanged(name);\n }\n this.isDoingonAnyValueChanged = false;\n };\n QuestionMatrixDropdownModelBase.prototype.isObject = function (value) {\n return value !== null && typeof value === \"object\";\n };\n QuestionMatrixDropdownModelBase.prototype.getOnCellValueChangedOptions = function (row, columnName, rowValue) {\n var self = this;\n var getQuestion = function (colName) {\n for (var i = 0; self.columns.length; i++) {\n if (self.columns[i].name === colName) {\n return row.cells[i].question;\n }\n }\n return null;\n };\n return {\n row: row,\n columnName: columnName,\n rowValue: rowValue,\n value: !!rowValue ? rowValue[columnName] : null,\n getCellQuestion: getQuestion,\n };\n };\n QuestionMatrixDropdownModelBase.prototype.onCellValueChanged = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n if (!!this.onCellValueChangedCallback) {\n this.onCellValueChangedCallback(options);\n }\n this.survey.matrixCellValueChanged(this, options);\n };\n QuestionMatrixDropdownModelBase.prototype.validateCell = function (row, columnName, rowValue) {\n if (!this.survey)\n return;\n var self = this;\n var getQuestion = function (colName) {\n for (var i = 0; self.columns.length; i++) {\n if (self.columns[i].name === colName) {\n return row.cells[i].question;\n }\n }\n return null;\n };\n var options = {\n row: row,\n columnName: columnName,\n rowValue: rowValue,\n value: rowValue[columnName],\n getCellQuestion: getQuestion,\n };\n return this.survey.matrixCellValidate(this, options);\n };\n QuestionMatrixDropdownModelBase.prototype.onRowChanging = function (row, columnName, rowValue) {\n if (!this.survey)\n return !!rowValue ? rowValue[columnName] : null;\n var options = this.getOnCellValueChangedOptions(row, columnName, rowValue);\n var oldRowValue = this.getRowValueCore(row, this.createNewValue(), true);\n options.oldValue = !!oldRowValue ? oldRowValue[columnName] : null;\n this.survey.matrixCellValueChanging(this, options);\n return options.value;\n };\n QuestionMatrixDropdownModelBase.prototype.onRowChanged = function (row, columnName, newRowValue, isDeletingValue) {\n var oldValue = this.createNewValue(true);\n var combine = this.getNewValueOnRowChanged(row, columnName, newRowValue, isDeletingValue, this.createNewValue());\n if (this.isTwoValueEquals(oldValue, combine.value))\n return;\n this.isRowChanging = true;\n this.setNewValue(combine.value);\n this.isRowChanging = false;\n if (columnName) {\n this.onCellValueChanged(row, columnName, combine.rowValue);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getNewValueOnRowChanged = function (row, columnName, newRowValue, isDeletingValue, newValue) {\n var rowValue = this.getRowValueCore(row, newValue, true);\n if (isDeletingValue) {\n delete rowValue[columnName];\n }\n for (var i = 0; i < row.cells.length; i++) {\n var key = row.cells[i].question.getValueName();\n delete rowValue[key];\n }\n if (newRowValue) {\n newRowValue = JSON.parse(JSON.stringify(newRowValue));\n for (var key in newRowValue) {\n if (!this.isValueEmpty(newRowValue[key])) {\n rowValue[key] = newRowValue[key];\n }\n }\n }\n if (this.isObject(rowValue) && Object.keys(rowValue).length === 0) {\n newValue = this.deleteRowValue(newValue, row);\n }\n return { value: newValue, rowValue: rowValue };\n };\n QuestionMatrixDropdownModelBase.prototype.getRowIndex = function (row) {\n if (!this.generatedVisibleRows)\n return -1;\n return this.visibleRows.indexOf(row);\n };\n QuestionMatrixDropdownModelBase.prototype.getSharedQuestionByName = function (columnName, row) {\n if (!this.survey || !this.valueName)\n return null;\n var index = this.getRowIndex(row);\n if (index < 0)\n return null;\n return (this.survey.getQuestionByValueNameFromArray(this.valueName, columnName, index));\n };\n QuestionMatrixDropdownModelBase.prototype.onTotalValueChanged = function () {\n if (!!this.data &&\n !!this.visibleTotalRow &&\n !this.isLoadingFromJson &&\n !this.isSett) {\n this.data.setValue(this.getValueName() + __WEBPACK_IMPORTED_MODULE_12__settings__[\"a\" /* settings */].matrixTotalValuePostFix, this.totalValue, false);\n }\n };\n QuestionMatrixDropdownModelBase.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.visibleRows.length)\n return null;\n return this.visibleRows[index].getQuestionByColumnName(name);\n };\n QuestionMatrixDropdownModelBase.prototype.isMatrixValueEmpty = function (val) {\n if (!val)\n return;\n if (Array.isArray(val)) {\n for (var i = 0; i < val.length; i++) {\n if (this.isObject(val[i]) && Object.keys(val[i]).length > 0)\n return false;\n }\n return true;\n }\n return Object.keys(val).length == 0;\n };\n QuestionMatrixDropdownModelBase.prototype.getSurvey = function () {\n return this.survey;\n };\n return QuestionMatrixDropdownModelBase;\n}(__WEBPACK_IMPORTED_MODULE_2__martixBase__[\"a\" /* QuestionMatrixBaseModel */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"matrixdropdowncolumn\", [\n \"!name\",\n { name: \"title\", serializationProperty: \"locTitle\" },\n {\n name: \"cellType\",\n default: \"default\",\n choices: function () {\n var res = MatrixDropdownColumn.getColumnTypes();\n res.splice(0, 0, \"default\");\n return res;\n },\n },\n { name: \"colCount\", default: -1, choices: [-1, 0, 1, 2, 3, 4] },\n \"isRequired:boolean\",\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n \"readOnly:boolean\",\n \"minWidth\",\n \"width\",\n \"visibleIf:condition\",\n \"enableIf:condition\",\n \"requiredIf:condition\",\n {\n name: \"showInMultipleColumns:boolean\",\n dependsOn: \"cellType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.isSupportMultipleColumns;\n },\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n {\n name: \"totalType\",\n default: \"none\",\n choices: [\"none\", \"sum\", \"count\", \"min\", \"max\", \"avg\"],\n },\n \"totalExpression:expression\",\n { name: \"totalFormat\", serializationProperty: \"locTotalFormat\" },\n {\n name: \"totalDisplayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\"],\n },\n {\n name: \"totalCurrency\",\n choices: function () {\n return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_10__question_expression__[\"b\" /* getCurrecyCodes */])();\n },\n default: \"USD\",\n },\n { name: \"totalMaximumFractionDigits:number\", default: -1 },\n { name: \"totalMinimumFractionDigits:number\", default: -1 },\n], function () {\n return new MatrixDropdownColumn(\"\");\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"matrixdropdownbase\", [\n {\n name: \"columns:matrixdropdowncolumns\",\n className: \"matrixdropdowncolumn\",\n },\n {\n name: \"columnLayout\",\n alternativeName: \"columnsLocation\",\n default: \"horizontal\",\n choices: [\"horizontal\", \"vertical\"],\n },\n \"horizontalScroll:boolean\",\n {\n name: \"choices:itemvalue[]\",\n },\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n {\n name: \"cellType\",\n default: \"dropdown\",\n choices: function () {\n return MatrixDropdownColumn.getColumnTypes();\n },\n },\n { name: \"columnColCount\", default: 0, choices: [0, 1, 2, 3, 4] },\n \"columnMinWidth\",\n], function () {\n return new QuestionMatrixDropdownModelBase(\"\");\n}, \"matrixbase\");\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionNonValue; });\n\n\n\n/**\n * A Model for non value question. This question doesn't add any new functionality. It hides some properties, including the value.\n */\nvar QuestionNonValue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionNonValue, _super);\n function QuestionNonValue(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n QuestionNonValue.prototype.getType = function () {\n return \"nonvalue\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionNonValue.prototype, \"hasTitle\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionNonValue.prototype.getTitleLocation = function () {\n return \"\";\n };\n Object.defineProperty(QuestionNonValue.prototype, \"hasComment\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionNonValue.prototype.getAllErrors = function () {\n return [];\n };\n QuestionNonValue.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n QuestionNonValue.prototype.addConditionObjectsByContext = function (objects, context) { };\n QuestionNonValue.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n return null;\n };\n return QuestionNonValue;\n}(__WEBPACK_IMPORTED_MODULE_1__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"nonvalue\", [\n { name: \"title\", visible: false },\n { name: \"description\", visible: false },\n { name: \"valueName\", visible: false },\n { name: \"enableIf\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"isRequired\", visible: false, isSerializable: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredIf\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"titleLocation\", visible: false },\n { name: \"useDisplayValuesInTitle\", visible: false },\n], function () {\n return new QuestionNonValue(\"\");\n}, \"question\");\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultCss_cssstandard__ = __webpack_require__(14);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return StylesManager; });\n\nvar StylesManager = /** @class */ (function () {\n function StylesManager() {\n this.sheet = null;\n if (StylesManager.Enabled) {\n this.sheet = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId);\n if (!this.sheet) {\n this.sheet = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId);\n this.initializeStyles(this.sheet);\n }\n }\n }\n StylesManager.findSheet = function (styleSheetId) {\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (!!document.styleSheets[i].ownerNode &&\n document.styleSheets[i].ownerNode[\"id\"] === styleSheetId) {\n return document.styleSheets[i];\n }\n }\n return null;\n };\n StylesManager.createSheet = function (styleSheetId) {\n var style = document.createElement(\"style\");\n style.id = styleSheetId;\n // Add a media (and/or media query) here if you'd like!\n // style.setAttribute(\"media\", \"screen\")\n // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n style.appendChild(document.createTextNode(\"\"));\n document.head.appendChild(style);\n return style.sheet;\n };\n StylesManager.applyTheme = function (themeName, themeSelector) {\n if (themeName === void 0) { themeName = \"default\"; }\n if (themeSelector === void 0) { themeSelector = \".sv_main\"; }\n var ThemeCss;\n if (themeName === \"modern\")\n themeSelector = \".sv-root-modern \";\n if ([\"bootstrap\", \"bootstrapmaterial\", \"modern\"].indexOf(themeName) !== -1) {\n ThemeCss = StylesManager[themeName + \"ThemeCss\"];\n __WEBPACK_IMPORTED_MODULE_0__defaultCss_cssstandard__[\"a\" /* surveyCss */].currentType = themeName;\n }\n else {\n ThemeCss = StylesManager.ThemeCss;\n __WEBPACK_IMPORTED_MODULE_0__defaultCss_cssstandard__[\"a\" /* surveyCss */].currentType = \"standard\";\n }\n if (StylesManager.Enabled) {\n var sheet_1 = StylesManager.findSheet(themeName + themeSelector);\n if (!sheet_1) {\n sheet_1 = StylesManager.createSheet(themeName + themeSelector);\n var theme_1 = StylesManager.ThemeColors[themeName] ||\n StylesManager.ThemeColors[\"default\"];\n Object.keys(ThemeCss).forEach(function (selector) {\n var cssRuleText = ThemeCss[selector];\n Object.keys(theme_1).forEach(function (colorVariableName) {\n return (cssRuleText = cssRuleText.replace(new RegExp(\"\\\\\" + colorVariableName, \"g\"), theme_1[colorVariableName]));\n });\n try {\n sheet_1.insertRule(themeSelector + selector + \" { \" + cssRuleText + \" }\", 0);\n }\n catch (e) { }\n });\n }\n }\n };\n StylesManager.prototype.initializeStyles = function (sheet) {\n if (StylesManager.Enabled) {\n Object.keys(StylesManager.Styles).forEach(function (selector) {\n try {\n sheet.insertRule(selector + \" { \" + StylesManager.Styles[selector] + \" }\", 0);\n }\n catch (e) { }\n });\n Object.keys(StylesManager.Media).forEach(function (selector) {\n try {\n sheet.insertRule(StylesManager.Media[selector].media +\n \" { \" +\n selector +\n \" { \" +\n StylesManager.Media[selector].style +\n \" } }\", 0);\n }\n catch (e) { }\n });\n }\n };\n StylesManager.SurveyJSStylesSheetId = \"surveyjs-styles\";\n StylesManager.Styles = {\n // \".sv_bootstrap_css\":\n // \"position: relative; width: 100%; background-color: #f4f4f4\",\n // \".sv_bootstrap_css .sv_custom_header\":\n // \"position: absolute; width: 100%; height: 275px; background-color: #e7e7e7;\",\n // \".sv_bootstrap_css .sv_container\":\n // \"max-width: 80%; margin: auto; position: relative; color: #6d7072; padding: 0 1em;\",\n // \".sv_bootstrap_css .panel-body\":\n // \"background-color: white; padding: 1em 1em 5em 1em; border-top: 2px solid lightgray;\",\n \".sv_main span\": \"word-break: break-word;\",\n \".sv_main legend\": \"border: none; margin: 0;\",\n \".sv_bootstrap_css .sv_qstn\": \"padding: 0.5em 1em 1.5em 1em;\",\n \".sv_bootstrap_css .sv_qcbc input[type=checkbox], .sv_bootstrap_css .sv_qcbc input[type=radio]\": \"vertical-align: middle; margin-top: -1px\",\n \".sv_bootstrap_css .sv_qstn fieldset\": \"display: block;\",\n \".sv_bootstrap_css .sv_qstn .sv_q_checkbox_inline, .sv_bootstrap_css .sv_qstn .sv_q_radiogroup_inline\": \"display: inline-block;\",\n \".sv_bootstrap_css .sv-paneldynamic__progress-container \": \"position: relative; margin-right: 250px; margin-left: 40px; margin-top: 10px;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_radiogroup_control_label\": \"display: inline; position: static;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox\": \"margin-top:10px;margin-bottom:10px;\",\n \".sv_row\": \"clear: both; min-width:300px;\",\n \".sv_row .sv_qstn\": \"float: left\",\n \".sv_row .sv_qstn:last-child\": \"float: none\",\n \".sv_qstn\": \"display: inline-block; vertical-align: top; overflow: auto; min-width:300px;\",\n \".sv_p_container\": \"display: inline-block; vertical-align: top; min-width:300px;\",\n \".sv_qbln .checkbox-material\": \"margin-right: 3px;\",\n \".sv_qcbx .checkbox-material\": \"margin-right: 5px;\",\n \".sv_qcbx .checkbox label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .radio label\": \"justify-content: left; display: inline-block;\",\n \".sv_qstn .sv_q_imgsel > label img\": \"pointer-events: none;\",\n \".sv_qstn .sv_q_imgsel.sv_q_imagepicker_inline\": \"display: inline-block;\",\n \".sv_qstn label.sv_q_m_label\": \"position: absolute; margin: 0; display: block; width: 100%;\",\n \".sv_qstn td\": \"position: relative;\",\n \".sv_q_mt_item_value\": \"float: left;\",\n '[dir=\"rtl\"] .sv_q_mt_item_value': \"float: right;\",\n \".sv_qstn.sv_qstn_left\": \"margin-top: 0.75em;\",\n \".sv_qstn .title-left\": \"float: left; margin-right: 1em;\",\n '[dir=\"rtl\"] .sv_qstn .title-left': \"float: right; margin-left: 1em;\",\n \".sv_qstn .content-left\": \"overflow: hidden\",\n \".sv_q_radiogroup_inline .sv_q_radiogroup_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline .sv_q_checkbox_other\": \"display: inline-block;\",\n \".sv_q_checkbox_inline, .sv_q_radiogroup_inline, .sv_q_imagepicker_inline\": \"line-height: 2.5em;\",\n \".form-inline .sv_q_checkbox_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".form-inline .sv_q_radiogroup_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_imgsel .sv_q_imagepicker_inline:not(:last-child)\": \"margin-right: 1em;\",\n \".sv_qstn fieldset\": \"border: none; margin: 0; padding: 0;\",\n \".sv_qstn .sv_q_file_placeholder\": \"display:none\",\n \".sv_p_title\": \"padding-left: 1em; padding-bottom: 0.3em;\",\n \".sv_p_title_expandable\": \"cursor: pointer;\",\n \".sv_p_title .sv_panel_icon\": \"float: right; margin-right: 1em;\",\n \".sv_p_title .sv_panel_icon::before\": \"content: ''; background-repeat: no-repeat; background-position: center; padding: 0.5em; display: inline-block; background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAxMCAxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM2RDcwNzI7fQ0KPC9zdHlsZT4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICIvPg0KPC9zdmc+DQo=);\",\n \".sv_p_title .sv_panel_icon.sv_expanded::before\": \"transform: rotate(180deg);\",\n \".sv_p_footer\": \"padding-left: 1em; padding-bottom: 1em;padding-top: 1em;\",\n \".sv_q_file > input[type=file], .sv_q_file > button\": \"display: inline-block;\",\n \".sv_q_file_preview\": \"display: inline-block; vertical-align: top; border: 1px solid lightgray; padding: 5px; margin-top: 10px;\",\n \".sv_q_file_preview > a\": \"display: block; overflow: hidden; vertical-align: top; white-space: nowrap; text-overflow: ellipsis;\",\n \".sv_q_file_remove_button\": \"line-height: normal;\",\n \".sv_q_file_remove\": \"display: block; cursor: pointer;\",\n \".sv_q_m_cell_text\": \"cursor: pointer;\",\n \".sv_q_dd_other\": \"margin-top: 1em;\",\n \".sv_q_dd_other input\": \"width: 100%;\",\n \".sv_qstn .sv-q-col-1, .sv-question .sv-q-col-1\": \"width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-2, .sv-question .sv-q-col-2\": \"width: 50%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-3, .sv-question .sv-q-col-3\": \"width: 33.33333%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-4, .sv-question .sv-q-col-4\": \"width: 25%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-col-5, .sv-question .sv-q-col-5\": \"width: 20%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-1, .sv-question .sv-q-column-1\": \"width: 100%; max-width: 100%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-2, .sv-question .sv-q-column-2\": \"max-width: 50%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-3, .sv-question .sv-q-column-3\": \"max-width: 33.33333%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-4, .sv-question .sv-q-column-4\": \"max-width: 25%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv-q-column-5, .sv-question .sv-q-column-5\": \"max-width: 20%; display: inline-block; padding-right: 1em; box-sizing: border-box; word-break: break-word;\",\n \".sv_qstn .sv_q_file_input\": \"color: transparent;\",\n \".sv_qstn .sv_q_imgsel label > div\": \"overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding: 4px; border: 1px solid lightgray; border-radius: 4px;\",\n \".sv_qstn .sv_q_imgsel label > div > img, .sv_qstn .sv_q_imgsel label > div > embed\": \"display: block;\",\n \".sv_qstn table tr td .sv_q_m_cell_label\": \"position: absolute; left: 0; right: 0; top: 0; bottom: 0;\",\n \"f-panel\": \"padding: 0.5em 1em; display: inline-block; line-height: 2em;\",\n \".sv_progress_bar > span\": \"white-space: nowrap;\",\n \".sv_qstn .sv_q_select_column\": \"display: inline-block; vertical-align: top; min-width: 10%;\",\n \".sv_qstn .sv_q_select_column > *:not(.sv_technical)\": \"display: block;\",\n \".sv_main .sv_container .sv_body .sv_p_root .sv_qstn .sv_q_select_column textarea\": \"margin-left: 0; padding-left: 0; line-height: initial;\",\n \".sv_main .sv-hidden\": \"display: none !important;\",\n \".sv_main .sv-visuallyhidden\": \"position: absolute; height: 1px !important; width: 1px !important; overflow: hidden; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px);\",\n // paneldynamic progress\n \".sv_main .sv-progress\": \"height: 0.19em; background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color; height: 100%; position: relative;\",\n // EO paneldynamic progress\n // paneldynamic\n \".sv_main .sv-paneldynamic__progress-container\": \"position: relative; margin-right: 250px; margin-top: 20px;\",\n \".sv_main .sv-paneldynamic__add-btn\": \"float: right; margin-top: -18px;\",\n \".sv_main .sv-paneldynamic__add-btn--list-mode\": \" float: none; margin-top: 1em;\",\n \".sv_main .sv-paneldynamic__remove-btn \": \"margin-top: 1.25em;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"box-sizing: border-box; display: inline-block; cursor: pointer; width: 0.7em; top: -0.28em; position: absolute;\",\n \".sv_main .sv-paneldynamic__prev-btn\": \"left: -1.3em; transform: rotate(90deg);\",\n \".sv_main .sv-paneldynamic__next-btn \": \"right: -1.3em; transform: rotate(270deg);\",\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"cursor: auto;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"font-weight: bold; font-size: 0.87em; margin-top: 0.69em; margin-left: 4em\",\n // EO paneldynamic\n //boolean\n \".sv_main .sv-boolean__switch\": \"display: inline-block; box-sizing: border-box; width: 63px; height: 24px; margin-right: 17px; margin-left: 21px; padding: 2px 3px; vertical-align: middle; border-radius: 12px; cursor: pointer;\",\n \".sv_main .sv-boolean__slider\": \"display: inline-block; width: 20px; height: 20px; transition-duration: .4s; transition-property: margin-left; border: none; border-radius: 100%;\",\n \".sv_main .sv-boolean__label\": \"vertical-align: middle; cursor: pointer;\",\n \".sv_main .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-left: calc(50% - 10px);\",\n \".sv_main .sv-boolean--checked .sv-boolean__slider\": \"margin-left: calc(100% - 20px);\",\n \"[dir='rtl'] .sv-boolean__label \": \"float: right;\",\n \"[dir='rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[dir='rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[dir='rtl'] .sv-boolean__switch\": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean__label \": \"float: right;\",\n \"[style*='direction:rtl'] .sv-boolean--indeterminate .sv-boolean__slider\": \"margin-right: calc(50% - 0.625em);\",\n \"[style*='direction:rtl'] .sv-boolean--checked .sv-boolean__slider\": \"margin-right: calc(100% - 1.25em);\",\n \"[style*='direction:rtl'] .sv-boolean__switch\": \"float: right;\",\n // EO boolean\n \".sv_main .sv_q_num\": \"\",\n \".sv_main .sv_q_num + span\": \"\",\n // SignaturePad\n \".sv_main .sjs_sp_container\": \"position: relative;\",\n \".sv_main .sjs_sp_controls\": \"position: absolute; left: 0; bottom: 0;\",\n \".sv_main .sjs_sp_controls > button\": \"user-select: none;\",\n \".sv_main .sjs_sp_container>div>canvas:focus\": \"outline: none;\",\n // logo\n // \".sv_main .sv_header\": \"white-space: nowrap;\",\n \".sv_main .sv_logo\": \"\",\n \".sv_main .sv-logo--left\": \"display: inline-block; vertical-align: top; margin-right: 2em;\",\n \".sv_main .sv-logo--right\": \"display: inline-block; vertical-align: top; margin-left: 2em; float: right;\",\n \".sv_main .sv-logo--right+.sv-logo--right-tail\": \"clear: both;\",\n \".sv_main .sv-logo--top\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv-logo--bottom\": \"display: block; width: 100%; text-align: center;\",\n \".sv_main .sv_header__text\": \"display: inline-block; vertical-align: top;\",\n };\n StylesManager.Media = {\n \".sv_qstn fieldset .sv-q-col-1\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-2\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-3\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-4\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_qstn fieldset .sv-q-col-5\": {\n style: \"width: 100%;\",\n media: \"@media only screen and (max-width: 480px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn\": {\n style: \"display: block; width: 100% !important;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .title-left\": {\n style: \"float: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_radiogroup_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_checkbox_inline, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .sv_q_imagepicker_inline\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table thead\": {\n style: \"display: none;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tbody, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table tr, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table td\": {\n style: \"display: block;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.table:not(.sv_q_matrix) td:before\": {\n style: \"content: attr(headers);\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn table.sv_q_matrix td:after\": {\n style: \"content: attr(headers); padding-left: 1em\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .radio label, .sv_main .sv_container .panel-body.card-block .sv_row .sv_qstn .checkbox label\": {\n style: \"line-height: 12px; vertical-align: top;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_qstn label.sv_q_m_label\": {\n style: \"display: inline;\",\n media: \"@media (max-width: 600px)\",\n },\n \".sv_main .sv_custom_header\": {\n style: \"display: none;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3\": {\n style: \"font-size: 1.5em;\",\n media: \"@media (max-width: 1300px)\",\n },\n \".sv_main .sv_container .sv_header h3 span\": {\n style: \"font-size: 0.75em;\",\n media: \"@media (max-width: 700px)\",\n },\n \".sv_main.sv_bootstrap_css .sv-progress__text\": {\n style: \"margin-left: 8em;\",\n media: \"@media (min-width: 768px)\",\n },\n \".sv_row\": {\n style: \" display: flex; flex-wrap: wrap;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-vue-row-additional-div\": {\n style: \" display: flex; flex-wrap: wrap; flex-basis: 100%;\",\n media: \"@supports (display: flex)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question:not(:last-child)\": {\n style: \"float: left;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \"[dir='rtl'],[style*='direction:rtl'] .sv-row__question:not(:last-child)\": {\n style: \"float: right;\",\n media: \"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)\",\n },\n \".sv-row > .sv-row__panel, .sv-row__question\": {\n style: \"width: 100% !important; padding-right: 0 !important;\",\n media: \"@media only screen and (max-width: 600px)\",\n },\n };\n StylesManager.ThemeColors = {\n default: {\n \"$header-background-color\": \"#e7e7e7\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$main-color\": \"#1ab394\",\n \"$main-hover-color\": \"#0aa384\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#6d7072\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n orange: {\n \"$header-background-color\": \"#4a4a4a\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#f78119\",\n \"$main-hover-color\": \"#e77109\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$header-color\": \"#f78119\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n darkblue: {\n \"$header-background-color\": \"#d9d8dd\",\n \"$body-container-background-color\": \"#f6f7f2\",\n \"$main-color\": \"#3c4f6d\",\n \"$main-hover-color\": \"#2c3f5d\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n darkrose: {\n \"$header-background-color\": \"#ddd2ce\",\n \"$body-container-background-color\": \"#f7efed\",\n \"$main-color\": \"#68656e\",\n \"$main-hover-color\": \"#58555e\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#4a4a4a\",\n \"$header-color\": \"#6d7072\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n stone: {\n \"$header-background-color\": \"#cdccd2\",\n \"$body-container-background-color\": \"#efedf4\",\n \"$main-color\": \"#0f0f33\",\n \"$main-hover-color\": \"#191955\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#0f0f33\",\n \"$header-color\": \"#0f0f33\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n winter: {\n \"$header-background-color\": \"#82b8da\",\n \"$body-container-background-color\": \"#dae1e7\",\n \"$main-color\": \"#3c3b40\",\n \"$main-hover-color\": \"#1e1d20\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$header-color\": \"#000\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n winterstone: {\n \"$header-background-color\": \"#323232\",\n \"$body-container-background-color\": \"#f8f8f8\",\n \"$main-color\": \"#5ac8fa\",\n \"$main-hover-color\": \"#06a1e7\",\n \"$body-background-color\": \"white\",\n \"$inputs-background-color\": \"white\",\n \"$text-color\": \"#000\",\n \"$header-color\": \"#fff\",\n \"$border-color\": \"#e7e7e7\",\n \"$error-color\": \"#ed5565\",\n \"$error-background-color\": \"#fd6575\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n modern: {\n \"$main-color\": \"#1ab394\",\n \"$add-button-color\": \"#1948b3\",\n \"$remove-button-color\": \"#ff1800\",\n \"$disable-color\": \"#dbdbdb\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$error-color\": \"#d52901\",\n \"$text-color\": \"#404040\",\n \"$inputs-background-color\": \"#f4f4f4\",\n \"$main-hover-color\": \"#9f9f9f\",\n \"$body-container-background-color\": \"#f4f4f4\",\n \"$text-border-color\": \"#d4d4d4\",\n \"$disabled-text-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$border-color\": \"rgb(64, 64, 64, 0.5)\",\n \"$dropdown-border-color\": \"#d4d4d4\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$answer-background-color\": \"rgba(26, 179, 148, 0.2)\",\n \"$error-background-color\": \"rgba(213, 41, 1, 0.2)\",\n \"$radio-checked-color\": \"#404040\",\n \"$clean-button-color\": \"#1948b3\",\n \"$body-background-color\": \"#ffffff\",\n },\n bootstrap: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n },\n bootstrapmaterial: {\n \"$main-color\": \"#18a689\",\n \"$text-color\": \"#404040;\",\n \"$progress-text-color\": \"#9d9d9d\",\n \"$disable-color\": \"#dbdbdb\",\n \"$header-background-color\": \"#e7e7e7\",\n \"$disabled-label-color\": \"rgba(64, 64, 64, 0.5)\",\n \"$slider-color\": \"white\",\n \"$disabled-switch-color\": \"#9f9f9f\",\n \"$disabled-slider-color\": \"#cfcfcf\",\n \"$body-background-color\": \"#ffffff\",\n },\n };\n StylesManager.ThemeCss = {\n \".sv_default_css\": \"background-color: $body-container-background-color;\",\n \".sv_default_css hr\": \"border-color: $border-color;\",\n \".sv_default_css input[type='button'], .sv_default_css button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_default_css input[type='button']:hover, .sv_default_css button:hover\": \"background-color: $main-hover-color;\",\n \".sv_default_css .sv_header\": \"color: $header-color;\",\n \".sv_default_css .sv_custom_header\": \"background-color: $header-background-color;\",\n \".sv_default_css .sv_container\": \"color: $text-color;\",\n \".sv_default_css .sv_body\": \"background-color: $body-background-color; border-color: $main-color;\",\n \".sv_default_css .sv_progress\": \"background-color: $border-color;\",\n \".sv_default_css .sv_progress_bar\": \"background-color: $main-color;\",\n \".sv_default_css .sv_p_root > .sv_row\": \"border-color: $border-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(odd)\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_p_root > .sv_row:nth-child(even)\": \"background-color: $body-container-background-color;\",\n \".sv_default_css .sv_q_other input\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_text_root\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_dropdown_control\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input[type='text']\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css select\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css textarea\": \"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio'])\": \"border: 1px solid $border-color; background-color: $inputs-background-color;color: $text-color;\",\n \".sv_default_css input:not([type='button']):not([type='reset']):not([type='submit']):not([type='image']):not([type='checkbox']):not([type='radio']):focus\": \"border: 1px solid $main-color;\",\n \".sv_default_css .sv_container .sv_body .sv_p_root .sv_q .sv_select_wrapper .sv_q_dropdown_control \": \"background-color: $inputs-background-color;\",\n \".sv_default_css .sv_q_other input:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_text_root:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_q_dropdown_control:focus\": \"border-color: $main-color;\",\n \".sv_default_css input[type='text']:focus\": \"border-color: $main-color;\",\n '.sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"radio\"]:focus, .sv_default_css .sv_container .sv_body .sv_p_root .sv_q input[type=\"checkbox\"]:focus': \"outline: 1px dotted $main-color;\",\n \".sv_default_css select:focus\": \"border-color: $main-color;\",\n \".sv_default_css textarea:focus\": \"border-color: $main-color;\",\n \".sv_default_css .sv_select_wrapper\": \"background-color: $body-background-color;\",\n \".sv_default_css .sv_select_wrapper::before\": \"background-color: $main-color;\",\n \".sv_default_css .sv_q_rating_item.active .sv_q_rating_item_text\": \"background-color: $main-hover-color; border-color: $main-hover-color; color: $body-background-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_rating_item .sv_q_rating_item_text:hover\": \"border-color: $main-hover-color;\",\n \".sv_default_css table.sv_q_matrix tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dropdown tr\": \"border-color: $border-color;\",\n \".sv_default_css table.sv_q_matrix_dynamic tr\": \"border-color: $border-color;\",\n \".sv_default_css .sv_q_m_cell_selected\": \"color: $body-background-color; background-color: $main-hover-color;\",\n \".sv_main .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main .sv_q_file_choose_button\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main .sv_q_file_choose_button:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_default_css .sv_p_description\": \"padding-left: 1.29em;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n };\n StylesManager.modernThemeCss = {\n // \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n // \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n \".sv-btn\": \"color: $inputs-background-color;\",\n \".sv-checkbox__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-checkbox--allowhover:hover .sv-checkbox__svg\": \"background-color: $main-hover-color; fill: $inputs-background-color;\",\n \".sv-checkbox--checked .sv-checkbox__svg\": \"background-color: $main-color; fill: $inputs-background-color;\",\n \".sv-checkbox--checked.sv-checkbox--disabled .sv-checkbox__svg\": \"background-color: $disable-color; fill: $inputs-background-color;\",\n \".sv-checkbox--disabled .sv-checkbox__svg\": \"border-color: $disable-color;\",\n \".sv-comment\": \"border-color: $text-border-color;\",\n \".sv-comment:focus\": \"border-color: $main-color;\",\n \".sv-completedpage\": \"color: $text-color; background-color: $body-container-background-color;\",\n \".sv-container-modern\": \"color: $text-color;\",\n \".sv-container-modern__title\": \"color: $main-color;\",\n \".sv-description\": \"color: $disabled-text-color;\",\n \".sv-dropdown\": \"border-bottom: 0.06em solid $text-border-color;\",\n \".sv-dropdown:focus\": \"border-color: $dropdown-border-color;\",\n \".sv-dropdown--error\": \"border-color: $error-color; color: $error-color;\",\n \".sv-dropdown--error::placeholder\": \"color: $error-color;\",\n \".sv-dropdown--error::-ms-input-placeholder\": \"color: $error-color;\",\n \".sv-file__decorator\": \"background-color: $body-container-background-color;\",\n \".sv-file__clean-btn\": \"background-color: $remove-button-color;\",\n \".sv-file__choose-btn\": \"background-color: $add-button-color;\",\n \".sv-file__choose-btn--disabled\": \"background-color: $disable-color;\",\n \".sv-file__remove-svg\": \"fill: #ff1800;\",\n \".sv-file__sign a\": \"color: $text-color;\",\n \".sv-footer__complete-btn\": \"background-color: $main-color;\",\n \".sv-footer__next-btn\": \"background-color: $main-color;\",\n \".sv-footer__prev-btn\": \"background-color: $main-color;\",\n \".sv-footer__start-btn\": \"background-color: $main-color;\",\n \".sv-footer__preview-btn\": \"background-color: $main-color;\",\n \".sv-footer__edit-btn\": \"background-color: $main-color;\",\n \".sv-imagepicker__item--allowhover:hover .sv-imagepicker__image\": \"background-color: $main-hover-color; border-color: $main-hover-color;\",\n \".sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $main-color; border-color: $main-color;\",\n \".sv-imagepicker__item--disabled.sv-imagepicker__item--checked .sv-imagepicker__image\": \"background-color: $disable-color; border-color: $disable-color;\",\n \".sv-item__control:focus + .sv-item__decorator\": \"border-color: $main-color;\",\n \".sv-matrix__text--сhecked\": \"color: $inputs-background-color; background-color: $main-color;\",\n \".sv-matrix__text--disabled.sv-matrix__text--сhecked\": \"background-color: $disable-color;\",\n \".sv-matrixdynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-matrixdynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-paneldynamic__add-btn\": \"background-color: $add-button-color;\",\n \".sv-paneldynamic__remove-btn\": \"background-color: $remove-button-color;\",\n \".sv-paneldynamic__prev-btn, .sv-paneldynamic__next-btn\": \"fill: $text-color;\",\n \".sv-paneldynamic__prev-btn--disabled, .sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv-progress\": \"background-color: $header-background-color;\",\n \".sv-progress__bar\": \"background-color: $main-color;\",\n \".sv-progress__text\": \"color: $progress-text-color;\",\n \".sv-question__erbox\": \"color: $error-color;\",\n \".sv-question__title--answer\": \"background-color: $answer-background-color;\",\n \".sv-question__title--error\": \"background-color: $error-background-color;\",\n \".sv-radio__svg\": \"border-color: $border-color; fill: transparent;\",\n \".sv-radio--allowhover:hover .sv-radio__svg\": \"fill: $border-color;\",\n \".sv-radio--checked .sv-radio__svg\": \"border-color: $radio-checked-color; fill: $radio-checked-color;\",\n \".sv-radio--disabled .sv-radio__svg\": \"border-color: $disable-color;\",\n \".sv-radio--disabled.sv-radio--checked .sv-radio__svg\": \"fill: $disable-color;\",\n \".sv-rating\": \"color: $text-color;\",\n \".sv-rating input:focus + .sv-rating__min-text + .sv-rating__item-text, .sv-rating input:focus + .sv-rating__item-text\": \"outline-color: $main-color;\",\n \".sv-rating__item-text\": \"color: $main-hover-color; border: solid 0.1875em $main-hover-color;\",\n \".sv-rating__item-text:hover\": \"background-color: $main-hover-color; color: $body-background-color;\",\n \".sv-rating__item--selected .sv-rating__item-text\": \"background-color: $main-color; color: $body-background-color; border-color: $main-color;\",\n \".sv-rating--disabled .sv-rating__item-text\": \"color: $disable-color; border-color: $disable-color;\",\n \".sv-rating--disabled .sv-rating__item-text:hover\": \"background-color: transparent;\",\n \".sv-rating--disabled .sv-rating__item-text:hover .sv-rating__item--selected .sv-rating__item-text\": \"background-color: $disable-color; color: $body-background-color;\",\n \"::-webkit-scrollbar\": \"background-color: $main-hover-color;\",\n \"::-webkit-scrollbar-thumb\": \"background: $main-color;\",\n \".sv-selectbase__clear-btn\": \"background-color: $clean-button-color;\",\n \".sv-table\": \"background-color: rgba($main-hover-color, 0.1);\",\n \".sv-text:focus\": \"border-color: $main-color;\",\n '.sv-text[type=\"date\"]::-webkit-calendar-picker-indicator': \"color: transparent; background: transparent;\",\n \".sv-text--error\": \"color: $error-color; border-color: $error-color;\",\n \".sv-text--error::placeholder\": \"color: $error-color;\",\n \".sv-text--error::-ms-placeholder\": \"color: $error-color;\",\n \".sv-text--error:-ms-placeholder\": \"color: $error-color;\",\n \".sv-text::placeholder\": \"color: $text-color;\",\n \".sv-text::-ms-placeholder\": \"color: $text-color;\",\n \".sv-text:-ms-placeholder\": \"color: $text-color;\",\n };\n StylesManager.bootstrapThemeCss = {\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color\",\n \".sv_main .sv_p_description\": \"padding-left: 1.66em;\",\n \".sv_main .sv_qstn_error_bottom\": \"margin-top: 20px; margin-bottom: 0;\",\n \".sv_main .progress\": \"width: 60%;\",\n \".sv_main .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n \".sv_main .table>tbody>tr>td\": \"min-width: 90px;\",\n \".sv_main f-panel .sv_qstn\": \"padding: 0; vertical-align: middle;\",\n \".sv_main .sv_q_image\": \"display: inline-block;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n };\n StylesManager.bootstrapmaterialThemeCss = {\n \".sv_main.sv_bootstrapmaterial_css .form-group.is-focused .form-control\": \"linear-gradient(0deg, $main-color 2px, $main-color 0),linear-gradient(0deg, #D2D2D2 1px, transparent 0);\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn\": \"margin-bottom: 1rem;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_qstn label.sv_q_m_label\": \"height: 100%;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_image\": \"display: inline-block;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .checkbox input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.checkbox-inline input[type=checkbox]:checked + .checkbox-material .check:before\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .circle\": \"border-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .radio input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css label.radio-inline input[type=radio]:checked ~ .check\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-default:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary.active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .btn-secondary:active\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css .open>.dropdown-toggle.btn-default\": \"background-color: $main-color; color: $body-background-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary, .sv_main.sv_bootstrapmaterial_css button.btn-primary\": \"color: $body-background-color; background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css input[type='button'].btn-primary:hover, .sv_main.sv_bootstrapmaterial_css button.btn-primary:hover\": \"background-color: $main-hover-color;\",\n \".sv_main .sv_q_imgsel.checked label>div\": \"background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_q_file_remove:hover\": \"color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .form-group input[type=file]\": \"position: relative; opacity: 1;\",\n \".sv_main.sv_bootstrapmaterial_css .progress\": \"width: 60%; height: 1.5em;\",\n \".sv_main.sv_bootstrapmaterial_css .progress-bar\": \"width: auto; margin-left: 2px; margin-right: 2px;\",\n //progress bar\n \".sv_main .sv-progress\": \"background-color: $header-background-color;\",\n \".sv_main .sv-progress__bar\": \"background-color: $main-color;\",\n //paneldynamic\n \".sv_main .sv-paneldynamic__prev-btn.sv-paneldynamic__prev-btn--disabled, .sv_main .sv-paneldynamic__next-btn.sv-paneldynamic__next-btn--disabled\": \"fill: $disable-color;\",\n \".sv_main .sv-paneldynamic__progress-text\": \"color: $progress-text-color;\",\n \".sv_main .sv-paneldynamic__prev-btn, .sv_main .sv-paneldynamic__next-btn\": \"fill: $text-color\",\n //boolean\n \".sv_main .sv-boolean .checkbox-decorator\": \"display: none;\",\n \".sv_main .sv-boolean__switch\": \"background-color: $main-color;\",\n \".sv_main .sv-boolean__slider\": \"background-color: $slider-color;\",\n \".sv_main .sv-boolean__label.sv-boolean__label--disabled\": \"color: $disabled-label-color;\",\n \".sv_main .sv-boolean__label\": \"color: $text-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__switch\": \"background-color: $disabled-switch-color;\",\n \".sv_main .sv-boolean--disabled .sv-boolean__slider\": \"background-color: $disabled-slider-color;\",\n };\n StylesManager.Enabled = true;\n return StylesManager;\n}());\n\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssstandard__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__page__ = __webpack_require__(80);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__textPreProcessor__ = __webpack_require__(21);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__dxSurveyService__ = __webpack_require__(77);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__stylesmanager__ = __webpack_require__(26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__surveytimer__ = __webpack_require__(86);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyModel; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The `Survey` object contains information about the survey, Pages, Questions, flow logic and etc.\n */\nvar SurveyModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyModel, _super);\n function SurveyModel(jsonObj) {\n if (jsonObj === void 0) { jsonObj = null; }\n var _this = _super.call(this) || this;\n _this.valuesHash = {};\n _this.variablesHash = {};\n _this.localeValue = \"\";\n _this.completedStateValue = \"\";\n _this.completedStateTextValue = \"\";\n _this.isTimerStarted = false;\n /**\n * The event is fired before the survey is completed and the `onComplete` event is fired. You can prevent the survey from completing by setting `options.allowComplete` to `false`\n *
`sender` - the survey object that fires the event.\n *
`options.allowComplete` - Specifies whether a user can complete a survey. Set this property to `false` to prevent the survey from completing. The default value is `true`.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completing on \"complete\" trigger.\n * @see onComplete\n */\n _this.onCompleting = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired after a user clicks the 'Complete' button and finishes a survey. Use this event to send the survey data to your web server.\n *
`sender` - the survey object that fires the event.\n *
`options.showDataSaving(text)` - call this method to show that the survey is saving survey data on your server. The `text` is an optional parameter to show a custom message instead of default.\n *
`options.showDataSavingError(text)` - call this method to show that an error occurred while saving the data on your server. If you want to show a custom error, use an optional `text` parameter.\n *
`options.showDataSavingSuccess(text)` - call this method to show that the data was successfully saved on the server.\n *
`options.showDataSavingClear` - call this method to hide the text about the saving progress.\n *
`options.isCompleteOnTrigger` - returns true if the survey is completed on \"complete\" trigger.\n * @see data\n * @see clearInvisibleValues\n * @see completeLastPage\n * @see surveyPostId\n */\n _this.onComplete = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired after a user clicks the 'Complete' button. The event allows you to specify the URL opened after completing a survey.\n * Specify the `navigateToUrl` property to make survey navigate to another url.\n *
`sender` - the survey object that fires the event.\n *
`options.url` - Specifies a URL opened after completing a survey. Set this property to an empty string to cancel the navigation and show the completed survey page.\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n _this.onNavigateToUrl = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired after the survey changed it's state from \"starting\" to \"running\". The \"starting\" state means that survey shows the started page.\n * The `firstPageIsStarted` property should be set to `true`, if you want to display a start page in your survey. In this case, an end user should click the \"Start\" button to start the survey.\n * @see firstPageIsStarted\n */\n _this.onStarted = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on clicking the 'Next' button if the `sendResultOnPageNext` is set to `true`. You can use it to save the intermediate results, for example, if your survey is large enough.\n *
`sender` - the survey object that fires the event.\n * @see sendResultOnPageNext\n */\n _this.onPartialSend = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before the current page changes to another page. Typically it happens when a user click the 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - the previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.allowChanging` - set it to `false` to disable the current page changing. It is `true` by default.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanged\n **/\n _this.onCurrentPageChanging = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when the current page has been changed to another page. Typically it happens when a user click on 'Next' or 'Prev' buttons.\n *
`sender` - the survey object that fires the event.\n *
`option.oldCurrentPage` - a previous current/active page.\n *
`option.newCurrentPage` - a new current/active page.\n *
`option.isNextPage` - commonly means, that end-user press the next page button. In general, it means that options.newCurrentPage is the next page after options.oldCurrentPage\n *
`option.isPrevPage` - commonly means, that end-user press the previous page button. In general, it means that options.newCurrentPage is the previous page before options.oldCurrentPage\n * @see currentPage\n * @see currentPageNo\n * @see nextPage\n * @see prevPage\n * @see completeLastPage\n * @see onCurrentPageChanging\n */\n _this.onCurrentPageChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before the question value (answer) is changed. It can be done via UI by a user or programmatically on calling the `setValue` method.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has being changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is null.\n *
`options.oldValue` - an old, previous value.\n *
`options.value` - a new value. You can change it.\n * @see setValue\n * @see onValueChanged\n */\n _this.onValueChanging = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when the question value (i.e., answer) has been changed. The question value can be changed in UI (by a user) or programmatically (on calling `setValue` method).\n * Use the `onDynamicPanelItemValueChanged` and `onMatrixCellValueChanged` events to handle changes in a question in the Panel Dynamic and a cell question in matrices.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the value name that has been changed.\n *
`options.question` - a question which `question.name` equals to the value name. If there are several questions with the same name, the first question is used. If there is no such questions, the `options.question` is `null`.\n *
`options.value` - a new value.\n * @see setValue\n * @see onValueChanging\n * @see onDynamicPanelItemValueChanged\n * @see onMatrixCellValueChanged\n */\n _this.onValueChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when a question visibility has been changed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question which visibility has been changed.\n *
`options.name` - a question name.\n *
`options.visible` - a question `visible` boolean value.\n * @see Question.visibile\n * @see Question.visibileIf\n */\n _this.onVisibleChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on changing a page visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page which visibility has been changed.\n *
`options.visible` - a page `visible` boolean value.\n * @see PageModel.visibile\n * @see PageModel.visibileIf\n */\n _this.onPageVisibleChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on changing a panel visibility.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel which visibility has been changed.\n *
`options.visible` - a panel `visible` boolean value.\n * @see PanelModel.visibile\n * @see PanelModel.visibileIf\n */\n _this.onPanelVisibleChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on creating a new question.\n * Unlike the onQuestionAdded event, this event calls for all question created in survey including inside: a page, panel, matrix cell, dynamic panel and multiple text.\n * or inside a matrix cell or it can be a text question in multiple text items or inside a panel of a panel dynamic.\n * You can use this event to set up properties to a question based on it's type for all questions, regardless where they are located, on the page or inside a matrix cell.\n * Please note: If you want to use this event for questions loaded from JSON then you have to create survey with empty/null JSON parameter, assign the event and call survey.fromJSON(yourJSON) function.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly created question object.\n * @see Question\n * @see onQuestionAdded\n */\n _this.onQuestionCreated = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on adding a new question into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a newly added question object.\n *
`options.name` - a question name.\n *
`options.index` - an index of the question in the container (page or panel).\n *
`options.parentPanel` - a container where a new question is located. It can be a page or panel.\n *
`options.rootPanel` - typically, it is a page.\n * @see Question\n * @see onQuestionCreated\n */\n _this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on removing a question from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a removed question object.\n *
`options.name` - a question name.\n * @see Question\n */\n _this.onQuestionRemoved = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on adding a panel into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a newly added panel object.\n *
`options.name` - a panel name.\n *
`options.index` - an index of the panel in the container (a page or panel).\n *
`options.parentPanel` - a container (a page or panel) where a new panel is located.\n *
`options.rootPanel` - a root container, typically it is a page.\n * @see PanelModel\n */\n _this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on removing a panel from survey.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a removed panel object.\n *
`options.name` - a panel name.\n * @see PanelModel\n */\n _this.onPanelRemoved = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on adding a page into survey.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a newly added `panel` object.\n * @see PanelModel\n */\n _this.onPageAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on validating value in a question. You can specify a custom error message using `options.error`. The survey blocks completing the survey or going to the next page when the error messages are displayed.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.name` - a question name.\n *
`options.value` - the current question value (answer).\n *
`options.error` - an error string. It is empty by default.\n * @see onServerValidateQuestions\n * @see onSettingQuestionErrors\n */\n _this.onValidateQuestion = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before errors are assigned to a question. You may add/remove/modify errors for a question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a validated question.\n *
`options.errors` - the list of errors. The list is empty by default and remains empty if a validated question has no errors.\n * @see onValidateQuestion\n */\n _this.onSettingQuestionErrors = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to validate data on your server.\n *
`sender` - the survey object that fires the event.\n *
`options.data` - the values of all non-empty questions on the current page. You can get a question value as `options.data[\"myQuestionName\"]`.\n *
`options.errors` - set your errors to this object as: `options.errors[\"myQuestionName\"] = \"Error text\";`. It will be shown as a question error.\n *
`options.complete()` - call this function to tell survey that your server callback has been processed.\n * @see onValidateQuestion\n * @see onValidatePanel\n */\n _this.onServerValidateQuestions = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to modify the HTML before rendering, for example HTML on a completed page.\n *
`sender` - the survey object that fires the event.\n *
`options.html` - an HTML that you may change before text processing and then rendering.\n * @see completedHtml\n * @see loadingHtml\n * @see QuestionHtmlModel.html\n */\n /**\n * The event is fired on validating a panel. Set your error to `options.error` and survey will show the error for the panel and block completing the survey or going to the next page.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - a panel name.\n *
`options.error` - an error string. It is empty by default.\n * @see onValidateQuestion\n */\n _this.onValidatePanel = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use the event to change the default error text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - an error text.\n *
`options.error` - an instance of the `SurveyError` object.\n *
`options.name` - the error name. The following error names are available:\n * required, requireoneanswer, requirenumeric, exceedsize, webrequest, webrequestempty, otherempty,\n * uploadingfile, requiredinallrowserror, minrowcounterror, keyduplicationerror, custom\n */\n _this.onErrorCustomText = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use the this event to be notified when the survey finished validate questions on the current page. It commonly happens when a user try to go to the next page or complete the survey\n * options.questions - the list of questions that have errors\n * options.errors - the list of errors\n * options.page - the page where question(s) are located\n */\n _this.onValidatedErrorsOnCurrentPage = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to modify the HTML content before rendering, for example `completeHtml` or `loadingHtml`.\n * `options.html` - specifies the modified HTML content.\n * @see completedHtml\n * @see loadingHtml\n */\n _this.onProcessHtml = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to change the question title in code.\n *
`sender` - the survey object that fires the event.\n *
`options.title` - a calculated question title, based on question `title`, `name`, `isRequired`, and `visibleIndex` properties.\n *
`options.question` - a question object.\n */\n _this.onGetQuestionTitle = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to process the markdown text.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - SurveyJS element (a question, panel, page, or survey) where the string is going to be rendered.\n *
`options.text` - a text that is going to be rendered.\n *
`options.html` - an HTML content. It is `null` by default. Use this property to specify the HTML content rendered instead of `options.text`.\n */\n _this.onTextMarkdown = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event fires when it gets response from the [api.surveyjs.io](https://api.surveyjs.io) service on saving survey results. Use it to find out if the results have been saved successfully.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results has been sent to the service successfully.\n *
`options.response` - a response from the service.\n */\n _this.onSendResult = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use it to get results after calling the `getResult` method. It returns a simple analytics from [api.surveyjs.io](https://api.surveyjs.io) service.\n *
`sender` - the survey object that fires the event.\n *
`options.success` - it is `true` if the results were got from the service successfully.\n *
`options.data` - the object `{AnswersCount, QuestionResult : {} }`. `AnswersCount` is the number of posted survey results. `QuestionResult` is an object with all possible unique answers to the question and number of these answers.\n *
`options.dataList` - an array of objects `{name, value}`, where `name` is a unique value/answer to the question and `value` is a number/count of such answers.\n *
`options.response` - the server response.\n * @see getResult\n */\n _this.onGetResult = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on uploading the file in QuestionFile when `storeDataAsText` is set to `false`. Use this event to change the uploaded file name or to prevent a particular file from being uploaded.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the file name.\n *
`options.file` - the Javascript File object.\n *
`options.accept` - a boolean value, `true` by default. Set it to `false` to deny this file uploading.\n * @see uploadFiles\n * @see QuestionFileModel.storeDataAsText\n */\n _this.onUploadFiles = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on downloading a file in QuestionFile. Use this event to pass the file to a preview.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the question name.\n *
`options.content` - the file content.\n *
`options.fileValue` - single file question value.\n *
`options.callback` - a call back function to get the status on downloading the file and the downloaded file content.\n * @see downloadFile\n */\n _this.onDownloadFile = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * This event is fired on clearing the value in a QuestionFile. Use this event to remove files stored on your server.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the question name.\n *
`options.value` - the question value.\n *
`options.fileName` - a removed file's name, set it to `null` to clear all files.\n *
`options.callback` - a call back function to get the status on clearing the files operation.\n * @see clearFiles\n */\n _this.onClearFiles = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired after choices for radiogroup, checkbox, and dropdown has been loaded from a RESTful service and before they are assigned to a question.\n * You may change the choices, before they are assigned or disable/enabled make visible/invisible question, based on loaded results.\n *
`sender` - the survey object that fires the event.\n *
`question` - the question where loaded choices are going to be assigned.\n *
`choices` - the loaded choices. You can change the loaded choices to before they are assigned to question.\n *
`serverResult` - a result that comes from the server as it is.\n */\n _this.onLoadChoicesFromServer = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired after survey is loaded from api.surveyjs.io service.\n * You can use this event to perform manipulation with the survey model after it was loaded from the web service.\n *
`sender` - the survey object that fires the event.\n * @see surveyId\n * @see loadSurveyFromService\n */\n _this.onLoadedSurveyFromService = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on processing the text when it finds a text in brackets: `{somevalue}`. By default, it uses the value of survey question values and variables.\n * For example, you may use the text processing in loading choices from the web. If your `choicesByUrl.url` equals to \"UrlToServiceToGetAllCities/{country}/{state}\",\n * you may set on this event `options.value` to \"all\" or empty string when the \"state\" value/question is non selected by a user.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the name of the processing value, for example, \"state\" in our example.\n *
`options.value` - the value of the processing text.\n *
`options.isExists` - a boolean value. Set it to `true` if you want to use the value and set it to `false` if you don't.\n */\n _this.onProcessTextValue = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before rendering a question. Use it to override the default question CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{root: \"table\", button: \"button\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdateQuestionCssClasses = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before rendering a panel. Use it to override the default panel CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.panel` - a panel for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePanelCssClasses = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before rendering a page. Use it to override the default page CSS classes.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page for which you can change the CSS classes.\n *
`options.cssClasses` - an object with CSS classes. For example `{title: \"sv_p_title\", description: \"small\"}`. You can change them to your own CSS classes.\n */\n _this.onUpdatePageCssClasses = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after survey is rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - a root HTML element bound to the survey object.\n */\n _this.onAfterRenderSurvey = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.htmlElement` - an HTML element bound to the survey header object.\n */\n _this.onAfterRenderHeader = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after a page is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.page` - a page object for which the event is fired. Typically the current/active page.\n *
`options.htmlElement` - an HTML element bound to the page object.\n */\n _this.onAfterRenderPage = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after a question is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestion = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after a non-composite question (text, comment, dropdown, radiogroup, checkbox) is rendered in DOM. Use it to modify HTML elements.\n * This event is not fired for matrices, panels, multiple text and image picker.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question object for which the event is fired.\n *
`options.htmlElement` - an HTML element bound to the question object.\n */\n _this.onAfterRenderQuestionInput = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired right after a panel is rendered in DOM. Use it to modify HTML elements.\n *
`sender` - the survey object that fires the event\n *
`options.panel` - a panel object for which the event is fired\n *
`options.htmlElement` - an HTML element bound to the panel object\n */\n _this.onAfterRenderPanel = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.row` - a new added row.\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixRowAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before adding a new row in Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.canAddRow` - specifies whether a new row can be added\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixBeforeRowAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question\n *
`options.rowIndex` - a removed row index\n *
`options.row` - a removed row object\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDynamicModel.visibleRows\n */\n _this.onMatrixRowRemoved = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before rendering \"Remove\" button for removing a row from Matrix Dynamic question.\n *
`sender` - the survey object that fires the event\n *
`options.question` - a matrix question.\n *
`options.rowIndex` - a row index.\n *
`options.row` - a row object.\n *
`options.allow` - a boolean property. Set it to `false` to disable the row removing.\n * @see QuestionMatrixDynamicModel\n */\n _this.onMatrixAllowRemoveRow = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired for every cell created in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell. You may customize it, change it's properties, like choices or visible.\n *
`options.rowValue` - the value of the current row. To access a particular column's value within the current row, use: `options.rowValue[\"columnValue\"]`.\n *
`options.column` - the matrix column object.\n *
`options.columName` - the matrix column name.\n *
`options.row` - the matrix row object.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellCreated = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired for every cell after is has been rendered in DOM.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cell` - the matrix cell.\n *
`options.cellQuestion` - the question/editor in the cell.\n *
`options.htmlElement` - an HTML element bound to the `cellQuestion` object.\n *
`options.column` - the matrix column object.\n *
`options.row` - the matrix row object.\n * @see onMatrixCellCreated\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixAfterCellRender = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when cell value is changed in Matrix Dynamic and Matrix Dropdown questions.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixCellValueChanging\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on changing cell value in Matrix Dynamic and Matrix Dropdown questions. You may change the `options.value` property to change a cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columName` - the matrix column name.\n *
`options.value` - a new value.\n *
`options.oldValue` - the old value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns a cell question by column name.\n * @see onMatrixCellValueChanged\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValueChanging = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when Matrix Dynamic and Matrix Dropdown questions validate the cell value.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.columName` - the matrix column name.\n *
`options.value` - a cell value.\n *
`options.row` - the matrix row object.\n *
`options.getCellQuestion(columnName)` - the function that returns the cell question by column name.\n * @see onMatrixBeforeRowAdded\n * @see onMatrixRowAdded\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellValidate = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on adding a new panel in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelAdded = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired on removing a panel from Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a panel question.\n *
`options.panelIndex` - a removed panel index.\n *
`options.panel` - a removed panel.\n * @see QuestionPanelDynamicModel\n * @see QuestionPanelDynamicModel.panels\n */\n _this.onDynamicPanelRemoved = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired every second if the method `startTimer` has been called.\n * @see startTimer\n * @see timeSpent\n * @see Page.timeSpent\n */\n _this.onTimer = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired before displaying a new information in the Timer Panel. Use it to change the default text.\n *
`sender` - the survey object that fires the event.\n *
`options.text` - the timer panel info text.\n */\n _this.onTimerPanelInfoText = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The event is fired when item value is changed in Panel Dynamic question.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the panel question.\n *
`options.panel` - the dynamic panel item.\n *
`options.name` - the item name.\n *
`options.value` - a new value.\n *
`options.itemIndex` - the panel item index.\n *
`options.itemValue` - the panel item object.\n * @see onDynamicPanelAdded\n * @see QuestionPanelDynamicModel\n */\n _this.onDynamicPanelItemValueChanged = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to define, whether an answer to a question is correct or not.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question on which you have to decide if the answer is correct or not.\n *
`options.result` - returns `true`, if an answer is correct, or `false`, if the answer is not correct. Use questions' `value` and `correctAnswer` properties to return the correct value.\n *
`options.correctAnswers` - you may change the default number of correct or incorrect answers in the question, for example for matrix, where each row is a quiz question.\n * @see Question.value\n * @see Question.correctAnswer\n */\n _this.onIsAnswerCorrect = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to control drag&drop operations during design mode.\n *
`sender` - the survey object that fires the event.\n *
`options.allow` - set it to `false` to disable dragging.\n *
`options.target` - a target element that is dragged.\n *
`options.source` - a source element. It can be `null`, if it is a new element, dragging from toolbox.\n *
`options.parent` - a page or panel where target element is dragging.\n *
`options.insertBefore` - an element before the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging an element after the last element in a container.\n *
`options.insertAfter` - an element after the target element is dragging. It can be `null` if parent container (page or panel) is empty or dragging element to the first position within the parent container.\n * @see setDesignMode\n * @see isDesignMode\n */\n _this.onDragDropAllow = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * Use this event to control scrolling element to top. You can cancel the default behavior by setting options.cancel property to true.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - an element that is going to be scrolled on top.\n *
`options.question` - a question that is going to be scrolled on top. It can be null if options.page is not null.\n *
`options.page` - a page that is going to be scrolled on top. It can be null if options.question is not null.\n *
`options.elementId` - the unique element DOM Id.\n *
`options.cancel` - set this property to true to cancel the default scrolling.\n */\n _this.onScrollingElementToTop = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n _this.onLocaleChangedEvent = new __WEBPACK_IMPORTED_MODULE_3__base__[\"b\" /* Event */]();\n /**\n * The list of errors on loading survey JSON. If the list is empty after loading a JSON, then the JSON is correct and has no errors.\n * @see JsonError\n */\n _this.jsonErrors = null;\n _this.cssValue = null;\n /**\n * Gets or sets whether to hide all required errors.\n */\n _this.hideRequiredErrors = false;\n _this.conditionVersion = 0;\n _this._isDesignMode = false;\n /**\n * Gets or sets whether the survey must ignore validation like required questions and others, on `nextPage` and `completeLastPage` function calls. The default is `false`.\n * @see nextPage\n * @see completeLastPage\n * @see mode\n */\n _this.ignoreValidation = false;\n _this.isNavigationButtonPressed = false;\n _this.runningPages = null;\n _this.origionalPages = null;\n _this.isTriggerIsRunning = false;\n _this.isEndLoadingFromJson = null;\n _this.questionHashes = {\n names: {},\n namesInsensitive: {},\n valueNames: {},\n valueNamesInsensitive: {},\n };\n _this.timerFunc = null;\n /**\n * Returns the time in seconds an end user spends on the survey\n * @see startTimer\n * @see PageModel.timeSpent\n */\n _this.timeSpent = 0;\n var self = _this;\n if (typeof document !== \"undefined\") {\n SurveyModel.stylesManager = new __WEBPACK_IMPORTED_MODULE_12__stylesmanager__[\"a\" /* StylesManager */]();\n }\n _this.createLocalizableString(\"title\", _this, true);\n _this.createLocalizableString(\"description\", _this, true);\n _this.createLocalizableString(\"logo\", _this, false);\n _this.createLocalizableString(\"completedHtml\", _this);\n _this.createLocalizableString(\"completedBeforeHtml\", _this);\n _this.createLocalizableString(\"loadingHtml\", _this);\n _this.createLocalizableString(\"startSurveyText\", _this);\n _this.createLocalizableString(\"pagePrevText\", _this);\n _this.createLocalizableString(\"pageNextText\", _this);\n _this.createLocalizableString(\"completeText\", _this);\n _this.createLocalizableString(\"previewText\", _this);\n _this.createLocalizableString(\"editText\", _this);\n _this.createLocalizableString(\"questionTitleTemplate\", _this, true);\n _this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_6__textPreProcessor__[\"a\" /* TextPreProcessor */]();\n _this.textPreProcessor.onProcess = function (textValue) {\n self.getProcessedTextValue(textValue);\n };\n _this.createNewArray(\"pages\", function (value) {\n self.doOnPageAdded(value);\n });\n _this.createNewArray(\"triggers\", function (value) {\n value.setOwner(self);\n });\n _this.createNewArray(\"calculatedValues\", function (value) {\n value.setOwner(self);\n });\n _this.createNewArray(\"completedHtmlOnCondition\", function (value) {\n value.locOwner = self;\n });\n _this.createNewArray(\"navigateToUrlOnCondition\", function (value) {\n value.locOwner = self;\n });\n _this.registerFunctionOnPropertyValueChanged(\"firstPageIsStarted\", function () {\n self.onFirstPageIsStartedChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"mode\", function () {\n self.onModeChanged();\n });\n _this.onBeforeCreating();\n if (jsonObj) {\n if (typeof jsonObj === \"string\" || jsonObj instanceof String) {\n jsonObj = JSON.parse(jsonObj);\n }\n if (jsonObj && jsonObj.clientId) {\n _this.clientId = jsonObj.clientId;\n }\n _this.fromJSON(jsonObj);\n if (_this.surveyId) {\n _this.loadSurveyFromService(_this.surveyId, _this.clientId);\n }\n }\n _this.onCreating();\n return _this;\n }\n Object.defineProperty(SurveyModel.prototype, \"platformName\", {\n get: function () {\n return SurveyModel.platform;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"commentPrefix\", {\n /**\n * You can display an additional field (comment field) for the most of questions; users can enter additional comments to their response.\n * The comment field input is saved as `'question name' + 'commentPrefix'`.\n * @see data\n * @see Question.hasComment\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_15__settings__[\"a\" /* settings */].commentPrefix;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_15__settings__[\"a\" /* settings */].commentPrefix = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPageValue\", {\n get: function () {\n return this.getPropertyValue(\"currentPageValue\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"currentPageValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getType = function () {\n return \"survey\";\n };\n SurveyModel.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n if (name === \"questionsOnPageMode\") {\n this.onQuestionsOnPageModeChanged(oldValue);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"pages\", {\n /**\n * Returns a list of all pages in the survey, including invisible pages.\n * @see PageModel\n * @see visiblePages\n */\n get: function () {\n return this.getPropertyValue(\"pages\");\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getCss = function () {\n return this.css;\n };\n Object.defineProperty(SurveyModel.prototype, \"css\", {\n get: function () {\n if (!this.cssValue) {\n this.cssValue = {};\n this.copyCssClasses(this.cssValue, __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssstandard__[\"a\" /* surveyCss */].getCss());\n }\n return this.cssValue;\n },\n set: function (value) {\n this.mergeValues(value, this.css);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationComplete\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.complete);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPreview\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.preview);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationEdit\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.edit);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationPrev\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.prev);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationStart\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cssNavigationNext\", {\n get: function () {\n return this.getNavigationCss(this.css.navigationButton, this.css.navigation.next);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedCss\", {\n get: function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getNavigationCss = function (main, btn) {\n var res = \"\";\n if (main)\n res = main;\n if (btn)\n res += \" \" + btn;\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"triggers\", {\n /**\n * Gets or sets a list of triggers in the survey.\n * @see SurveyTrigger\n */\n get: function () {\n return this.getPropertyValue(\"triggers\");\n },\n set: function (val) {\n this.setPropertyValue(\"triggers\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"calculatedValues\", {\n /**\n * Gets or sets a list of calculated values in the survey.\n * @see CalculatedValue\n */\n get: function () {\n return this.getPropertyValue(\"calculatedValues\");\n },\n set: function (val) {\n this.setPropertyValue(\"calculatedValues\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyId\", {\n /**\n * Gets or sets an identifier of a survey model loaded from the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey JSON is automatically loaded from [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see loadSurveyFromService\n * @see onLoadedSurveyFromService\n */\n get: function () {\n return this.getPropertyValue(\"surveyId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyId\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyPostId\", {\n /**\n * Gets or sets an identifier of a survey model saved to the [api.surveyjs.io](https://api.surveyjs.io) service. When specified, the survey data is automatically saved to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see onComplete\n * @see surveyShowDataSaving\n */\n get: function () {\n return this.getPropertyValue(\"surveyPostId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"surveyPostId\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clientId\", {\n /**\n * Gets or sets user's identifier (e.g., e-mail or unique customer id) in your web application.\n * If you load survey or post survey results from/to [api.surveyjs.io](https://api.surveyjs.io) service, then the library do not allow users to run the same survey the second time.\n * On the second run, the user will see the survey complete page.\n */\n get: function () {\n return this.getPropertyValue(\"clientId\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"clientId\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"cookieName\", {\n /**\n * Gets or sets a cookie name used to save information about completing the survey.\n * If the property is not empty, before starting the survey, the Survey library checks if the cookie with this name exists.\n * If it is `true`, the survey goes to complete mode and a user sees the survey complete page. On completing the survey the cookie with this name is created.\n */\n get: function () {\n return this.getPropertyValue(\"cookieName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"cookieName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"sendResultOnPageNext\", {\n /**\n * Gets or sets whether to save survey results on completing every page. If the property value is set to `true`, the `onPartialSend` event is fired.\n * @see onPartialSend\n * @see clientId\n */\n get: function () {\n return this.getPropertyValue(\"sendResultOnPageNext\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"sendResultOnPageNext\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"surveyShowDataSaving\", {\n /**\n * Gets or sets whether to show the progress on saving/sending data into the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyPostId\n */\n get: function () {\n return this.getPropertyValue(\"surveyShowDataSaving\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"surveyShowDataSaving\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusFirstQuestionAutomatic\", {\n /**\n * Gets or sets whether the first input is focused on showing a next or a previous page.\n */\n get: function () {\n return this.getPropertyValue(\"focusFirstQuestionAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusFirstQuestionAutomatic\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"focusOnFirstError\", {\n /**\n * Gets or sets whether the first input is focused if the current page has errors.\n * Set this property to `false` (the default value is `true`) if you do not want to bring the focus to the first question that has error on the page.\n */\n get: function () {\n return this.getPropertyValue(\"focusOnFirstError\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"focusOnFirstError\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showNavigationButtons\", {\n /**\n * Gets or sets the navigation buttons position.\n * Possible values: 'bottom' (default), 'top', 'both' and 'none'. Set it to 'none' to hide 'Prev', 'Next' and 'Complete' buttons.\n * It makes sense if you are going to create a custom navigation, have only a single page, or the `goNextPageAutomatic` property is set to `true`.\n * @see goNextPageAutomatic\n * @see showPrevButton\n */\n get: function () {\n return this.getPropertyValue(\"showNavigationButtons\");\n },\n set: function (val) {\n if (val === true || val === undefined) {\n val = \"bottom\";\n }\n if (val === false) {\n val = \"none\";\n }\n this.setPropertyValue(\"showNavigationButtons\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPrevButton\", {\n /**\n * Gets or sets whether the Survey displays \"Prev\" button in its pages. Set it to `false` to prevent end-users from going back to their answers.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"showPrevButton\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPrevButton\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTitle\", {\n /**\n * Gets or sets whether the Survey displays survey title in its pages. Set it to `false` to hide a survey title.\n * @see title\n */\n get: function () {\n return this.getPropertyValue(\"showTitle\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showTitle\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showPageTitles\", {\n /**\n * Gets or sets whether the Survey displays page titles. Set it to `false` to hide page titles.\n * @see PageModel.title\n */\n get: function () {\n return this.getPropertyValue(\"showPageTitles\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showPageTitles\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showCompletedPage\", {\n /**\n * On finishing the survey the complete page is shown. Set the property to `false`, to hide the complete page.\n * @see data\n * @see onComplete\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"showCompletedPage\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showCompletedPage\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrl\", {\n /**\n * Set this property to a url you want to navigate after a user completing the survey.\n * By default it uses after calling onComplete event. In case calling options.showDataSaving callback in onComplete event, navigateToUrl will be used on calling options.showDataSavingSuccess callback.\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrl\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrl\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"navigateToUrlOnCondition\", {\n /**\n * Gets or sets a list of URL condition items. If the expression of this item returns `true`, then survey will navigate to the item URL.\n * @see UrlConditionItem\n * @see navigateToUrl\n */\n get: function () {\n return this.getPropertyValue(\"navigateToUrlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigateToUrlOnCondition\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getNavigateToUrl = function () {\n var item = this.getExpressionItemOnRunCondition(this.navigateToUrlOnCondition);\n var url = !!item ? item.url : this.navigateToUrl;\n if (!!url) {\n url = this.processText(url, true);\n }\n return url;\n };\n SurveyModel.prototype.navigateTo = function () {\n var url = this.getNavigateToUrl();\n var options = { url: url };\n this.onNavigateToUrl.fire(this, options);\n if (!options.url || !window || !window.location)\n return;\n window.location.href = options.url;\n };\n Object.defineProperty(SurveyModel.prototype, \"requiredText\", {\n /**\n * Gets or sets the required question mark. The required question mark is a char or string that is rendered in the required questions' titles.\n * @see Question.title\n */\n get: function () {\n return this.getPropertyValue(\"requiredText\", \"*\");\n },\n set: function (val) {\n this.setPropertyValue(\"requiredText\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.beforeSettingQuestionErrors = function (question, errors) {\n if (this.hideRequiredErrors) {\n for (var i = 0; i < errors.length; i++) {\n if (errors[i].getErrorType() == \"required\") {\n errors[i].visible = false;\n }\n }\n }\n this.onSettingQuestionErrors.fire(this, {\n question: question,\n errors: errors,\n });\n };\n Object.defineProperty(SurveyModel.prototype, \"questionStartIndex\", {\n /**\n * Gets or sets the first question index. The first question index is '1' by default. You may start it from '100' or from 'A', by setting '100' or 'A' to this property.\n * You can set the start index to \"(1)\" or \"# A)\" or \"a)\" to render question number as (1), # A) and a) accordingly.\n * @see Question.title\n * @see requiredText\n */\n get: function () {\n return this.getPropertyValue(\"questionStartIndex\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionStartIndex\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"storeOthersAsComment\", {\n /**\n * Gets or sets whether the \"Others\" option text is stored as question comment.\n *\n * By default the entered text in the \"Others\" input in the checkbox/radiogroup/dropdown is stored as `\"question name \" + \"-Comment\"`. The value itself is `\"question name\": \"others\"`.\n * Set this property to `false`, to store the entered text directly in the `\"question name\"` key.\n * @see commentPrefix\n */\n get: function () {\n return this.getPropertyValue(\"storeOthersAsComment\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"storeOthersAsComment\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTextLength\", {\n /**\n * Specifies the default maximum length for questions like text and comment, including matrix cell questions.\n *\n * The default value is `0`, that means that the text and comment have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see maxOthersLength\n */\n get: function () {\n return this.getPropertyValue(\"maxTextLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTextLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxOthersLength\", {\n /**\n * Gets or sets the default maximum length for question comments and others\n *\n * The default value is `0`, that means that the question comments have the same max length as the standard HTML input - 524288 characters: https://www.w3schools.com/tags/att_input_maxlength.asp.\n * @see Question.hasComment\n * @see Question.hasOther\n * @see maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxOthersLength\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxOthersLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"goNextPageAutomatic\", {\n /**\n * Gets or ses whether a user can navigate the next page automatically after answering all the questions on a page without pressing the \"Next\" button.\n * The available options:\n *\n * - `true` - navigate the next page and submit survey data automatically.\n * - `autogonext` - navigate the next page automatically but do not submit survey data.\n * - `false` - do not navigate the next page and do not submit survey data automatically.\n * @see showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"goNextPageAutomatic\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"goNextPageAutomatic\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"allowCompleteSurveyAutomatic\", {\n /**\n * Gets or sets whether a survey is automatically completed when `goNextPageAutomatic = true`. Set it to `false` if you do not want to submit survey automatically on completing the last survey page.\n * @see goNextPageAutomatic\n */\n get: function () {\n return this.getPropertyValue(\"allowCompleteSurveyAutomatic\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowCompleteSurveyAutomatic\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"checkErrorsMode\", {\n /**\n * Gets or sets a value that specifies how the survey validates the question answers.\n *\n * The following options are available:\n *\n * - `onNextPage` (default) - check errors on navigating to the next page or on completing the survey.\n * - `onValueChanged` - check errors on every question value (i.e., answer) changing.\n * - `onComplete` - to validate all visible questions on complete button click. If there are errors on previous pages, then the page with the first error becomes the current.\n */\n get: function () {\n return this.getPropertyValue(\"checkErrorsMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"checkErrorsMode\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"textUpdateMode\", {\n /**\n * Gets or sets a value that specifies how the survey updates its questions' text values.\n *\n * The following options are available:\n *\n * - `onBlur` (default) - the value is updated after an input loses the focus.\n * - `onTyping` - update the value of text questions, \"text\" and \"comment\", on every key press.\n *\n * Note, that setting to \"onTyping\" may lead to a performance degradation, in case you have many expressions in the survey.\n */\n get: function () {\n return this.getPropertyValue(\"textUpdateMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"textUpdateMode\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"clearInvisibleValues\", {\n /**\n * Gets or sets a value that specifies how the invisible data is included in survey data.\n *\n * The following options are available:\n *\n * - `none` - include the invisible values into the survey data.\n * - `onHidden` - clear the question value when it becomes invisible. If a question has value and it was invisible initially then survey clears the value on completing.\n * - `onComplete` (default) - clear invisible question values on survey complete. In this case, the invisible questions will not be stored on the server.\n * @see Question.visible\n * @see onComplete\n */\n get: function () {\n return this.getPropertyValue(\"clearInvisibleValues\");\n },\n set: function (val) {\n if (val === true)\n val = \"onComplete\";\n if (val === false)\n val = \"none\";\n this.setPropertyValue(\"clearInvisibleValues\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Call this function to remove all question values from the survey, that end-user will not be able to enter.\n * For example the value that doesn't exists in a radiogroup/dropdown/checkbox choices or matrix rows/columns.\n * Please note, this function doesn't clear values for invisible questions or values that doesn't associated with questions.\n * In fact this function just call clearIncorrectValues function of all questions in the survey\n * @see Question.clearIncorrectValues\n * @see Page.clearIncorrectValues\n * @see Panel.clearIncorrectValues\n */\n SurveyModel.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].clearIncorrectValues();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"locale\", {\n /**\n * Gets or sets the survey locale. The default value it is empty, this means the 'en' locale is used.\n * You can set it to 'de' - German, 'fr' - French and so on. The library has built-in localization for several languages. The library has a multi-language support as well.\n */\n get: function () {\n return this.localeValue;\n },\n set: function (value) {\n __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].currentLocale = value;\n this.localeValue = __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].currentLocale;\n this.setPropertyValue(\"locale\", this.localeValue);\n this.locStrsChanged();\n this.onLocaleChanged();\n this.onLocaleChangedEvent.fire(this, value);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns an array of locales that are used in the current survey.\n */\n SurveyModel.prototype.getUsedLocales = function () {\n var locs = new Array();\n this.addUsedLocales(locs);\n //Replace the default locale with the real one\n var index = locs.indexOf(\"default\");\n if (index > -1) {\n var defaultLoc = __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].defaultLocale;\n //Remove the defaultLoc\n var defIndex = locs.indexOf(defaultLoc);\n if (defIndex > -1) {\n locs.splice(defIndex, 1);\n }\n index = locs.indexOf(\"default\");\n locs[index] = defaultLoc;\n }\n return locs;\n };\n SurveyModel.prototype.onLocaleChanged = function () { };\n //ILocalizableOwner\n SurveyModel.prototype.getLocale = function () {\n return this.locale;\n };\n SurveyModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n if (this.currentPage) {\n this.currentPage.locStrsChanged();\n }\n };\n SurveyModel.prototype.getMarkdownHtml = function (text) {\n return this.getSurveyMarkdownHtml(this, text);\n };\n SurveyModel.prototype.getProcessedText = function (text) {\n return this.processText(text, true);\n };\n SurveyModel.prototype.getLocString = function (str) {\n return __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].getString(str);\n };\n //ISurveyErrorOwner\n SurveyModel.prototype.getErrorCustomText = function (text, error) {\n var options = { text: text, name: error.getErrorType(), error: error };\n this.onErrorCustomText.fire(this, options);\n return options.text;\n };\n Object.defineProperty(SurveyModel.prototype, \"emptySurveyText\", {\n /**\n * Returns the text that is displayed when there are no any visible pages and questiona.\n */\n get: function () {\n return this.getLocString(\"emptySurvey\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"title\", {\n /**\n * Gets or sets a survey title.\n * @see description\n */\n get: function () {\n return this.getLocalizableStringText(\"title\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"title\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"description\", {\n /**\n * Gets or sets a survey description. The survey description is displayed under a survey title.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"description\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"description\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logo\", {\n /**\n * Gets or sets a survey logo.\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"logo\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"logo\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLogo\", {\n get: function () {\n return this.getLocalizableString(\"logo\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoWidth\", {\n /**\n * Gets or sets a survey logo width.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoWidth\", 300);\n },\n set: function (value) {\n this.setPropertyValue(\"logoWidth\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoHeight\", {\n /**\n * Gets or sets a survey logo height.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoHeight\", 200);\n },\n set: function (value) {\n this.setPropertyValue(\"logoHeight\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoPosition\", {\n /**\n * Gets or sets a survey logo position.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoPosition\", \"left\");\n },\n set: function (value) {\n this.setPropertyValue(\"logoPosition\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasLogo\", {\n get: function () {\n return !!this.logo && this.logoPosition !== \"none\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoBefore\", {\n get: function () {\n return (this.hasLogo &&\n (this.logoPosition === \"left\" || this.logoPosition === \"top\"));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLogoAfter\", {\n get: function () {\n return (this.hasLogo &&\n (this.logoPosition === \"right\" || this.logoPosition === \"bottom\"));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoClassNames\", {\n get: function () {\n var logoClasses = {\n left: \"sv-logo--left\",\n right: \"sv-logo--right\",\n top: \"sv-logo--top\",\n bottom: \"sv-logo--bottom\",\n };\n return this.css.logo + \" \" + logoClasses[this.logoPosition];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"logoFit\", {\n /**\n * The logo fit mode.\n * @see logo\n */\n get: function () {\n return this.getPropertyValue(\"logoFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"logoFit\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtml\", {\n /**\n * Gets or sets the HTML content displayed on the complete page. Use this property to change the default complete page text.\n * @see showCompletedPage\n * @see completedHtmlOnCondition\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedHtml\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedHtml\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedHtmlOnCondition\", {\n /**\n * The list of HTML condition items. If the expression of this item returns `true`, then a survey will use this item HTML instead of `completedHtml`.\n * @see HtmlConditionItem\n * @see completeHtml\n */\n get: function () {\n return this.getPropertyValue(\"completedHtmlOnCondition\");\n },\n set: function (val) {\n this.setPropertyValue(\"completedHtmlOnCondition\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Calculates a given expression and returns a result value.\n * @param expression\n */\n SurveyModel.prototype.runExpression = function (expression) {\n if (!expression)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new __WEBPACK_IMPORTED_MODULE_14__conditions__[\"a\" /* ExpressionRunner */](expression).run(values, properties);\n };\n /**\n * Calculates a given expression and returns `true` or `false`.\n * @param expression\n */\n SurveyModel.prototype.runCondition = function (expression) {\n if (!expression)\n return false;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n return new __WEBPACK_IMPORTED_MODULE_14__conditions__[\"b\" /* ConditionRunner */](expression).run(values, properties);\n };\n Object.defineProperty(SurveyModel.prototype, \"renderedCompletedHtml\", {\n get: function () {\n var item = this.getExpressionItemOnRunCondition(this.completedHtmlOnCondition);\n return !!item ? item.html : this.completedHtml;\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getExpressionItemOnRunCondition = function (items) {\n if (items.length == 0)\n return null;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < items.length; i++) {\n if (items[i].runCondition(values, properties)) {\n return items[i];\n }\n }\n return null;\n };\n Object.defineProperty(SurveyModel.prototype, \"completedBeforeHtml\", {\n /**\n * The HTML content displayed to an end user that has already completed the survey.\n * @see clientId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completedBeforeHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"completedBeforeHtml\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompletedBeforeHtml\", {\n get: function () {\n return this.getLocalizableString(\"completedBeforeHtml\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"loadingHtml\", {\n /**\n * The HTML that shows on loading survey Json from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @see surveyId\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"loadingHtml\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"loadingHtml\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locLoadingHtml\", {\n get: function () {\n return this.getLocalizableString(\"loadingHtml\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startSurveyText\", {\n /**\n * Gets or sets the 'Start' button caption.\n * The 'Start' button is shown on the started page. Set the `firstPageIsStarted` property to `true`, to display the started page.\n * @see firstPageIsStarted\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"startSurveyText\", this.getLocString(\"startSurveyText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"startSurveyText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locStartSurveyText\", {\n get: function () {\n return this.getLocalizableString(\"startSurveyText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pagePrevText\", {\n /**\n * Gets or sets the 'Prev' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pagePrevText\", this.getLocString(\"pagePrevText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pagePrevText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPagePrevText\", {\n get: function () {\n return this.getLocalizableString(\"pagePrevText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageNextText\", {\n /**\n * Gets or sets the 'Next' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"pageNextText\", this.getLocString(\"pageNextText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"pageNextText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPageNextText\", {\n get: function () {\n return this.getLocalizableString(\"pageNextText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completeText\", {\n /**\n * Gets or sets the 'Complete' button caption.\n * @see locale\n */\n get: function () {\n return this.getLocalizableStringText(\"completeText\", this.getLocString(\"completeText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"completeText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locCompleteText\", {\n get: function () {\n return this.getLocalizableString(\"completeText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"previewText\", {\n /**\n * Gets or sets the 'Preview' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see editText\n * @see showPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"previewText\", this.getLocString(\"previewText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"previewText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locPreviewText\", {\n get: function () {\n return this.getLocalizableString(\"previewText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"editText\", {\n /**\n * Gets or sets the 'Edit' button caption.\n * @see locale\n * @see showPreviewBeforeComplete\n * @see previewText\n * @see cancelPreview\n */\n get: function () {\n return this.getLocalizableStringText(\"editText\", this.getLocString(\"editText\"));\n },\n set: function (newValue) {\n this.setLocalizableStringText(\"editText\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"locEditText\", {\n get: function () {\n return this.getLocalizableString(\"editText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitlePattern\", {\n /**\n * Set the pattern for question title. Default is \"numTitleRequire\", 1. What is your name? *,\n * You can set it to numRequireTitle: 1. * What is your name?\n * You can set it to requireNumTitle: * 1. What is your name?\n * You can set it to numTitle (remove require symbol completely): 1. What is your name?\n * @see QuestionModel.title\n */\n get: function () {\n return this.getPropertyValue(\"questionTitlePattern\", \"numTitleRequire\");\n },\n set: function (val) {\n if (val !== \"numRequireTitle\" &&\n val !== \"requireNumTitle\" &&\n val != \"numTitle\") {\n val = \"numTitleRequire\";\n }\n this.setPropertyValue(\"questionTitlePattern\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getQuestionTitlePatternOptions = function () {\n var res = new Array();\n var title = this.getLocString(\"questionTitlePatternText\");\n var num = !!this.questionStartIndex ? this.questionStartIndex : \"1.\";\n res.push({\n value: \"numTitleRequire\",\n text: num + \" \" + title + \" \" + this.requiredText,\n });\n res.push({\n value: \"numRequireTitle\",\n text: num + \" \" + this.requiredText + \" \" + title,\n });\n res.push({\n value: \"requireNumTitle\",\n text: this.requiredText + \" \" + num + \" \" + title,\n });\n res.push({\n value: \"numTitle\",\n text: num + \" \" + title,\n });\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"questionTitleTemplate\", {\n /**\n * Gets or sets a question title template. Obsolete, please use questionTitlePattern\n * @see QuestionModel.title\n * @see questionTitlePattern\n */\n get: function () {\n return this.getLocalizableStringText(\"questionTitleTemplate\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"questionTitleTemplate\", value);\n this.questionTitlePattern = this.getNewTitlePattern(value);\n this.questionStartIndex = this.getNewQuestionTitleElement(value, \"no\", this.questionStartIndex, \"1\");\n this.requiredText = this.getNewQuestionTitleElement(value, \"require\", this.requiredText, \"*\");\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getNewTitlePattern = function (template) {\n if (!!template) {\n var strs = [];\n while (template.indexOf(\"{\") > -1) {\n template = template.substr(template.indexOf(\"{\") + 1);\n var ind = template.indexOf(\"}\");\n if (ind < 0)\n break;\n strs.push(template.substr(0, ind));\n template = template.substr(ind + 1);\n }\n if (strs.length > 1) {\n if (strs[0] == \"require\")\n return \"requireNumTitle\";\n if (strs[1] == \"require\" && strs.length == 3)\n return \"numRequireTitle\";\n if (strs.indexOf(\"require\") < 0)\n return \"numTitle\";\n }\n if (strs.length == 1 && strs[0] == \"title\") {\n return \"numTitle\";\n }\n }\n return \"numTitleRequire\";\n };\n SurveyModel.prototype.getNewQuestionTitleElement = function (template, name, currentValue, defaultValue) {\n name = \"{\" + name + \"}\";\n if (!template || template.indexOf(name) < 0)\n return currentValue;\n var ind = template.indexOf(name);\n var prefix = \"\";\n var postfix = \"\";\n var i = ind - 1;\n for (; i >= 0; i--) {\n if (template[i] == \"}\")\n break;\n }\n if (i < ind - 1) {\n prefix = template.substr(i + 1, ind - i - 1);\n }\n ind += name.length;\n i = ind;\n for (; i < template.length; i++) {\n if (template[i] == \"{\")\n break;\n }\n if (i > ind) {\n postfix = template.substr(ind, i - ind);\n }\n i = 0;\n while (i < prefix.length && prefix.charCodeAt(i) < 33)\n i++;\n prefix = prefix.substr(i);\n i = postfix.length - 1;\n while (i >= 0 && postfix.charCodeAt(i) < 33)\n i--;\n postfix = postfix.substr(0, i + 1);\n if (!prefix && !postfix)\n return currentValue;\n var value = !!currentValue ? currentValue : defaultValue;\n return prefix + value + postfix;\n };\n Object.defineProperty(SurveyModel.prototype, \"locQuestionTitleTemplate\", {\n get: function () {\n return this.getLocalizableString(\"questionTitleTemplate\");\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getUpdatedQuestionTitle = function (question, title) {\n if (this.onGetQuestionTitle.isEmpty)\n return title;\n var options = { question: question, title: title };\n this.onGetQuestionTitle.fire(this, options);\n return options.title;\n };\n Object.defineProperty(SurveyModel.prototype, \"showPageNumbers\", {\n /**\n * Gets or sets whether the survey displays page numbers on pages titles.\n */\n get: function () {\n return this.getPropertyValue(\"showPageNumbers\", false);\n },\n set: function (value) {\n if (value === this.showPageNumbers)\n return;\n this.setPropertyValue(\"showPageNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showQuestionNumbers\", {\n /**\n * Gets or sets a value that specifies how the question numbers are displayed.\n *\n * The following options are available:\n *\n * - `on` - display question numbers\n * - `onpage` - display question numbers, start numbering on every page\n * - `off` - turn off the numbering for questions titles\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (value) {\n value = value.toLowerCase();\n value = value === \"onpage\" ? \"onPage\" : value;\n if (value === this.showQuestionNumbers)\n return;\n this.setPropertyValue(\"showQuestionNumbers\", value);\n this.updateVisibleIndexes();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showProgressBar\", {\n /**\n * Gets or sets the survey progress bar position.\n *\n * The following options are available:\n *\n * - `top` - show progress bar in the top\n * - `bottom` - show progress bar in the bottom\n * - `both` - show progress bar in both sides: top and bottom.\n */\n get: function () {\n return this.getPropertyValue(\"showProgressBar\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"showProgressBar\", newValue.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"progressBarType\", {\n /**\n * Gets or sets the type of info in the progress bar.\n *\n * The following options are available:\n *\n * - `pages` (default),\n * - `questions`,\n * - `correctQuestions`.\n */\n get: function () {\n return this.getPropertyValue(\"progressBarType\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"progressBarType\", newValue.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnTop\", {\n get: function () {\n return this.showProgressBar === \"top\" || this.showProgressBar === \"both\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowProgressBarOnBottom\", {\n get: function () {\n return this.showProgressBar === \"bottom\" || this.showProgressBar === \"both\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedTitle\", {\n /**\n * Returns the text/HTML that is rendered as a survey title.\n */\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionTitleLocation\", {\n /**\n * Gets or sets the question title location.\n *\n * The following options are available:\n *\n * - `bottom` - show a question title to bottom\n * - `left` - show a question title to left\n * - `top` - show a question title to top.\n *\n * > Some questions, for example matrixes, do not support 'left' value. The title for them will be displayed to the top.\n */\n get: function () {\n return this.getPropertyValue(\"questionTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionTitleLocation\", value.toLowerCase());\n if (!this.isLoadingFromJson) {\n this.updateElementCss();\n }\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.updateElementCss = function () {\n var pages = this.visiblePages;\n for (var i = 0; i < pages.length; i++) {\n pages[i].updateElementCss();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"questionErrorLocation\", {\n /**\n * Gets or sets the error message position.\n *\n * The following options are available:\n *\n * - `top` - to show question error(s) over the question,\n * - `bottom` - to show question error(s) under the question.\n */\n get: function () {\n return this.getPropertyValue(\"questionErrorLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionErrorLocation\", value.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionDescriptionLocation\", {\n /**\n * Gets or sets the question description position.\n *\n * The following options are available:\n *\n * - `underTitle` - show question description under the question title,\n * - `underInput` - show question description under the question input instead of question title.\n */\n get: function () {\n return this.getPropertyValue(\"questionDescriptionLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"questionDescriptionLocation\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"mode\", {\n /**\n * Gets or sets the survey edit mode.\n *\n * The following options are available:\n *\n * - `edit` (default) - make a survey editable,\n * - `display` - make a survey read-only.\n */\n get: function () {\n return this.getPropertyValue(\"mode\");\n },\n set: function (value) {\n value = value.toLowerCase();\n if (value == this.mode)\n return;\n if (value != \"edit\" && value != \"display\")\n return;\n this.setPropertyValue(\"mode\", value);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.onModeChanged = function () {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.setPropertyValue(\"isReadOnly\", page.isReadOnly);\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"data\", {\n /**\n * Gets or sets an object that stores the survey results/data. You can set it directly as `{ 'question name': questionValue, ... }`\n *\n * > If you set the `data` property after creating the survey, you may need to set the `currentPageNo` to `0`, if you are using `visibleIf` properties for questions/pages/panels to ensure that you are starting from the first page.\n * @see setValue\n * @see getValue\n * @see mergeData\n * @see currentPageNo\n */\n get: function () {\n var result = {};\n for (var key in this.valuesHash) {\n var dataValue = this.getDataValueCore(this.valuesHash, key);\n if (dataValue !== undefined) {\n result[key] = dataValue;\n }\n }\n this.setCalcuatedValuesIntoResult(result);\n return result;\n },\n set: function (data) {\n this.valuesHash = {};\n this.setDataCore(data);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Merge the values into survey.data. It works as survey.data, except it doesn't clean the existing data, but overrides them.\n * @param data data to merge. It should be an object {keyValue: Value, ...}\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.mergeData = function (data) {\n if (!data)\n return;\n this.setDataCore(data);\n };\n SurveyModel.prototype.setDataCore = function (data) {\n if (data) {\n for (var key in data) {\n this.setDataValueCore(this.valuesHash, key, data[key]);\n }\n }\n this.updateAllQuestionsValue();\n this.notifyAllQuestionsOnValueChanged();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.runConditions();\n };\n SurveyModel.prototype.setCalcuatedValuesIntoResult = function (result) {\n for (var i = 0; i < this.calculatedValues.length; i++) {\n var calValue = this.calculatedValues[i];\n if (calValue.includeIntoResult &&\n !!calValue.name &&\n this.getVariable(calValue.name) !== undefined) {\n result[calValue.name] = this.getVariable(calValue.name);\n }\n }\n };\n SurveyModel.prototype.getAllValues = function () {\n return this.data;\n };\n /**\n * Returns survey result data as an array of plain objects: with question `title`, `name`, `value`, and `displayValue`.\n *\n * For complex questions (like matrix, etc.) `isNode` flag is set to `true` and data contains array of nested objects (rows).\n *\n * Set `options.includeEmpty` to `false` if you want to skip empty answers.\n */\n SurveyModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n includeQuestionTypes: false,\n }; }\n var result = [];\n this.getAllQuestions().forEach(function (question) {\n var resultItem = question.getPlainData(options);\n if (!!resultItem) {\n result.push(resultItem);\n }\n });\n return result;\n };\n SurveyModel.prototype.getFilteredValues = function () {\n var values = {};\n for (var key in this.variablesHash)\n values[key] = this.variablesHash[key];\n for (var key in this.valuesHash)\n values[key] = this.getDataValueCore(this.valuesHash, key);\n values[\"conditionVersion\"] = ++this.conditionVersion;\n return values;\n };\n SurveyModel.prototype.getFilteredProperties = function () {\n return { survey: this };\n };\n SurveyModel.prototype.getDataValueCore = function (valuesHash, key) {\n return valuesHash[key];\n };\n SurveyModel.prototype.setDataValueCore = function (valuesHash, key, value) {\n valuesHash[key] = value;\n };\n SurveyModel.prototype.deleteDataValueCore = function (valuesHash, key) {\n delete valuesHash[key];\n };\n Object.defineProperty(SurveyModel.prototype, \"comments\", {\n // protected iterateDataValuesHash(func: (hash: any, key: any) => void) {\n // var keys: any[] = [];\n // for (var key in this.valuesHash) {\n // keys.push(key);\n // }\n // keys.forEach(key => func(this.valuesHash, key));\n // }\n /**\n * Returns all comments from the data.\n * @see data\n */\n get: function () {\n var result = {};\n for (var key in this.valuesHash) {\n if (key.indexOf(this.commentPrefix) > 0) {\n result[key] = this.getDataValueCore(this.valuesHash, key);\n }\n }\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePages\", {\n /**\n * Returns a list of visible pages. If all pages are visible, then this property returns the same list as the `pages` property.\n * @see pages\n * @see PageModel.visible\n * @see PageModel.visibleIf\n */\n get: function () {\n if (this.isDesignMode)\n return this.pages;\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].isVisible) {\n result.push(this.pages[i]);\n }\n }\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEmpty\", {\n /**\n * Returns `true` if the survey contains no pages. The survey is empty.\n */\n get: function () {\n return this.pages.length == 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"PageCount\", {\n /**\n * Deprecated. Use the `pageCount` property instead.\n */\n get: function () {\n return this.pageCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"pageCount\", {\n /**\n * Returns the survey page count.\n * @see visiblePageCount\n * @see pages\n */\n get: function () {\n return this.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"visiblePageCount\", {\n /**\n * Returns a number of visible pages within the survey.\n * @see pageCount\n * @see visiblePages\n */\n get: function () {\n return this.visiblePages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"startedPage\", {\n /**\n * Returns the started page. This property works if the `firstPageIsStarted` property is set to `true`.\n * @see firstPageIsStarted\n */\n get: function () {\n var page = this.firstPageIsStarted && this.pages.length > 0 ? this.pages[0] : null;\n if (!!page) {\n page.onFirstRendering();\n }\n return page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"currentPage\", {\n /**\n * Gets or sets the current survey page. If a survey is rendered, then this property returns a page that a user can see/edit.\n */\n get: function () {\n var vPages = this.visiblePages;\n if (this.currentPageValue != null) {\n if (vPages.indexOf(this.currentPageValue) < 0) {\n if (!this.onContainsPageCallback ||\n !this.onContainsPageCallback(this.currentPageValue)) {\n this.currentPage = null;\n }\n }\n }\n if (this.currentPageValue == null && vPages.length > 0) {\n this.currentPage = vPages[0];\n }\n return this.currentPageValue;\n },\n set: function (value) {\n var newPage = this.getPageByObject(value);\n if (!!value && !newPage)\n return;\n var vPages = this.visiblePages;\n if (newPage != null && vPages.indexOf(newPage) < 0)\n return;\n if (newPage == this.currentPageValue)\n return;\n var oldValue = this.currentPageValue;\n if (!this.currentPageChanging(newPage, oldValue))\n return;\n if (!!newPage) {\n newPage.onFirstRendering();\n }\n this.currentPageValue = newPage;\n if (!!newPage) {\n newPage.updateCustomWidgets();\n newPage.setWasShown(true);\n }\n this.locStrsChanged();\n this.currentPageChanged(newPage, oldValue);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getPageByObject = function (value) {\n if (!value)\n return null;\n if (value.getType && value.getType() == \"page\")\n return value;\n if (typeof value === \"string\" || value instanceof String)\n return this.getPageByName(String(value));\n if (!isNaN(value)) {\n var index = Number(value);\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return null;\n return vPages[index];\n }\n return value;\n };\n Object.defineProperty(SurveyModel.prototype, \"currentPageNo\", {\n /**\n * The zero-based index of the current page in the visible pages array.\n */\n get: function () {\n return this.visiblePages.indexOf(this.currentPage);\n },\n set: function (value) {\n var vPages = this.visiblePages;\n if (value < 0 || value >= vPages.length)\n return;\n this.currentPage = vPages[value];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOrder\", {\n /**\n * Gets or sets the question display order. Use this property to randomize questions. You can randomize questions on a specific page.\n *\n * The following options are available:\n *\n * - `random` - randomize questions\n * - `initial` - keep questions in the same order, as in a survey model.\n * @see SurveyPage.questionsOrder\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the input focus to the first question with the input field.\n */\n SurveyModel.prototype.focusFirstQuestion = function () {\n var page = this.currentPage;\n if (page) {\n page.scrollToTop();\n page.focusFirstQuestion();\n }\n };\n SurveyModel.prototype.scrollToTopOnPageChange = function () {\n var page = this.currentPage;\n if (!page)\n return;\n page.scrollToTop();\n if (this.focusFirstQuestionAutomatic) {\n page.focusFirstQuestion();\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"state\", {\n /**\n * Returns the current survey state:\n *\n * - `loading` - loading from the JSON,\n * - `completed` - a user has completed the survey,\n * - `starting` - the started page is showing,\n * - `running` - a user answers questions right now,\n * - `empty` - there is nothing to show in the current survey.\n */\n get: function () {\n if (this.isLoading)\n return \"loading\";\n if (this.isCompleted)\n return \"completed\";\n if (this.isCompletedBefore)\n return \"completedbefore\";\n if (!this.isDesignMode &&\n this.isEditMode &&\n this.isStartedState &&\n this.startedPage)\n return \"starting\";\n if (this.isShowingPreview)\n return this.currentPage ? \"preview\" : \"empty\";\n return this.currentPage ? \"running\" : \"empty\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleted\", {\n get: function () {\n return this.getPropertyValue(\"isCompleted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompleted\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowingPreview\", {\n get: function () {\n return this.getPropertyValue(\"isShowingPreview\", false);\n },\n set: function (val) {\n if (this.isShowingPreview == val)\n return;\n this.setPropertyValue(\"isShowingPreview\", val);\n this.onShowingPreviewChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isStartedState\", {\n get: function () {\n return this.getPropertyValue(\"isStartedState\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isStartedState\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompletedBefore\", {\n get: function () {\n return this.getPropertyValue(\"isCompletedBefore\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isCompletedBefore\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLoading\", {\n get: function () {\n return this.getPropertyValue(\"isLoading\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isLoading\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedState\", {\n get: function () {\n return this.completedStateValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"completedStateText\", {\n get: function () {\n return this.completedStateTextValue;\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.setCompletedState = function (value, text) {\n this.completedStateValue = value;\n if (!text) {\n if (value == \"saving\")\n text = this.getLocString(\"savingData\");\n if (value == \"error\")\n text = this.getLocString(\"savingDataError\");\n if (value == \"success\")\n text = this.getLocString(\"savingDataSuccess\");\n }\n this.completedStateTextValue = text;\n };\n /**\n * Clears the survey data and state. If the survey has a `completed` state, it will get a `running` state.\n * @param clearData clear the data\n * @param gotoFirstPage make the first page as a current page.\n * @see data\n * @see state\n * @see currentPage\n */\n SurveyModel.prototype.clear = function (clearData, gotoFirstPage) {\n if (clearData === void 0) { clearData = true; }\n if (gotoFirstPage === void 0) { gotoFirstPage = true; }\n if (clearData) {\n this.data = null;\n this.variablesHash = {};\n }\n this.timeSpent = 0;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].timeSpent = 0;\n this.pages[i].setWasShown(false);\n }\n this.isCompleted = false;\n this.isCompletedBefore = false;\n this.isLoading = false;\n this.isStartedState = this.firstPageIsStarted;\n if (gotoFirstPage && this.visiblePageCount > 0) {\n this.currentPage = this.visiblePages[0];\n }\n if (clearData) {\n this.updateValuesWithDefaults();\n }\n };\n SurveyModel.prototype.mergeValues = function (src, dest) {\n if (!dest || !src)\n return;\n for (var key in src) {\n var value = src[key];\n if (value && typeof value === \"object\") {\n if (!dest[key])\n dest[key] = {};\n this.mergeValues(value, dest[key]);\n }\n else {\n dest[key] = value;\n }\n }\n };\n SurveyModel.prototype.updateValuesWithDefaults = function () {\n if (this.isDesignMode || this.isLoading)\n return;\n for (var i = 0; i < this.pages.length; i++) {\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].updateValueWithDefaults();\n }\n }\n };\n SurveyModel.prototype.updateCustomWidgets = function (page) {\n if (!page)\n return;\n page.updateCustomWidgets();\n };\n SurveyModel.prototype.currentPageChanging = function (newValue, oldValue) {\n var options = {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n allowChanging: true,\n isNextPage: this.isNextPage(newValue, oldValue),\n isPrevPage: this.isPrevPage(newValue, oldValue),\n };\n this.onCurrentPageChanging.fire(this, options);\n return options.allowChanging;\n };\n SurveyModel.prototype.currentPageChanged = function (newValue, oldValue) {\n this.onCurrentPageChanged.fire(this, {\n oldCurrentPage: oldValue,\n newCurrentPage: newValue,\n isNextPage: this.isNextPage(newValue, oldValue),\n isPrevPage: this.isPrevPage(newValue, oldValue),\n });\n };\n SurveyModel.prototype.isNextPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex == oldValue.visibleIndex + 1;\n };\n SurveyModel.prototype.isPrevPage = function (newValue, oldValue) {\n if (!newValue || !oldValue)\n return false;\n return newValue.visibleIndex + 1 == oldValue.visibleIndex;\n };\n /**\n * Returns the progress that a user made while going through the survey.\n */\n SurveyModel.prototype.getProgress = function () {\n if (this.currentPage == null)\n return 0;\n if (this.progressBarType === \"questions\") {\n var questions = this.getQuestionsWithInput();\n var answeredQuestionsCount = questions.reduce(function (a, b) { return a + (b.isEmpty() ? 0 : 1); }, 0);\n return Math.ceil((answeredQuestionsCount * 100) / questions.length);\n }\n if (this.progressBarType === \"correctQuestions\") {\n var questions = this.getQuestionsWithInput();\n var correctAnswersCount = this.getCorrectedAnswerCount();\n return Math.ceil((correctAnswersCount * 100) / questions.length);\n }\n var index = this.visiblePages.indexOf(this.currentPage) + 1;\n return Math.ceil((index * 100) / this.visiblePageCount);\n };\n SurveyModel.prototype.getQuestionsWithInput = function () {\n var allQuestions = this.getAllQuestions();\n var questions = new Array();\n for (var i = 0; i < allQuestions.length; i++) {\n if (allQuestions[i].hasInput) {\n questions.push(allQuestions[i]);\n }\n }\n return questions;\n };\n Object.defineProperty(SurveyModel.prototype, \"isNavigationButtonsShowing\", {\n /**\n * Returns the navigation buttons (i.e., 'Prev', 'Next', or 'Complete') position.\n */\n get: function () {\n if (this.isDesignMode)\n return \"none\";\n var page = this.currentPage;\n if (!page)\n return \"none\";\n if (page.navigationButtonsVisibility === \"show\") {\n return \"bottom\";\n }\n if (page.navigationButtonsVisibility === \"hide\") {\n return \"none\";\n }\n return this.showNavigationButtons;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isEditMode\", {\n /**\n * Returns `true` if the survey is in edit mode.\n * @see mode\n */\n get: function () {\n return this.mode == \"edit\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCompleteButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n (!this.isShowPreviewBeforeComplete || this.state == \"preview\"));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"running\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isCancelPreviewButtonVisible\", {\n get: function () {\n return (this.isEditMode &&\n this.isShowPreviewBeforeComplete &&\n this.state == \"preview\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDisplayMode\", {\n /**\n * Returns `true` if the survey is in display mode or in preview mode.\n * @see mode\n * @see showPreviewBeforeComplete\n */\n get: function () {\n return this.mode == \"display\" || this.state == \"preview\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isUpdateValueTextOnTyping\", {\n get: function () {\n return this.textUpdateMode == \"onTyping\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isDesignMode\", {\n /**\n * Returns `true` if the survey is in design mode. It is used by SurveyJS Editor.\n * @see setDesignMode\n */\n get: function () {\n return this._isDesignMode;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the survey into design mode.\n * @param value use true to set the survey into the design mode.\n */\n SurveyModel.prototype.setDesignMode = function (value) {\n this._isDesignMode = value;\n this.onQuestionsOnPageModeChanged(\"standard\");\n };\n Object.defineProperty(SurveyModel.prototype, \"showInvisibleElements\", {\n /**\n * Gets or sets whether to show all elements in the survey, regardless their visibility. The default value is `false`.\n */\n get: function () {\n return this.getPropertyValue(\"showInvisibleElements\", false);\n },\n set: function (val) {\n var visPages = this.visiblePages;\n this.setPropertyValue(\"showInvisibleElements\", val);\n if (this.isLoadingFromJson)\n return;\n this.runConditions();\n this.updateAllElementsVisibility(visPages);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.updateAllElementsVisibility = function (visPages) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.updateElementVisibility();\n if (visPages.indexOf(page) > -1 != page.isVisible) {\n this.onPageVisibleChanged.fire(this, {\n page: page,\n visible: page.isVisible,\n });\n }\n }\n };\n Object.defineProperty(SurveyModel.prototype, \"areInvisibleElementsShowing\", {\n get: function () {\n return this.isDesignMode || this.showInvisibleElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"areEmptyElementsHidden\", {\n get: function () {\n return (this.isShowingPreview &&\n this.showPreviewBeforeComplete == \"showAnsweredQuestions\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasCookie\", {\n /**\n * Returns `true`, if a user has already completed the survey in this browser and there is a cookie about it. Survey goes to `completed` state if the function returns `true`.\n * @see cookieName\n * @see setCookie\n * @see deleteCookie\n * @see state\n */\n get: function () {\n if (!this.cookieName)\n return false;\n var cookies = document.cookie;\n return cookies && cookies.indexOf(this.cookieName + \"=true\") > -1;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Set the cookie with `cookieName` in user's browser. It is done automatically on survey complete if the `cookieName` property value is not empty.\n * @see cookieName\n * @see hasCookie\n * @see deleteCookie\n */\n SurveyModel.prototype.setCookie = function () {\n if (!this.cookieName)\n return;\n document.cookie =\n this.cookieName + \"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT\";\n };\n /**\n * Deletes the cookie with `cookieName` from the browser.\n * @see cookieName\n * @see hasCookie\n * @see setCookie\n */\n SurveyModel.prototype.deleteCookie = function () {\n if (!this.cookieName)\n return;\n document.cookie = this.cookieName + \"=;\";\n };\n /**\n * Navigates user to the next page.\n *\n * Returns `false` in the following cases:\n *\n * - if the current page is the last page.\n * - if the current page contains errors (for example, a required question is empty).\n * @see isCurrentPageHasErrors\n * @see prevPage\n * @see completeLastPage\n */\n SurveyModel.prototype.nextPage = function () {\n if (this.isLastPage)\n return false;\n return this.doCurrentPageComplete(false);\n };\n SurveyModel.prototype.hasErrorsOnNavigate = function (doComplete) {\n if (this.ignoreValidation || !this.isEditMode)\n return false;\n if (this.checkErrorsMode == \"onComplete\") {\n if (!this.isLastPage)\n return false;\n if (this.hasErrors(true, true))\n return true;\n }\n else {\n if (this.isCurrentPageHasErrors)\n return true;\n }\n return this.checkForAsyncQuestionValidation(doComplete);\n };\n SurveyModel.prototype.checkForAsyncQuestionValidation = function (doComplete) {\n var _this = this;\n this.clearAsyncValidationQuesitons();\n var questions = this.currentPage.questions;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isRunningValidators) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.onCompletedAsyncQuestionValidators(doComplete, hasErrors);\n };\n this.asyncValidationQuesitons.push(questions[i]);\n }\n }\n return this.asyncValidationQuesitons.length > 0;\n };\n SurveyModel.prototype.clearAsyncValidationQuesitons = function () {\n if (!!this.asyncValidationQuesitons) {\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n asynQuestions[i].onCompletedAsyncValidators = null;\n }\n }\n this.asyncValidationQuesitons = [];\n };\n SurveyModel.prototype.onCompletedAsyncQuestionValidators = function (doComplete, hasErrors) {\n if (hasErrors) {\n this.clearAsyncValidationQuesitons();\n return;\n }\n var asynQuestions = this.asyncValidationQuesitons;\n for (var i = 0; i < asynQuestions.length; i++) {\n if (asynQuestions[i].isRunningValidators)\n return;\n }\n this.doCurrentPageCompleteCore(doComplete);\n };\n Object.defineProperty(SurveyModel.prototype, \"isCurrentPageHasErrors\", {\n /**\n * Returns `true`, if the current page contains errors, for example, the required question is empty or a question validation is failed.\n * @see nextPage\n */\n get: function () {\n return this.checkIsCurrentPageHasErrors();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns `true`, if any of the survey pages contains errors.\n * @param fireCallback set it to `true`, to show errors in UI.\n * @param focusOnFirstError set it to `true` to focus on the first question that doesn't pass the validation and make the page, where the question is located, the current.\n */\n SurveyModel.prototype.hasErrors = function (fireCallback, focusOnFirstError) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (focusOnFirstError === void 0) { focusOnFirstError = false; }\n var visPages = this.visiblePages;\n var firstErrorPage = null;\n var res = false;\n for (var i = 0; i < visPages.length; i++) {\n if (visPages[i].hasErrors(fireCallback, focusOnFirstError)) {\n if (!firstErrorPage)\n firstErrorPage = visPages[i];\n res = true;\n }\n }\n if (focusOnFirstError && !!firstErrorPage) {\n this.currentPage = firstErrorPage;\n }\n return res;\n };\n /**\n * Checks whether survey elements (pages, panels, and questions) have unique question names.\n * You can check for unique names for individual page and panel (and all their elements) or a question.\n * If the parameter is not specified, then a survey checks that all its elements have unique names.\n * @param element page, panel or question, it is `null` by default, that means all survey elements will be checked\n */\n SurveyModel.prototype.ensureUniqueNames = function (element) {\n if (element === void 0) { element = null; }\n if (element == null) {\n for (var i = 0; i < this.pages.length; i++) {\n this.ensureUniqueName(this.pages[i]);\n }\n }\n else {\n this.ensureUniqueName(element);\n }\n };\n SurveyModel.prototype.ensureUniqueName = function (element) {\n if (element.isPage) {\n this.ensureUniquePageName(element);\n }\n if (element.isPanel) {\n this.ensureUniquePanelName(element);\n }\n if (element.isPage || element.isPanel) {\n var elements = element.elements;\n for (var i = 0; i < elements.length; i++) {\n this.ensureUniqueNames(elements[i]);\n }\n }\n else {\n this.ensureUniqueQuestionName(element);\n }\n };\n SurveyModel.prototype.ensureUniquePageName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPageByName(name);\n });\n };\n SurveyModel.prototype.ensureUniquePanelName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getPanelByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueQuestionName = function (element) {\n var _this = this;\n return this.ensureUniqueElementName(element, function (name) {\n return _this.getQuestionByName(name);\n });\n };\n SurveyModel.prototype.ensureUniqueElementName = function (element, getElementByName) {\n var existingElement = getElementByName(element.name);\n if (!existingElement || existingElement == element)\n return;\n var newName = this.getNewName(element.name);\n while (!!getElementByName(newName)) {\n var newName = this.getNewName(element.name);\n }\n element.name = newName;\n };\n SurveyModel.prototype.getNewName = function (name) {\n var pos = name.length;\n while (pos > 0 && name[pos - 1] >= \"0\" && name[pos - 1] <= \"9\") {\n pos--;\n }\n var base = name.substr(0, pos);\n var num = 0;\n if (pos < name.length) {\n num = parseInt(name.substr(pos));\n }\n num++;\n return base + num;\n };\n SurveyModel.prototype.checkIsCurrentPageHasErrors = function (isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n return this.checkIsPageHasErrors(this.currentPage, isFocuseOnFirstError);\n };\n SurveyModel.prototype.checkIsPageHasErrors = function (page, isFocuseOnFirstError) {\n if (isFocuseOnFirstError === void 0) { isFocuseOnFirstError = undefined; }\n if (isFocuseOnFirstError === undefined) {\n isFocuseOnFirstError = this.focusOnFirstError;\n }\n if (!page)\n return true;\n var res = page.hasErrors(true, isFocuseOnFirstError);\n this.fireValidatedErrorsOnPage(page);\n return res;\n };\n SurveyModel.prototype.fireValidatedErrorsOnPage = function (page) {\n if (this.onValidatedErrorsOnCurrentPage.isEmpty || !page)\n return;\n var questionsOnPage = page.questions;\n var questions = new Array();\n var errors = new Array();\n for (var i = 0; i < questionsOnPage.length; i++) {\n var q = questionsOnPage[i];\n if (q.errors.length > 0) {\n questions.push(q);\n for (var j = 0; j < q.errors.length; j++) {\n errors.push(q.errors[j]);\n }\n }\n }\n this.onValidatedErrorsOnCurrentPage.fire(this, {\n questions: questions,\n errors: errors,\n page: page,\n });\n };\n /**\n * Navigates user to a previous page. If the current page is the first page, `prevPage` returns `false`. `prevPage` does not perform any checks, required questions can be empty.\n * @see isFirstPage\n */\n SurveyModel.prototype.prevPage = function () {\n if (this.isFirstPage)\n return false;\n this.resetNavigationButton();\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index - 1];\n };\n /**\n * Completes the survey, if the current page is the last one. It returns `false` if the last page has errors.\n * If the last page has no errors, `completeLastPage` calls `doComplete` and returns `true`.\n * @see isCurrentPageHasErrors\n * @see nextPage\n * @see doComplete\n */\n SurveyModel.prototype.completeLastPage = function () {\n var res = this.doCurrentPageComplete(true);\n if (res) {\n this.cancelPreview();\n }\n return res;\n };\n SurveyModel.prototype.navigationMouseDown = function () {\n this.isNavigationButtonPressed = true;\n return true;\n };\n SurveyModel.prototype.resetNavigationButton = function () {\n this.isNavigationButtonPressed = false;\n };\n /**\n * Show preview for the survey. Go to the \"preview\" state\n * @see showPreviewBeforeComplete\n * @see cancelPreview\n * @see state\n */\n SurveyModel.prototype.showPreview = function () {\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(true))\n return false;\n this.isShowingPreview = true;\n return true;\n };\n /**\n * Canel preview and go back to the \"running\" state.\n * @param curPage - a new current page. If the parameter is underfined then the last page becomes current.\n * @see showPreviewBeforeComplete\n * @see showPreview\n * @see state\n */\n SurveyModel.prototype.cancelPreview = function (curPage) {\n if (curPage === void 0) { curPage = null; }\n if (!this.isShowingPreview)\n return;\n this.isShowingPreview = false;\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(curPage) && this.visiblePageCount > 0) {\n curPage = this.visiblePageCount - 1;\n }\n if (curPage !== null) {\n this.currentPage = curPage;\n }\n };\n SurveyModel.prototype.cancelPreviewByPage = function (panel) {\n var pageIndex = this.getVisiblePageIndexByRootPanel(panel);\n this.cancelPreview(pageIndex > -1 ? pageIndex : undefined);\n };\n SurveyModel.prototype.getVisiblePageIndexByRootPanel = function (panel) {\n if (!panel)\n return -1;\n var panels = this.getAllPanels();\n var index = 0;\n for (var i = 0; i < panels.length; i++) {\n if (panels[i].parent === this.currentPageValue) {\n if (panels[i] == panel)\n return index;\n index++;\n }\n }\n return -1;\n };\n SurveyModel.prototype.doCurrentPageComplete = function (doComplete) {\n this.resetNavigationButton();\n if (this.hasErrorsOnNavigate(doComplete))\n return false;\n return this.doCurrentPageCompleteCore(doComplete);\n };\n SurveyModel.prototype.doCurrentPageCompleteCore = function (doComplete) {\n if (this.doServerValidation())\n return false;\n if (doComplete) {\n this.doComplete();\n }\n else {\n this.doNextPage();\n }\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isSinglePage\", {\n /**\n * Obsolete use the `questionsOnPageMode` property instead.\n * @see questionsOnPageMode\n */\n get: function () {\n return this.questionsOnPageMode == \"singlePage\";\n },\n set: function (val) {\n this.questionsOnPageMode = val ? \"singlePage\" : \"standard\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"questionsOnPageMode\", {\n /**\n * Gets or sets a value that specifies how the survey combines questions, panels, and pages.\n *\n * The following options are available:\n *\n * - `singlePage` - combine all survey pages in a single page. Pages will be converted to panels.\n * - `questionPerPage` - show one question per page. Survey will create a separate page for every question.\n */\n get: function () {\n return this.getPropertyValue(\"questionsOnPageMode\", \"standard\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOnPageMode\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"firstPageIsStarted\", {\n /**\n * Gets or sets whether the first survey page is a start page. Set this property to `true`, to make the first page a starting page.\n * An end user cannot navigate to the start page and the start page does not affect a survey progress.\n */\n get: function () {\n return this.getPropertyValue(\"firstPageIsStarted\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"firstPageIsStarted\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.isPageStarted = function (page) {\n return (this.firstPageIsStarted && this.pages.length > 0 && this.pages[0] === page);\n };\n Object.defineProperty(SurveyModel.prototype, \"showPreviewBeforeComplete\", {\n /**\n * Set this property to \"showAllQuestions\" or \"showAnsweredQuestions\" to preview results to a user before he/she completes the survey.\n */\n get: function () {\n return this.getPropertyValue(\"showPreviewBeforeComplete\", \"noPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreviewBeforeComplete\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPreviewBeforeComplete\", {\n get: function () {\n var preview = this.showPreviewBeforeComplete;\n return preview == \"showAllQuestions\" || preview == \"showAnsweredQuestions\";\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.onFirstPageIsStartedChanged = function () {\n if (this.pages.length == 0)\n return;\n this.isStartedState = this.firstPageIsStarted;\n this.pageVisibilityChanged(this.pages[0], !this.firstPageIsStarted);\n };\n SurveyModel.prototype.onShowingPreviewChanged = function () {\n if (this.isDesignMode)\n return;\n if (this.isShowingPreview) {\n this.runningPages = this.pages.slice(0, this.pages.length);\n this.setupPagesForPageModes(true);\n }\n else {\n if (this.runningPages) {\n this.restoreOrigionalPages(this.runningPages);\n }\n this.runningPages = null;\n }\n this.updateAllElementsVisibility(this.pages);\n this.updateVisibleIndexes();\n this.currentPageNo = 0;\n };\n SurveyModel.prototype.onQuestionsOnPageModeChanged = function (oldValue) {\n if (this.isShowingPreview)\n return;\n if (this.questionsOnPageMode == \"standard\" || this.isDesignMode) {\n if (this.origionalPages) {\n this.restoreOrigionalPages(this.origionalPages);\n }\n this.origionalPages = null;\n }\n else {\n if (!oldValue || oldValue == \"standard\") {\n this.origionalPages = this.pages.slice(0, this.pages.length);\n }\n this.setupPagesForPageModes(this.isSinglePage);\n }\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.restoreOrigionalPages = function (originalPages) {\n this.questionHashesClear();\n this.pages.splice(0, this.pages.length);\n for (var i = 0; i < originalPages.length; i++) {\n this.pages.push(originalPages[i]);\n }\n };\n SurveyModel.prototype.setupPagesForPageModes = function (isSinglePage) {\n this.questionHashesClear();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n _super.prototype.startLoadingFromJson.call(this);\n var newPages = this.createPagesForQuestionOnPageMode(isSinglePage, startIndex);\n var deletedLen = this.pages.length - startIndex;\n this.pages.splice(startIndex, deletedLen);\n for (var i = 0; i < newPages.length; i++) {\n this.pages.push(newPages[i]);\n }\n _super.prototype.endLoadingFromJson.call(this);\n for (var i = 0; i < newPages.length; i++) {\n newPages[i].endLoadingFromJson();\n newPages[i].setSurveyImpl(this);\n }\n this.doElementsOnLoad();\n };\n SurveyModel.prototype.createPagesForQuestionOnPageMode = function (isSinglePage, startIndex) {\n if (isSinglePage) {\n return [this.createSinglePage(startIndex)];\n }\n return this.createPagesForEveryQuestion(startIndex);\n };\n SurveyModel.prototype.createSinglePage = function (startIndex) {\n var single = this.createNewPage(\"all\");\n single.setSurveyImpl(this);\n for (var i = startIndex; i < this.pages.length; i++) {\n var page = this.pages[i];\n var panel = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(\"panel\");\n single.addPanel(panel);\n var json = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(page);\n new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toObject(json, panel);\n if (!this.showPageTitles) {\n panel.title = \"\";\n }\n }\n return single;\n };\n SurveyModel.prototype.createPagesForEveryQuestion = function (startIndex) {\n var res = [];\n for (var i = startIndex; i < this.pages.length; i++) {\n var originalPage = this.pages[i];\n // Initialize randomization\n originalPage.setWasShown(true);\n for (var j = 0; j < originalPage.elements.length; j++) {\n var originalElement = originalPage.elements[j];\n var element = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(originalElement.getType());\n if (!element)\n continue;\n var jsonObj = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]();\n //Deserialize page properties only, excluding elements\n jsonObj.lightSerializing = true;\n var pageJson = jsonObj.toJsonObject(originalPage);\n var page = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(originalPage.getType());\n page.fromJSON(pageJson);\n page.name = \"page\" + (res.length + 1);\n page.setSurveyImpl(this);\n res.push(page);\n var json = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(originalElement);\n new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]().toObject(json, element);\n page.addElement(element);\n }\n }\n return res;\n };\n Object.defineProperty(SurveyModel.prototype, \"isFirstPage\", {\n /**\n * Gets whether the current page is the first one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n return this.visiblePages.indexOf(this.currentPage) == 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPrevButton\", {\n get: function () {\n if (this.isFirstPage || !this.showPrevButton)\n return false;\n var page = this.visiblePages[this.currentPageNo - 1];\n return this.getPageMaxTimeToFinish(page) <= 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isLastPage\", {\n /**\n * Gets whether the current page is the last one.\n */\n get: function () {\n if (this.currentPage == null)\n return true;\n var vPages = this.visiblePages;\n return vPages.indexOf(this.currentPage) == vPages.length - 1;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Completes the survey.\n *\n * Calling this function performs the following tasks:\n *\n * - writes cookie if the `cookieName` property is not empty\n * - sets the survey into `completed` state\n * - fires the `onComplete` event\n * - calls `sendResult` function.\n *\n * Calling the `doComplete` function does not perform any validation, unlike the `completeLastPage` function.\n * It calls `navigateToUrl` after calling `onComplete` event.\n * In case calling `options.showDataSaving` callback in the `onComplete` event, `navigateToUrl` is used on calling `options.showDataSavingSuccess` callback.\n * @see completeLastPage\n * @see cookieName\n * @see state\n * @see onComplete\n * @see surveyPostId\n * @see completeLastPage\n * @see navigateToUrl\n * @see navigateToUrlOnCondition\n */\n SurveyModel.prototype.doComplete = function (isCompleteOnTrigger) {\n if (isCompleteOnTrigger === void 0) { isCompleteOnTrigger = false; }\n var onCompletingOptions = {\n allowComplete: true,\n isCompleteOnTrigger: isCompleteOnTrigger,\n };\n this.onCompleting.fire(this, onCompletingOptions);\n if (!onCompletingOptions.allowComplete)\n return;\n var previousCookie = this.hasCookie;\n this.stopTimer();\n this.setCompleted();\n this.clearUnusedValues();\n this.setCookie();\n var self = this;\n var savingDataStarted = false;\n var onCompleteOptions = {\n isCompleteOnTrigger: isCompleteOnTrigger,\n showDataSaving: function (text) {\n savingDataStarted = true;\n self.setCompletedState(\"saving\", text);\n },\n showDataSavingError: function (text) {\n self.setCompletedState(\"error\", text);\n },\n showDataSavingSuccess: function (text) {\n self.setCompletedState(\"success\", text);\n self.navigateTo();\n },\n showDataSavingClear: function (text) {\n self.setCompletedState(\"\", \"\");\n },\n };\n this.onComplete.fire(this, onCompleteOptions);\n if (!previousCookie && this.surveyPostId) {\n this.sendResult();\n }\n if (!savingDataStarted) {\n this.navigateTo();\n }\n };\n /**\n * Starts the survey. Changes the survey mode from \"starting\" to \"running\". Call this function if your survey has a start page, otherwise this function does nothing.\n * @see firstPageIsStarted\n */\n SurveyModel.prototype.start = function () {\n if (!this.firstPageIsStarted)\n return false;\n if (this.checkIsPageHasErrors(this.startedPage, true))\n return false;\n this.isStartedState = false;\n this.startTimerFromUI();\n this.onStarted.fire(this, {});\n return true;\n };\n Object.defineProperty(SurveyModel.prototype, \"isValidatingOnServer\", {\n /**\n * Gets whether the question values on the current page are validating on the server at the current moment.\n * @see onServerValidateQuestions\n */\n get: function () {\n return this.getPropertyValue(\"isValidatingOnServer\", false);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.setIsValidatingOnServer = function (val) {\n if (val == this.isValidatingOnServer)\n return;\n this.setPropertyValue(\"isValidatingOnServer\", val);\n this.onIsValidatingOnServerChanged();\n };\n SurveyModel.prototype.onIsValidatingOnServerChanged = function () { };\n SurveyModel.prototype.doServerValidation = function () {\n if (!this.onServerValidateQuestions ||\n this.onServerValidateQuestions.isEmpty)\n return false;\n var self = this;\n var options = {\n data: {},\n errors: {},\n survey: this,\n complete: function () {\n self.completeServerValidation(options);\n },\n };\n for (var i = 0; i < this.currentPage.questions.length; i++) {\n var question = this.currentPage.questions[i];\n if (!question.visible)\n continue;\n var value = this.getValue(question.getValueName());\n if (!this.isValueEmpty(value))\n options.data[question.getValueName()] = value;\n }\n this.setIsValidatingOnServer(true);\n if (typeof this.onServerValidateQuestions === \"function\") {\n this.onServerValidateQuestions(this, options);\n }\n else {\n this.onServerValidateQuestions.fire(this, options);\n }\n return true;\n };\n SurveyModel.prototype.completeServerValidation = function (options) {\n this.setIsValidatingOnServer(false);\n if (!options && !options.survey)\n return;\n var self = options.survey;\n var hasErrors = false;\n if (options.errors) {\n for (var name in options.errors) {\n var question = self.getQuestionByName(name);\n if (question && question[\"errors\"]) {\n hasErrors = true;\n question[\"addError\"](new __WEBPACK_IMPORTED_MODULE_10__error__[\"a\" /* CustomError */](options.errors[name], this));\n }\n }\n }\n if (!hasErrors) {\n if (self.isLastPage)\n self.doComplete();\n else\n self.doNextPage();\n }\n };\n SurveyModel.prototype.doNextPage = function () {\n this.checkOnPageTriggers();\n if (!this.isCompleted) {\n if (this.sendResultOnPageNext) {\n this.sendResult(this.surveyPostId, this.clientId, true);\n }\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage);\n this.currentPage = vPages[index + 1];\n }\n else {\n this.doComplete(true);\n }\n };\n SurveyModel.prototype.setCompleted = function () {\n this.isCompleted = true;\n };\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedHtml\", {\n /**\n * Returns the HTML content for the complete page.\n * @see completedHtml\n */\n get: function () {\n var html = this.renderedCompletedHtml;\n if (html) {\n return this.processHtml(html);\n }\n return \"

\" + this.getLocString(\"completingSurvey\") + \"

\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedCompletedBeforeHtml\", {\n /**\n * Returns the HTML content, that is shown to a user that had completed the survey before.\n * @see completedHtml\n * @see cookieName\n */\n get: function () {\n if (this.completedBeforeHtml) {\n return this.processHtml(this.completedBeforeHtml);\n }\n return \"

\" + this.getLocString(\"completingSurveyBefore\") + \"

\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"processedLoadingHtml\", {\n /**\n * Returns the HTML content, that is shows when a survey loads the survey JSON.\n */\n get: function () {\n if (this.loadingHtml) {\n return this.processHtml(this.loadingHtml);\n }\n return \"

\" + this.getLocString(\"loadingSurvey\") + \"

\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"progressText\", {\n /**\n * Returns the text for the current progress.\n */\n get: function () {\n if (this.currentPage == null)\n return \"\";\n if (this.progressBarType === \"questions\") {\n var questions = this.getQuestionsWithInput();\n var answeredQuestionsCount = questions.reduce(function (a, b) { return a + (b.isEmpty() ? 0 : 1); }, 0);\n return this.getLocString(\"questionsProgressText\")[\"format\"](answeredQuestionsCount, questions.length);\n }\n if (this.progressBarType === \"correctQuestions\") {\n var questions = this.getQuestionsWithInput();\n var correctAnswersCount = this.getCorrectedAnswerCount();\n return this.getLocString(\"questionsProgressText\")[\"format\"](correctAnswersCount, questions.length);\n }\n var vPages = this.visiblePages;\n var index = vPages.indexOf(this.currentPage) + 1;\n return this.getLocString(\"progressText\")[\"format\"](index, vPages.length);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.afterRenderSurvey = function (htmlElement) {\n this.onAfterRenderSurvey.fire(this, {\n survey: this,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.updateQuestionCssClasses = function (question, cssClasses) {\n this.onUpdateQuestionCssClasses.fire(this, {\n question: question,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePanelCssClasses = function (panel, cssClasses) {\n this.onUpdatePanelCssClasses.fire(this, {\n panel: panel,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.updatePageCssClasses = function (page, cssClasses) {\n this.onUpdatePageCssClasses.fire(this, {\n page: page,\n cssClasses: cssClasses,\n });\n };\n SurveyModel.prototype.afterRenderPage = function (htmlElement) {\n if (this.onAfterRenderPage.isEmpty)\n return;\n this.onAfterRenderPage.fire(this, {\n page: this.currentPage,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderHeader = function (htmlElement) {\n if (this.onAfterRenderHeader.isEmpty)\n return;\n this.onAfterRenderHeader.fire(this, {\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestion = function (question, htmlElement) {\n this.onAfterRenderQuestion.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderQuestionInput = function (question, htmlElement) {\n if (this.onAfterRenderQuestionInput.isEmpty)\n return;\n var id = question.inputId;\n if (!!id && htmlElement.id !== id && typeof document !== \"undefined\") {\n var el = document.getElementById(id);\n if (!!el) {\n htmlElement = el;\n }\n }\n this.onAfterRenderQuestionInput.fire(this, {\n question: question,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.afterRenderPanel = function (panel, htmlElement) {\n this.onAfterRenderPanel.fire(this, {\n panel: panel,\n htmlElement: htmlElement,\n });\n };\n SurveyModel.prototype.matrixBeforeRowAdded = function (options) {\n this.onMatrixBeforeRowAdded.fire(this, options);\n };\n SurveyModel.prototype.matrixRowAdded = function (question, row) {\n this.onMatrixRowAdded.fire(this, { question: question, row: row });\n };\n SurveyModel.prototype.getQuestionByValueNameFromArray = function (valueName, name, index) {\n var questions = this.getQuestionsByValueNameCore(valueName);\n if (!questions)\n return;\n for (var i = 0; i < questions.length; i++) {\n var res = questions[i].getQuestionFromArray(name, index);\n if (!!res)\n return res;\n }\n return null;\n };\n SurveyModel.prototype.matrixRowRemoved = function (question, rowIndex, row) {\n this.onMatrixRowRemoved.fire(this, {\n question: question,\n rowIndex: rowIndex,\n row: row,\n });\n };\n SurveyModel.prototype.matrixAllowRemoveRow = function (question, rowIndex, row) {\n var options = {\n question: question,\n rowIndex: rowIndex,\n row: row,\n allow: true,\n };\n this.onMatrixAllowRemoveRow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.matrixCellCreated = function (question, options) {\n options.question = question;\n this.onMatrixCellCreated.fire(this, options);\n };\n SurveyModel.prototype.matrixAfterCellRender = function (question, options) {\n options.question = question;\n this.onMatrixAfterCellRender.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanged = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanged.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValueChanging = function (question, options) {\n options.question = question;\n this.onMatrixCellValueChanging.fire(this, options);\n };\n SurveyModel.prototype.matrixCellValidate = function (question, options) {\n options.question = question;\n this.onMatrixCellValidate.fire(this, options);\n return options.error ? new __WEBPACK_IMPORTED_MODULE_10__error__[\"a\" /* CustomError */](options.error, this) : null;\n };\n SurveyModel.prototype.dynamicPanelAdded = function (question) {\n this.onDynamicPanelAdded.fire(this, { question: question });\n };\n SurveyModel.prototype.dynamicPanelRemoved = function (question, panelIndex, panel) {\n var questions = !!panel ? panel.questions : [];\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearOnDeletingContainer();\n }\n this.onDynamicPanelRemoved.fire(this, {\n question: question,\n panelIndex: panelIndex,\n panel: panel,\n });\n };\n SurveyModel.prototype.dynamicPanelItemValueChanged = function (question, options) {\n options.question = question;\n this.onDynamicPanelItemValueChanged.fire(this, options);\n };\n SurveyModel.prototype.dragAndDropAllow = function (options) {\n options.allow = true;\n this.onDragDropAllow.fire(this, options);\n return options.allow;\n };\n SurveyModel.prototype.scrollElementToTop = function (element, question, page, id) {\n var options = {\n element: element,\n question: question,\n page: page,\n elementId: id,\n cancel: false,\n };\n this.onScrollingElementToTop.fire(this, options);\n if (!options.cancel) {\n __WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */].ScrollElementToTop(options.elementId);\n }\n };\n /**\n * Uploads a file to server.\n * @param question a file question object\n * @param name a question name\n * @param file an uploaded file\n * @param storeDataAsText set it to `true` to encode file content into the survey results\n * @param uploadingCallback a call back function to get the status on uploading the file\n */\n SurveyModel.prototype.uploadFiles = function (question, name, files, uploadingCallback) {\n if (this.onUploadFiles.isEmpty) {\n uploadingCallback(\"error\", files);\n }\n else {\n this.onUploadFiles.fire(this, {\n question: question,\n name: name,\n files: files || [],\n callback: uploadingCallback,\n });\n }\n if (this.surveyPostId) {\n this.uploadFilesCore(name, files, uploadingCallback);\n }\n };\n /**\n * Downloads a file from server\n * @param name a question name\n * @param fileValue a single file question value\n * @param callback a call back function to get the status on downloading the file and the downloaded file content\n */\n SurveyModel.prototype.downloadFile = function (questionName, fileValue, callback) {\n if (this.onDownloadFile.isEmpty) {\n !!callback && callback(\"success\", fileValue.content || fileValue);\n }\n this.onDownloadFile.fire(this, {\n name: questionName,\n content: fileValue.content || fileValue,\n fileValue: fileValue,\n callback: callback,\n });\n };\n /**\n * Clears files from server.\n * @param name a question name\n * @param value a file question value\n * @param callback a call back function to get the status of the clearing operation\n */\n SurveyModel.prototype.clearFiles = function (name, value, fileName, callback) {\n if (this.onClearFiles.isEmpty) {\n !!callback && callback(\"success\", value);\n }\n this.onClearFiles.fire(this, {\n name: name,\n value: value,\n fileName: fileName,\n callback: callback,\n });\n };\n SurveyModel.prototype.updateChoicesFromServer = function (question, choices, serverResult) {\n var options = {\n question: question,\n choices: choices,\n serverResult: serverResult,\n };\n this.onLoadChoicesFromServer.fire(this, options);\n return options.choices;\n };\n SurveyModel.prototype.createSurveyService = function () {\n return new __WEBPACK_IMPORTED_MODULE_8__dxSurveyService__[\"a\" /* dxSurveyService */]();\n };\n SurveyModel.prototype.uploadFilesCore = function (name, files, uploadingCallback) {\n var _this = this;\n var responses = [];\n files.forEach(function (file) {\n if (uploadingCallback)\n uploadingCallback(\"uploading\", file);\n _this.createSurveyService().sendFile(_this.surveyPostId, file, function (success, response) {\n if (success) {\n responses.push({ content: response, file: file });\n if (responses.length === files.length) {\n if (uploadingCallback)\n uploadingCallback(\"success\", responses);\n }\n }\n else {\n if (uploadingCallback)\n uploadingCallback(\"error\", { response: response, file: file });\n }\n });\n });\n };\n SurveyModel.prototype.getPage = function (index) {\n return this.pages[index];\n };\n /**\n * Adds an existing page to the survey.\n * @param page a newly added page\n * @see addNewPage\n */\n SurveyModel.prototype.addPage = function (page) {\n if (page == null)\n return;\n this.pages.push(page);\n this.updateVisibleIndexes();\n };\n /**\n * Creates a new page and adds it to a survey. Generates a new name if the `name` parameter is not specified.\n * @param name a page name\n * @see addPage\n */\n SurveyModel.prototype.addNewPage = function (name) {\n if (name === void 0) { name = null; }\n var page = this.createNewPage(name);\n this.addPage(page);\n return page;\n };\n /**\n * Removes a page from a survey.\n * @param page\n */\n SurveyModel.prototype.removePage = function (page) {\n var index = this.pages.indexOf(page);\n if (index < 0)\n return;\n this.pages.splice(index, 1);\n if (this.currentPageValue == page) {\n this.currentPage = this.pages.length > 0 ? this.pages[0] : null;\n }\n this.updateVisibleIndexes();\n };\n /**\n * Returns a question by its name.\n * @param name a question name\n * @param caseInsensitive\n * @see getQuestionByValueName\n */\n SurveyModel.prototype.getQuestionByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n if (!name)\n return null;\n if (caseInsensitive) {\n name = name.toLowerCase();\n }\n var hash = !!caseInsensitive\n ? this.questionHashes.namesInsensitive\n : this.questionHashes.names;\n var res = hash[name];\n if (!res)\n return null;\n return res[0];\n };\n /**\n * Returns a question by its value name\n * @param valueName a question name\n * @param caseInsensitive\n * @see getQuestionByName\n * @see Question.valueName\n */\n SurveyModel.prototype.getQuestionByValueName = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var res = this.getQuestionsByValueNameCore(valueName, caseInsensitive);\n return !!res ? res[0] : null;\n };\n SurveyModel.prototype.getQuestionsByValueNameCore = function (valueName, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var hash = !!caseInsensitive\n ? this.questionHashes.valueNamesInsensitive\n : this.questionHashes.valueNames;\n var res = hash[valueName];\n if (!res)\n return null;\n return res;\n };\n /**\n * Gets a list of questions by their names.\n * @param names an array of question names\n * @param caseInsensitive\n */\n SurveyModel.prototype.getQuestionsByNames = function (names, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var question = this.getQuestionByName(names[i], caseInsensitive);\n if (question)\n result.push(question);\n }\n return result;\n };\n /**\n * Returns a page on which an element (question or panel) is placed.\n * @param element Question or Panel\n */\n SurveyModel.prototype.getPageByElement = function (element) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n if (page.containsElement(element))\n return page;\n }\n return null;\n };\n /**\n * Returns a page on which a question is located.\n * @param question\n */\n SurveyModel.prototype.getPageByQuestion = function (question) {\n return this.getPageByElement(question);\n };\n /**\n * Returns a page by it's name.\n * @param name\n */\n SurveyModel.prototype.getPageByName = function (name) {\n for (var i = 0; i < this.pages.length; i++) {\n if (this.pages[i].name == name)\n return this.pages[i];\n }\n return null;\n };\n /**\n * Returns a list of pages by their names.\n * @param names a list of page names\n */\n SurveyModel.prototype.getPagesByNames = function (names) {\n var result = [];\n if (!names)\n return result;\n for (var i = 0; i < names.length; i++) {\n if (!names[i])\n continue;\n var page = this.getPageByName(names[i]);\n if (page)\n result.push(page);\n }\n return result;\n };\n /**\n * Returns a list of all questions in a survey.\n * @param visibleOnly set it `true`, if you want to get only visible questions\n */\n SurveyModel.prototype.getAllQuestions = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addQuestionsToList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n /**\n * Returns quiz questions. All visible questions that has input(s) widgets.\n * @see getQuizQuestionCount\n */\n SurveyModel.prototype.getQuizQuestions = function () {\n var result = new Array();\n var startIndex = this.firstPageIsStarted ? 1 : 0;\n for (var i = startIndex; i < this.pages.length; i++) {\n if (!this.pages[i].isVisible)\n continue;\n var questions = this.pages[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var q = questions[j];\n if (q.quizQuestionCount > 0) {\n result.push(q);\n }\n }\n }\n return result;\n };\n /**\n * Returns a panel by its name.\n * @param name a panel name\n * @param caseInsensitive\n * @see getQuestionByName\n */\n SurveyModel.prototype.getPanelByName = function (name, caseInsensitive) {\n if (caseInsensitive === void 0) { caseInsensitive = false; }\n var panels = this.getAllPanels();\n if (caseInsensitive)\n name = name.toLowerCase();\n for (var i = 0; i < panels.length; i++) {\n var panelName = panels[i].name;\n if (caseInsensitive)\n panelName = panelName.toLowerCase();\n if (panelName == name)\n return panels[i];\n }\n return null;\n };\n /**\n * Returns a list of all survey's panels.\n */\n SurveyModel.prototype.getAllPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].addPanelsIntoList(result, visibleOnly, includingDesignTime);\n }\n return result;\n };\n SurveyModel.prototype.createNewPage = function (name) {\n return new __WEBPACK_IMPORTED_MODULE_5__page__[\"a\" /* PageModel */](name);\n };\n SurveyModel.prototype.questionOnValueChanging = function (valueName, newValue) {\n if (this.onValueChanging.isEmpty)\n return newValue;\n var options = {\n name: valueName,\n question: this.getQuestionByValueName(valueName),\n value: newValue,\n oldValue: this.getValue(valueName),\n };\n this.onValueChanging.fire(this, options);\n return options.value;\n };\n SurveyModel.prototype.updateQuestionValue = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueNameCore(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n if (this.isTwoValueEquals(questions[i].value, newValue))\n continue;\n questions[i].updateValueFromSurvey(newValue);\n }\n }\n };\n SurveyModel.prototype.checkQuestionErrorOnValueChanged = function (question) {\n if (!this.isNavigationButtonPressed &&\n (this.checkErrorsMode == \"onValueChanged\" || question.errors.length > 0)) {\n var oldErrorCount = question.errors.length;\n question.hasErrors(true, { isOnValueChanged: true });\n if (!!question.page &&\n (oldErrorCount > 0 || question.errors.length > 0)) {\n this.fireValidatedErrorsOnPage(question.page);\n }\n }\n };\n SurveyModel.prototype.notifyQuestionOnValueChanged = function (valueName, newValue) {\n if (this.isLoadingFromJson)\n return;\n var questions = this.getQuestionsByValueNameCore(valueName);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n this.checkQuestionErrorOnValueChanged(question);\n question.onSurveyValueChanged(newValue);\n this.onValueChanged.fire(this, {\n name: valueName,\n question: question,\n value: newValue,\n });\n }\n }\n else {\n this.onValueChanged.fire(this, {\n name: valueName,\n question: null,\n value: newValue,\n });\n }\n this.notifyElementsOnAnyValueOrVariableChanged(valueName);\n };\n SurveyModel.prototype.notifyElementsOnAnyValueOrVariableChanged = function (name) {\n if (this.isEndLoadingFromJson === \"processing\")\n return;\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onAnyValueChanged(name);\n }\n if (!this.isEndLoadingFromJson) {\n this.locStrsChanged();\n }\n };\n SurveyModel.prototype.updateAllQuestionsValue = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var valName = q.getValueName();\n q.updateValueFromSurvey(this.getValue(valName));\n if (q.requireUpdateCommentValue) {\n q.updateCommentFromSurvey(this.getComment(valName));\n }\n }\n };\n SurveyModel.prototype.notifyAllQuestionsOnValueChanged = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].onSurveyValueChanged(this.getValue(questions[i].getValueName()));\n }\n };\n SurveyModel.prototype.checkOnPageTriggers = function () {\n var questions = this.getCurrentPageQuestions(true);\n var values = {};\n for (var i = 0; i < questions.length; i++) {\n var question = questions[i];\n var name = question.getValueName();\n values[name] = this.getValue(name);\n }\n this.checkTriggers(values, true);\n };\n SurveyModel.prototype.getCurrentPageQuestions = function (includeInvsible) {\n if (includeInvsible === void 0) { includeInvsible = false; }\n var result = [];\n var page = this.currentPage;\n if (!page)\n return result;\n for (var i = 0; i < page.questions.length; i++) {\n var question = page.questions[i];\n if ((!includeInvsible && !question.visible) || !question.name)\n continue;\n result.push(question);\n }\n return result;\n };\n SurveyModel.prototype.checkTriggers = function (key, isOnNextPage) {\n if (this.isCompleted ||\n this.triggers.length == 0 ||\n this.isTriggerIsRunning)\n return;\n this.isTriggerIsRunning = true;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n for (var i = 0; i < this.triggers.length; i++) {\n var trigger = this.triggers[i];\n if (trigger.isOnNextPage == isOnNextPage) {\n trigger.checkExpression(key, values, properties);\n }\n }\n this.isTriggerIsRunning = false;\n };\n SurveyModel.prototype.doElementsOnLoad = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].onSurveyLoad();\n }\n };\n SurveyModel.prototype.runConditions = function () {\n if (this.isCompleted || this.isEndLoadingFromJson === \"processing\")\n return;\n var pages = this.pages;\n var values = this.getFilteredValues();\n var properties = this.getFilteredProperties();\n var oldCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].resetCalculation();\n }\n for (var i = 0; i < this.calculatedValues.length; i++) {\n this.calculatedValues[i].doCalculation(this.calculatedValues, values, properties);\n }\n for (var i = 0; i < pages.length; i++) {\n pages[i].runCondition(values, properties);\n }\n this.checkIfNewPagesBecomeVisible(oldCurrentPageIndex);\n };\n SurveyModel.prototype.checkIfNewPagesBecomeVisible = function (oldCurrentPageIndex) {\n var newCurrentPageIndex = this.pages.indexOf(this.currentPageValue);\n if (newCurrentPageIndex <= oldCurrentPageIndex + 1)\n return;\n for (var i = oldCurrentPageIndex + 1; i < newCurrentPageIndex; i++) {\n if (this.pages[i].isVisible) {\n this.currentPage = this.pages[i];\n break;\n }\n }\n };\n /**\n * Sends a survey result to the [api.surveyjs.io](https://api.surveyjs.io) service.\n * @param postId [api.surveyjs.io](https://api.surveyjs.io) service postId\n * @param clientId Typically a customer e-mail or an identifier\n * @param isPartialCompleted Set it to `true` if the survey is not completed yet and the results are intermediate\n * @see surveyPostId\n * @see clientId\n */\n SurveyModel.prototype.sendResult = function (postId, clientId, isPartialCompleted) {\n if (postId === void 0) { postId = null; }\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n if (!this.isEditMode)\n return;\n if (isPartialCompleted && this.onPartialSend) {\n this.onPartialSend.fire(this, null);\n }\n if (!postId && this.surveyPostId) {\n postId = this.surveyPostId;\n }\n if (!postId)\n return;\n if (clientId) {\n this.clientId = clientId;\n }\n if (isPartialCompleted && !this.clientId)\n return;\n var self = this;\n if (this.surveyShowDataSaving) {\n this.setCompletedState(\"saving\", \"\");\n }\n this.createSurveyService().sendResult(postId, this.data, function (success, response, request) {\n if (self.surveyShowDataSaving) {\n if (success) {\n self.setCompletedState(\"success\", \"\");\n }\n else {\n self.setCompletedState(\"error\", \"\");\n }\n }\n self.onSendResult.fire(self, {\n success: success,\n response: response,\n request: request,\n });\n }, this.clientId, isPartialCompleted);\n };\n /**\n * Calls the [api.surveyjs.io](https://api.surveyjs.io) service and, on callback, fires the `onGetResult` event with all answers that your users made for a question.\n * @param resultId [api.surveyjs.io](https://api.surveyjs.io) service resultId\n * @param name The question name\n * @see onGetResult\n */\n SurveyModel.prototype.getResult = function (resultId, name) {\n var self = this;\n this.createSurveyService().getResult(resultId, name, function (success, data, dataList, response) {\n self.onGetResult.fire(self, {\n success: success,\n data: data,\n dataList: dataList,\n response: response,\n });\n });\n };\n /**\n * Loads the survey JSON from the [api.surveyjs.io](https://api.surveyjs.io) service.\n * If `clientId` is not `null` and a user had completed a survey before, the survey switches to `completedbefore` state.\n * @param surveyId [api.surveyjs.io](https://api.surveyjs.io) service surveyId\n * @param clientId users' indentifier, for example an e-mail or a unique customer id in your web application.\n * @see state\n * @see onLoadedSurveyFromService\n */\n SurveyModel.prototype.loadSurveyFromService = function (surveyId, cliendId) {\n if (surveyId === void 0) { surveyId = null; }\n if (cliendId === void 0) { cliendId = null; }\n if (surveyId) {\n this.surveyId = surveyId;\n }\n if (cliendId) {\n this.clientId = cliendId;\n }\n var self = this;\n this.isLoading = true;\n this.onLoadingSurveyFromService();\n if (cliendId) {\n this.createSurveyService().getSurveyJsonAndIsCompleted(this.surveyId, this.clientId, function (success, json, isCompleted, response) {\n self.isLoading = false;\n if (success) {\n self.isCompletedBefore = isCompleted == \"completed\";\n self.loadSurveyFromServiceJson(json);\n }\n });\n }\n else {\n this.createSurveyService().loadSurvey(this.surveyId, function (success, result, response) {\n self.isLoading = false;\n if (success) {\n self.loadSurveyFromServiceJson(result);\n }\n });\n }\n };\n SurveyModel.prototype.loadSurveyFromServiceJson = function (json) {\n if (!json)\n return;\n this.fromJSON(json);\n this.notifyAllQuestionsOnValueChanged();\n this.onLoadSurveyFromService();\n this.onLoadedSurveyFromService.fire(this, {});\n };\n SurveyModel.prototype.onLoadingSurveyFromService = function () { };\n SurveyModel.prototype.onLoadSurveyFromService = function () { };\n SurveyModel.prototype.updateVisibleIndexes = function () {\n if (this.isLoadingFromJson || !!this.isEndLoadingFromJson)\n return;\n this.updatePageVisibleIndexes(this.showPageNumbers);\n if (this.showQuestionNumbers == \"onPage\") {\n var visPages = this.visiblePages;\n for (var i = 0; i < visPages.length; i++) {\n visPages[i].setVisibleIndex(0);\n }\n }\n else {\n var index = this.showQuestionNumbers == \"on\" ? 0 : -1;\n for (var i = 0; i < this.pages.length; i++) {\n index += this.pages[i].setVisibleIndex(index);\n }\n }\n };\n SurveyModel.prototype.updatePageVisibleIndexes = function (showIndex) {\n var index = 0;\n for (var i = 0; i < this.pages.length; i++) {\n var isPageVisible = this.pages[i].isVisible;\n this.pages[i].visibleIndex = isPageVisible ? index++ : -1;\n this.pages[i].num =\n showIndex && isPageVisible ? this.pages[i].visibleIndex + 1 : -1;\n }\n };\n SurveyModel.prototype.fromJSON = function (json) {\n if (!json)\n return;\n this.questionHashesClear();\n this.jsonErrors = null;\n var jsonConverter = new __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"b\" /* JsonObject */]();\n jsonConverter.toObject(json, this);\n if (jsonConverter.errors.length > 0) {\n this.jsonErrors = jsonConverter.errors;\n }\n };\n SurveyModel.prototype.setJsonObject = function (jsonObj) {\n this.fromJSON(jsonObj);\n };\n SurveyModel.prototype.endLoadingFromJson = function () {\n this.isEndLoadingFromJson = \"processing\";\n this.isStartedState = this.firstPageIsStarted;\n this.onQuestionsOnPageModeChanged(\"standard\");\n _super.prototype.endLoadingFromJson.call(this);\n if (this.hasCookie) {\n this.doComplete();\n }\n this.doElementsOnLoad();\n this.isEndLoadingFromJson = \"conditions\";\n this.runConditions();\n this.notifyElementsOnAnyValueOrVariableChanged(\"\");\n this.isEndLoadingFromJson = null;\n this.updateVisibleIndexes();\n };\n SurveyModel.prototype.onBeforeCreating = function () { };\n SurveyModel.prototype.onCreating = function () { };\n SurveyModel.prototype.getProcessedTextValue = function (textValue) {\n this.getProcessedTextValueCore(textValue);\n if (!this.onProcessTextValue.isEmpty) {\n var wasEmpty = this.isValueEmpty(textValue.value);\n this.onProcessTextValue.fire(this, textValue);\n textValue.isExists =\n textValue.isExists || (wasEmpty && !this.isValueEmpty(textValue.value));\n }\n };\n SurveyModel.prototype.getProcessedTextValueCore = function (textValue) {\n var name = textValue.name.toLocaleLowerCase();\n if ([\"no\", \"require\", \"title\"].indexOf(name) !== -1) {\n return;\n }\n if (name === \"pageno\") {\n textValue.isExists = true;\n var page = this.currentPage;\n textValue.value = page != null ? this.visiblePages.indexOf(page) + 1 : 0;\n return;\n }\n if (name === \"pagecount\") {\n textValue.isExists = true;\n textValue.value = this.visiblePageCount;\n return;\n }\n if (name === \"locale\") {\n textValue.isExists = true;\n textValue.value = !!this.locale\n ? this.locale\n : __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].defaultLocale;\n return;\n }\n if (name === \"correctedanswers\" || name === \"correctedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getCorrectedAnswerCount();\n return;\n }\n if (name === \"incorrectedanswers\" || name === \"incorrectedanswercount\") {\n textValue.isExists = true;\n textValue.value = this.getInCorrectedAnswerCount();\n return;\n }\n if (name === \"questioncount\") {\n textValue.isExists = true;\n textValue.value = this.getQuizQuestionCount();\n return;\n }\n var firstName = new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]().getFirstName(name, this.data);\n var variable = this.getVariable(name);\n if (variable !== undefined) {\n textValue.isExists = true;\n textValue.value = variable;\n return;\n }\n if (!!firstName)\n firstName = firstName.toLowerCase();\n var question = this.getQuestionByValueName(firstName, true);\n if (question) {\n textValue.isExists = true;\n name = question.getValueName() + name.substr(firstName.length);\n name = name.toLocaleLowerCase();\n var values = {};\n values[firstName] = textValue.returnDisplayValue\n ? question.getDisplayValue(false, undefined)\n : question.value;\n textValue.value = new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]().getValue(name, values);\n return;\n }\n var value = this.getValue(textValue.name);\n if (value !== undefined) {\n textValue.isExists = true;\n textValue.value = value;\n }\n };\n SurveyModel.prototype.clearUnusedValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearUnusedValues();\n }\n if (this.clearInvisibleValues != \"none\") {\n this.clearInvisibleQuestionValues();\n }\n };\n SurveyModel.prototype.hasVisibleQuestionByValueName = function (valueName) {\n var questions = this.getQuestionsByValueNameCore(valueName);\n if (!questions)\n return false;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].isVisible)\n return true;\n }\n return false;\n };\n SurveyModel.prototype.questionCountByValueName = function (valueName) {\n var questions = this.getQuestionsByValueNameCore(valueName);\n return !!questions ? questions.length : 0;\n };\n SurveyModel.prototype.clearInvisibleQuestionValues = function () {\n var questions = this.getAllQuestions();\n for (var i = 0; i < questions.length; i++) {\n questions[i].clearValueIfInvisible();\n }\n };\n /**\n * Returns a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @see SetVariable\n */\n SurveyModel.prototype.getVariable = function (name) {\n if (!name)\n return null;\n name = name.toLowerCase();\n var res = this.variablesHash[name];\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(res))\n return res;\n if (name.indexOf(\".\") > -1 || name.indexOf(\"[\") > -1) {\n if (new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]().hasValue(name, this.variablesHash))\n return new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]().getValue(name, this.variablesHash);\n }\n return res;\n };\n /**\n * Sets a variable value. Variable, unlike values, are not stored in the survey results.\n * @param name A variable name\n * @param newValue A variable new value\n * @see GetVariable\n */\n SurveyModel.prototype.setVariable = function (name, newValue) {\n if (!name)\n return;\n name = name.toLowerCase();\n this.variablesHash[name] = newValue;\n this.notifyElementsOnAnyValueOrVariableChanged(name);\n this.runConditions();\n };\n //ISurvey data\n SurveyModel.prototype.getUnbindValue = function (value) {\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getUnbindValue(value);\n };\n /**\n * Returns a question value (answer) by a question's name.\n * @param name A question name\n * @see data\n * @see setValue\n */\n SurveyModel.prototype.getValue = function (name) {\n if (!name || name.length == 0)\n return null;\n var value = this.getDataValueCore(this.valuesHash, name);\n return this.getUnbindValue(value);\n };\n /**\n * Sets a question value (answer). It runs all triggers and conditions (`visibleIf` properties).\n *\n * Goes to the next page if `goNextPageAutomatic` is `true` and all questions on the current page are answered correctly.\n * @param name A question name\n * @param newValue A new question value\n * @see data\n * @see getValue\n * @see PageModel.visibleIf\n * @see Question.visibleIf\n * @see goNextPageAutomatic\n */\n SurveyModel.prototype.setValue = function (name, newQuestionValue, locNotification, allowNotifyValueChanged) {\n if (locNotification === void 0) { locNotification = false; }\n if (allowNotifyValueChanged === void 0) { allowNotifyValueChanged = true; }\n var newValue = newQuestionValue;\n if (allowNotifyValueChanged)\n newValue = this.questionOnValueChanging(name, newQuestionValue);\n if (this.isValueEqual(name, newValue) &&\n this.isTwoValueEquals(newValue, newQuestionValue))\n return;\n if (this.isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, name);\n }\n else {\n newValue = this.getUnbindValue(newValue);\n this.setDataValueCore(this.valuesHash, name, newValue);\n }\n this.updateQuestionValue(name, newValue);\n if (locNotification === true)\n return;\n var triggerKeys = {};\n triggerKeys[name] = newValue;\n this.checkTriggers(triggerKeys, false);\n this.runConditions();\n if (allowNotifyValueChanged)\n this.notifyQuestionOnValueChanged(name, newValue);\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n };\n SurveyModel.prototype.isValueEqual = function (name, newValue) {\n if (newValue === \"\" || newValue === undefined)\n newValue = null;\n var oldValue = this.getValue(name);\n if (oldValue === \"\" || oldValue === undefined)\n oldValue = null;\n if (newValue === null || oldValue === null)\n return newValue === oldValue;\n return this.isTwoValueEquals(newValue, oldValue);\n };\n SurveyModel.prototype.doOnPageAdded = function (page) {\n page.setSurveyImpl(this);\n if (!page.name)\n page.name = this.generateNewName(this.pages, \"page\");\n this.questionHashesPanelAdded(page);\n var options = { page: page };\n this.onPageAdded.fire(this, options);\n };\n SurveyModel.prototype.generateNewName = function (elements, baseName) {\n var keys = {};\n for (var i = 0; i < elements.length; i++)\n keys[elements[i][\"name\"]] = true;\n var index = 1;\n while (keys[baseName + index])\n index++;\n return baseName + index;\n };\n SurveyModel.prototype.tryGoNextPageAutomatic = function (name) {\n if (!!this.isEndLoadingFromJson ||\n !this.goNextPageAutomatic ||\n !this.currentPage)\n return;\n var question = this.getQuestionByValueName(name);\n if (!question ||\n (!!question &&\n (!question.visible || !question.supportGoNextPageAutomatic())))\n return;\n if (question.hasErrors(false) && !question.supportGoNextPageError())\n return;\n var questions = this.getCurrentPageQuestions();\n if (questions.indexOf(question) < 0)\n return;\n for (var i = 0; i < questions.length; i++) {\n if (questions[i].hasInput && questions[i].isEmpty())\n return;\n }\n if (!this.checkIsCurrentPageHasErrors(false)) {\n if (!this.isLastPage) {\n this.nextPage();\n }\n else {\n if (this.goNextPageAutomatic === true &&\n this.allowCompleteSurveyAutomatic) {\n this.completeLastPage();\n }\n }\n }\n };\n /**\n * Returns the comment value.\n * @param name A comment's name.\n * @see setComment\n */\n SurveyModel.prototype.getComment = function (name) {\n var result = this.data[name + this.commentPrefix];\n if (result == null)\n result = \"\";\n return result;\n };\n /**\n * Sets a comment value.\n * @param name A comment name.\n * @param newValue A new comment value.\n * @see getComment\n */\n SurveyModel.prototype.setComment = function (name, newValue, locNotification) {\n if (locNotification === void 0) { locNotification = false; }\n if (!newValue)\n newValue = \"\";\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(newValue, this.getComment(name)))\n return;\n var commentName = name + this.commentPrefix;\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(newValue)) {\n this.deleteDataValueCore(this.valuesHash, commentName);\n }\n else {\n this.setDataValueCore(this.valuesHash, commentName, newValue);\n }\n var questions = this.getQuestionsByValueNameCore(name);\n if (!!questions) {\n for (var i = 0; i < questions.length; i++) {\n questions[i].updateCommentFromSurvey(newValue);\n this.checkQuestionErrorOnValueChanged(questions[i]);\n }\n }\n if (locNotification !== \"text\") {\n this.tryGoNextPageAutomatic(name);\n }\n var question = this.getQuestionByName(name);\n if (question) {\n this.onValueChanged.fire(this, {\n name: commentName,\n question: question,\n value: newValue,\n });\n }\n };\n /**\n * Removes a value from the survey results.\n * @param {string} name The name of the value. Typically it is a question name.\n */\n SurveyModel.prototype.clearValue = function (name) {\n this.setValue(name, null);\n this.setComment(name, null);\n };\n Object.defineProperty(SurveyModel.prototype, \"clearValueOnDisableItems\", {\n /**\n * Gets or sets whether to clear value on disable items in checkbox, dropdown and radiogroup questions.\n * By default, values are not cleared on disabled the corresponded items. This property is not persisted in survey JSON and you have to set it in code.\n */\n get: function () {\n return this.getPropertyValue(\"clearValueOnDisableItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"clearValueOnDisableItems\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.questionVisibilityChanged = function (question, newValue) {\n this.updateVisibleIndexes();\n this.onVisibleChanged.fire(this, {\n question: question,\n name: question.name,\n visible: newValue,\n });\n if (question &&\n !question.visible &&\n this.clearInvisibleValues == \"onHidden\") {\n question.clearValue();\n }\n };\n SurveyModel.prototype.pageVisibilityChanged = function (page, newValue) {\n this.updateVisibleIndexes();\n this.onPageVisibleChanged.fire(this, { page: page, visible: newValue });\n };\n SurveyModel.prototype.panelVisibilityChanged = function (panel, newValue) {\n this.updateVisibleIndexes();\n this.onPanelVisibleChanged.fire(this, { panel: panel, visible: newValue });\n };\n SurveyModel.prototype.questionCreated = function (question) {\n this.onQuestionCreated.fire(this, { question: question });\n };\n SurveyModel.prototype.questionAdded = function (question, index, parentPanel, rootPanel) {\n if (!question.name) {\n question.name = this.generateNewName(this.getAllQuestions(false, true), \"question\");\n }\n if (!!question.page) {\n this.questionHashesAdded(question);\n }\n if (!this.isLoadingFromJson) {\n this.updateVisibleIndexes();\n }\n this.onQuestionAdded.fire(this, {\n question: question,\n name: question.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.questionRemoved = function (question) {\n this.questionHashesRemoved(question, question.name, question.getValueName());\n this.updateVisibleIndexes();\n this.onQuestionRemoved.fire(this, {\n question: question,\n name: question.name,\n });\n };\n SurveyModel.prototype.questionRenamed = function (question, oldName, oldValueName) {\n this.questionHashesRemoved(question, oldName, oldValueName);\n this.questionHashesAdded(question);\n };\n SurveyModel.prototype.questionHashesClear = function () {\n this.questionHashes.names = {};\n this.questionHashes.namesInsensitive = {};\n this.questionHashes.valueNames = {};\n this.questionHashes.valueNamesInsensitive = {};\n };\n SurveyModel.prototype.questionHashesPanelAdded = function (panel) {\n if (this.isLoadingFromJson)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n this.questionHashesAdded(questions[i]);\n }\n };\n SurveyModel.prototype.questionHashesAdded = function (question) {\n this.questionHashAddedCore(this.questionHashes.names, question, question.name);\n this.questionHashAddedCore(this.questionHashes.namesInsensitive, question, question.name.toLowerCase());\n this.questionHashAddedCore(this.questionHashes.valueNames, question, question.getValueName());\n this.questionHashAddedCore(this.questionHashes.valueNamesInsensitive, question, question.getValueName().toLowerCase());\n };\n SurveyModel.prototype.questionHashesRemoved = function (question, name, valueName) {\n if (!!name) {\n this.questionHashRemovedCore(this.questionHashes.names, question, name);\n this.questionHashRemovedCore(this.questionHashes.namesInsensitive, question, name.toLowerCase());\n }\n if (!!valueName) {\n this.questionHashRemovedCore(this.questionHashes.valueNames, question, valueName);\n this.questionHashRemovedCore(this.questionHashes.valueNamesInsensitive, question, valueName.toLowerCase());\n }\n };\n SurveyModel.prototype.questionHashAddedCore = function (hash, question, name) {\n var res = hash[name];\n if (!!res) {\n var res = hash[name];\n if (res.indexOf(question) < 0) {\n res.push(question);\n }\n }\n else {\n hash[name] = [question];\n }\n };\n SurveyModel.prototype.questionHashRemovedCore = function (hash, question, name) {\n var res = hash[name];\n if (!res)\n return;\n var index = res.indexOf(question);\n if (index > -1) {\n res.splice(index, 1);\n }\n if (res.length == 0) {\n delete hash[name];\n }\n };\n SurveyModel.prototype.panelAdded = function (panel, index, parentPanel, rootPanel) {\n if (!panel.name) {\n panel.name = this.generateNewName(this.getAllPanels(false, true), \"panel\");\n }\n this.questionHashesPanelAdded(panel);\n this.updateVisibleIndexes();\n this.onPanelAdded.fire(this, {\n panel: panel,\n name: panel.name,\n index: index,\n parentPanel: parentPanel,\n rootPanel: rootPanel,\n });\n };\n SurveyModel.prototype.panelRemoved = function (panel) {\n this.updateVisibleIndexes();\n this.onPanelRemoved.fire(this, { panel: panel, name: panel.name });\n };\n SurveyModel.prototype.validateQuestion = function (question) {\n if (this.onValidateQuestion.isEmpty)\n return null;\n var options = {\n name: question.name,\n question: question,\n value: question.value,\n error: null,\n };\n this.onValidateQuestion.fire(this, options);\n return options.error ? new __WEBPACK_IMPORTED_MODULE_10__error__[\"a\" /* CustomError */](options.error, this) : null;\n };\n SurveyModel.prototype.validatePanel = function (panel) {\n if (this.onValidatePanel.isEmpty)\n return null;\n var options = {\n name: panel.name,\n panel: panel,\n error: null,\n };\n this.onValidatePanel.fire(this, options);\n return options.error ? new __WEBPACK_IMPORTED_MODULE_10__error__[\"a\" /* CustomError */](options.error, this) : null;\n };\n SurveyModel.prototype.processHtml = function (html) {\n var options = { html: html };\n this.onProcessHtml.fire(this, options);\n return this.processText(options.html, true);\n };\n SurveyModel.prototype.processText = function (text, returnDisplayValue) {\n return this.processTextEx(text, returnDisplayValue, false).text;\n };\n SurveyModel.prototype.processTextEx = function (text, returnDisplayValue, doEncoding) {\n var res = {\n text: this.processTextCore(text, returnDisplayValue, doEncoding),\n hasAllValuesOnLastRun: true,\n };\n res.hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n return res;\n };\n SurveyModel.prototype.processTextCore = function (text, returnDisplayValue, doEncoding) {\n if (doEncoding === void 0) { doEncoding = false; }\n if (this.isDesignMode)\n return text;\n return this.textPreProcessor.process(text, returnDisplayValue, doEncoding);\n };\n SurveyModel.prototype.getSurveyMarkdownHtml = function (element, text) {\n var options = { element: element, text: text, html: null };\n this.onTextMarkdown.fire(this, options);\n return options.html;\n };\n /**\n * Returns an amount of corrected quiz answers.\n */\n SurveyModel.prototype.getCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(true);\n };\n /**\n * Returns quiz question number. It may be different from `getQuizQuestions.length` because some widgets like matrix may have several questions.\n * @see getQuizQuestions\n */\n SurveyModel.prototype.getQuizQuestionCount = function () {\n var questions = this.getQuizQuestions();\n var res = 0;\n for (var i = 0; i < questions.length; i++) {\n res += questions[i].quizQuestionCount;\n }\n return res;\n };\n /**\n * Returns an amount of incorrect quiz answers.\n */\n SurveyModel.prototype.getInCorrectedAnswerCount = function () {\n return this.getCorrectedAnswerCountCore(false);\n };\n SurveyModel.prototype.getCorrectedAnswerCountCore = function (isCorrect) {\n var questions = this.getQuizQuestions();\n var counter = 0;\n var options = {\n question: null,\n result: false,\n correctAnswers: 0,\n incorrectAnswers: 0,\n };\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n var quizQuestionCount = q.quizQuestionCount;\n options.question = q;\n options.correctAnswers = q.correctAnswerCount;\n options.incorrectAnswers = quizQuestionCount - options.correctAnswers;\n options.result = options.question.isAnswerCorrect();\n this.onIsAnswerCorrect.fire(this, options);\n if (isCorrect) {\n if (options.result || options.correctAnswers < quizQuestionCount) {\n var addCount = options.correctAnswers;\n if (addCount == 0 && options.result)\n addCount = 1;\n counter += addCount;\n }\n }\n else {\n if (!options.result || options.incorrectAnswers < quizQuestionCount) {\n counter += options.incorrectAnswers;\n }\n }\n }\n return counter;\n };\n SurveyModel.prototype.getCorrectedAnswers = function () {\n return this.getCorrectedAnswerCount();\n };\n SurveyModel.prototype.getInCorrectedAnswers = function () {\n return this.getInCorrectedAnswerCount();\n };\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanel\", {\n /**\n * Gets or sets a timer panel position. The timer panel displays information about how much time an end user spends on a survey/page.\n *\n * The available options:\n * - `top` - display timer panel in the top.\n * - `bottom` - display timer panel in the bottom.\n * - `none` - do not display a timer panel.\n *\n * If the value is not equal to 'none', the survey calls the `startTimer()` method on survey rendering.\n * @see showTimerPanelMode\n * @see startTimer\n * @see stopTimer\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanel\", \"none\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanel\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnTop\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isTimerPanelShowingOnBottom\", {\n get: function () {\n return this.isTimerStarted && this.showTimerPanel == \"bottom\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"showTimerPanelMode\", {\n /**\n * Gets or set a value that specifies whether the timer displays information for the page or for the entire survey.\n *\n * The available options:\n *\n * - `page` - show timer information for page\n * - `survey` - show timer information for survey\n *\n * Use the `onTimerPanelInfoText` event to change the default text.\n * @see showTimerPanel\n * @see onTimerPanelInfoText\n */\n get: function () {\n return this.getPropertyValue(\"showTimerPanelMode\", \"all\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanelMode\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"timerInfoText\", {\n get: function () {\n var options = { text: this.getTimerInfoText() };\n this.onTimerPanelInfoText.fire(this, options);\n var loc = new __WEBPACK_IMPORTED_MODULE_11__localizablestring__[\"a\" /* LocalizableString */](this, true);\n loc.text = options.text;\n return loc.textOrHtml;\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getTimerInfoText = function () {\n var page = this.currentPage;\n if (!page)\n return \"\";\n var pageSpent = this.getDisplayTime(page.timeSpent);\n var surveySpent = this.getDisplayTime(this.timeSpent);\n var pageLimitSec = this.getPageMaxTimeToFinish(page);\n var pageLimit = this.getDisplayTime(pageLimitSec);\n var surveyLimit = this.getDisplayTime(this.maxTimeToFinish);\n if (this.showTimerPanelMode == \"page\")\n return this.getTimerInfoPageText(page, pageSpent, pageLimit);\n if (this.showTimerPanelMode == \"survey\")\n return this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n if (this.showTimerPanelMode == \"all\") {\n if (pageLimitSec <= 0 && this.maxTimeToFinish <= 0) {\n return this.getLocString(\"timerSpentAll\")[\"format\"](pageSpent, surveySpent);\n }\n if (pageLimitSec > 0 && this.maxTimeToFinish > 0) {\n return this.getLocString(\"timerLimitAll\")[\"format\"](pageSpent, pageLimit, surveySpent, surveyLimit);\n }\n var pageText = this.getTimerInfoPageText(page, pageSpent, pageLimit);\n var surveyText = this.getTimerInfoSurveyText(surveySpent, surveyLimit);\n return pageText + \" \" + surveyText;\n }\n return \"\";\n };\n SurveyModel.prototype.getTimerInfoPageText = function (page, pageSpent, pageLimit) {\n return this.getPageMaxTimeToFinish(page) > 0\n ? this.getLocString(\"timerLimitPage\")[\"format\"](pageSpent, pageLimit)\n : this.getLocString(\"timerSpentPage\")[\"format\"](pageSpent, pageLimit);\n };\n SurveyModel.prototype.getTimerInfoSurveyText = function (surveySpent, surveyLimit) {\n return this.maxTimeToFinish > 0\n ? this.getLocString(\"timerLimitSurvey\")[\"format\"](surveySpent, surveyLimit)\n : this.getLocString(\"timerSpentSurvey\")[\"format\"](surveySpent, surveyLimit);\n };\n SurveyModel.prototype.getDisplayTime = function (val) {\n var min = Math.floor(val / 60);\n var sec = val % 60;\n var res = \"\";\n if (min > 0) {\n res += min + \" \" + this.getLocString(\"timerMin\");\n }\n if (res && sec == 0)\n return res;\n if (res)\n res += \" \";\n return res + sec + \" \" + this.getLocString(\"timerSec\");\n };\n /**\n * Starts a timer that will calculate how much time end-user spends on the survey or on pages.\n * @see stopTimer\n * @see timeSpent\n */\n SurveyModel.prototype.startTimer = function () {\n if (this.isTimerStarted || this.isDesignMode)\n return;\n var self = this;\n this.timerFunc = function () {\n self.doTimer();\n };\n this.isTimerStarted = true;\n __WEBPACK_IMPORTED_MODULE_13__surveytimer__[\"a\" /* SurveyTimer */].instance.start(this.timerFunc);\n };\n SurveyModel.prototype.startTimerFromUI = function () {\n if (this.showTimerPanel != \"none\" && this.state === \"running\") {\n this.startTimer();\n }\n };\n /**\n * Stops the timer.\n * @see startTimer\n * @see timeSpent\n */\n SurveyModel.prototype.stopTimer = function () {\n if (!this.isTimerStarted)\n return;\n this.isTimerStarted = false;\n __WEBPACK_IMPORTED_MODULE_13__surveytimer__[\"a\" /* SurveyTimer */].instance.stop(this.timerFunc);\n };\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinish\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a survey. If the value is 0 or less, an end user has no time limit to finish a survey.\n * @see startTimer\n * @see maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"maxTimeToFinishPage\", {\n /**\n * Gets or sets the maximum time in seconds that end user has to complete a page in the survey. If the value is 0 or less, an end user has no time limit.\n *\n * You may override this value for every page.\n * @see startTimer\n * @see maxTimeToFinish\n * @see PageModel.maxTimeToFinish\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinishPage\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinishPage\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyModel.prototype.getPageMaxTimeToFinish = function (page) {\n if (!page || page.maxTimeToFinish < 0)\n return 0;\n return page.maxTimeToFinish > 0\n ? page.maxTimeToFinish\n : this.maxTimeToFinishPage;\n };\n SurveyModel.prototype.doTimer = function () {\n var page = this.currentPage;\n if (page) {\n page.timeSpent = page.timeSpent + 1;\n }\n this.timeSpent = this.timeSpent + 1;\n this.onTimer.fire(this, {});\n if (this.maxTimeToFinish > 0 && this.maxTimeToFinish == this.timeSpent) {\n this.completeLastPage();\n }\n if (page) {\n var pageLimit = this.getPageMaxTimeToFinish(page);\n if (pageLimit > 0 && pageLimit == page.timeSpent) {\n if (this.isLastPage) {\n this.completeLastPage();\n }\n else {\n this.nextPage();\n }\n }\n }\n };\n //ISurveyImplementor\n SurveyModel.prototype.geSurveyData = function () {\n return this;\n };\n SurveyModel.prototype.getSurvey = function () {\n return this;\n };\n SurveyModel.prototype.getTextProcessor = function () {\n return this;\n };\n //ISurveyTriggerOwner\n SurveyModel.prototype.getObjects = function (pages, questions) {\n var result = [];\n Array.prototype.push.apply(result, this.getPagesByNames(pages));\n Array.prototype.push.apply(result, this.getQuestionsByNames(questions));\n return result;\n };\n SurveyModel.prototype.setTriggerValue = function (name, value, isVariable) {\n if (!name)\n return;\n if (isVariable) {\n this.setVariable(name, value);\n }\n else {\n var processor = new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]();\n var firstName = processor.getFirstName(name);\n if (firstName == name) {\n this.setValue(name, value);\n }\n else {\n if (!this.getValue(firstName))\n return;\n var data = this.getUnbindValue(this.getFilteredValues());\n processor.setValue(data, name, value);\n this.setValue(firstName, data[firstName]);\n }\n }\n };\n SurveyModel.prototype.copyTriggerValue = function (name, fromName) {\n if (!name || !fromName)\n return;\n var processor = new __WEBPACK_IMPORTED_MODULE_7__conditionProcessValue__[\"a\" /* ProcessValue */]();\n var value = processor.getValue(fromName, this.getFilteredValues());\n this.setTriggerValue(name, value, false);\n };\n SurveyModel.prototype.focusQuestion = function (name) {\n var question = this.getQuestionByName(name, true);\n if (!question || !question.isVisible || !question.page)\n return false;\n this.currentPage = question.page;\n setTimeout(function () {\n question.focus(), 1;\n });\n return true;\n };\n /**\n * Use this method to dispose survey model properly.\n */\n SurveyModel.prototype.dispose = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].dispose();\n }\n this.pages.splice(0, this.pages.length);\n };\n SurveyModel.stylesManager = null;\n SurveyModel.platform = \"unknown\";\n return SurveyModel;\n}(__WEBPACK_IMPORTED_MODULE_3__base__[\"a\" /* Base */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"survey\", [\n {\n name: \"locale\",\n choices: function () {\n return __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].getLocales();\n },\n onGetValue: function (obj) {\n return obj.locale == __WEBPACK_IMPORTED_MODULE_9__surveyStrings__[\"a\" /* surveyLocalization */].defaultLocale ? null : obj.locale;\n },\n },\n { name: \"title\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\n { name: \"logo\", serializationProperty: \"locLogo\" },\n { name: \"logoWidth:number\", default: 300, minValue: 0 },\n { name: \"logoHeight:number\", default: 200, minValue: 0 },\n {\n name: \"logoFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n {\n name: \"logoPosition\",\n default: \"left\",\n choices: [\"none\", \"left\", \"right\", \"top\", \"bottom\"],\n },\n { name: \"focusFirstQuestionAutomatic:boolean\", default: true },\n { name: \"focusOnFirstError:boolean\", default: true },\n { name: \"completedHtml:html\", serializationProperty: \"locCompletedHtml\" },\n {\n name: \"completedBeforeHtml:html\",\n serializationProperty: \"locCompletedBeforeHtml\",\n },\n {\n name: \"completedHtmlOnCondition:htmlconditions\",\n className: \"htmlconditionitem\",\n },\n { name: \"loadingHtml:html\", serializationProperty: \"locLoadingHtml\" },\n { name: \"pages:surveypages\", className: \"page\" },\n {\n name: \"questions\",\n alternativeName: \"elements\",\n baseClassName: \"question\",\n visible: false,\n isLightSerializable: false,\n onGetValue: function (obj) {\n return null;\n },\n onSetValue: function (obj, value, jsonConverter) {\n var page = obj.addNewPage(\"\");\n jsonConverter.toObject({ questions: value }, page);\n },\n },\n {\n name: \"triggers:triggers\",\n baseClassName: \"surveytrigger\",\n classNamePart: \"trigger\",\n },\n {\n name: \"calculatedValues:calculatedvalues\",\n className: \"calculatedvalue\",\n },\n { name: \"surveyId\", visible: false },\n { name: \"surveyPostId\", visible: false },\n { name: \"surveyShowDataSaving:boolean\", visible: false },\n \"cookieName\",\n \"sendResultOnPageNext:boolean\",\n {\n name: \"showNavigationButtons\",\n default: \"bottom\",\n choices: [\"none\", \"top\", \"bottom\", \"both\"],\n },\n { name: \"showPrevButton:boolean\", default: true },\n { name: \"showTitle:boolean\", default: true },\n { name: \"showPageTitles:boolean\", default: true },\n { name: \"showCompletedPage:boolean\", default: true },\n \"navigateToUrl\",\n {\n name: \"navigateToUrlOnCondition:urlconditions\",\n className: \"urlconditionitem\",\n },\n {\n name: \"questionsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"showPageNumbers:boolean\",\n {\n name: \"showQuestionNumbers\",\n default: \"on\",\n choices: [\"on\", \"onPage\", \"off\"],\n },\n {\n name: \"questionTitleLocation\",\n default: \"top\",\n choices: [\"top\", \"bottom\", \"left\"],\n },\n {\n name: \"questionDescriptionLocation\",\n default: \"underTitle\",\n choices: [\"underInput\", \"underTitle\"],\n },\n { name: \"questionErrorLocation\", default: \"top\", choices: [\"top\", \"bottom\"] },\n {\n name: \"showProgressBar\",\n default: \"off\",\n choices: [\"off\", \"top\", \"bottom\", \"both\"],\n },\n {\n name: \"progressBarType\",\n default: \"pages\",\n choices: [\"pages\", \"questions\", \"correctQuestions\"],\n },\n { name: \"mode\", default: \"edit\", choices: [\"edit\", \"display\"] },\n { name: \"storeOthersAsComment:boolean\", default: true },\n { name: \"maxTextLength:number\", default: 0, minValue: 0 },\n { name: \"maxOthersLength:number\", default: 0, minValue: 0 },\n \"goNextPageAutomatic:boolean\",\n {\n name: \"clearInvisibleValues\",\n default: \"onComplete\",\n choices: [\"none\", \"onComplete\", \"onHidden\"],\n },\n {\n name: \"checkErrorsMode\",\n default: \"onNextPage\",\n choices: [\"onNextPage\", \"onValueChanged\", \"onComplete\"],\n },\n {\n name: \"textUpdateMode\",\n default: \"onBlur\",\n choices: [\"onBlur\", \"onTyping\"],\n },\n { name: \"startSurveyText\", serializationProperty: \"locStartSurveyText\" },\n { name: \"pagePrevText\", serializationProperty: \"locPagePrevText\" },\n { name: \"pageNextText\", serializationProperty: \"locPageNextText\" },\n { name: \"completeText\", serializationProperty: \"locCompleteText\" },\n { name: \"previewText\", serializationProperty: \"locPreviewText\" },\n { name: \"editText\", serializationProperty: \"locEditText\" },\n { name: \"requiredText\", default: \"*\" },\n {\n name: \"questionStartIndex\",\n visibleIf: function (survey) {\n return !survey || survey.showQuestionNumbers !== \"off\";\n },\n },\n {\n name: \"questionTitlePattern\",\n default: \"numTitleRequire\",\n dependsOn: [\"questionStartIndex\", \"requiredText\"],\n choices: function (obj) {\n if (!obj)\n return [];\n return obj.getQuestionTitlePatternOptions();\n },\n },\n {\n name: \"questionTitleTemplate\",\n visible: false,\n isSerializable: false,\n serializationProperty: \"locQuestionTitleTemplate\",\n },\n { name: \"firstPageIsStarted:boolean\", default: false },\n {\n name: \"isSinglePage:boolean\",\n default: false,\n visible: false,\n isSerializable: false,\n },\n {\n name: \"questionsOnPageMode\",\n default: \"standard\",\n choices: [\"singlePage\", \"standard\", \"questionPerPage\"],\n },\n {\n name: \"showPreviewBeforeComplete\",\n default: \"noPreview\",\n choices: [\"noPreview\", \"showAllQuestions\", \"showAnsweredQuestions\"],\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 },\n { name: \"maxTimeToFinishPage:number\", default: 0, minValue: 0 },\n {\n name: \"showTimerPanel\",\n default: \"none\",\n choices: [\"none\", \"top\", \"bottom\"],\n },\n {\n name: \"showTimerPanelMode\",\n default: \"all\",\n choices: [\"all\", \"page\", \"survey\"],\n },\n]);\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__settings__ = __webpack_require__(10);\n/* unused harmony export compareVersions */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return confirmAction; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return detectIEOrEdge; });\n/* unused harmony export detectIEBrowser */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return loadFileFromBase64; });\n/* unused harmony export isMobile */\n\nfunction compareVersions(a, b) {\n var i, diff;\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n var l = Math.min(segmentsA.length, segmentsB.length);\n for (i = 0; i < l; i++) {\n diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10);\n if (diff) {\n return diff;\n }\n }\n return segmentsA.length - segmentsB.length;\n}\nfunction confirmAction(message) {\n if (!!__WEBPACK_IMPORTED_MODULE_0__settings__[\"a\" /* settings */] && !!__WEBPACK_IMPORTED_MODULE_0__settings__[\"a\" /* settings */].confirmActionFunc)\n return __WEBPACK_IMPORTED_MODULE_0__settings__[\"a\" /* settings */].confirmActionFunc(message);\n return confirm(message);\n}\nfunction detectIEBrowser() {\n var ua = window.navigator.userAgent;\n var oldIe = ua.indexOf(\"MSIE \");\n var elevenIe = ua.indexOf(\"Trident/\");\n return oldIe > -1 || elevenIe > -1;\n}\nfunction detectIEOrEdge() {\n if (typeof detectIEOrEdge.isIEOrEdge == \"undefined\") {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n var trident = ua.indexOf(\"Trident/\");\n var edge = ua.indexOf(\"Edge/\");\n detectIEOrEdge.isIEOrEdge = edge > 0 || trident > 0 || msie > 0;\n }\n return detectIEOrEdge.isIEOrEdge;\n}\nfunction loadFileFromBase64(b64Data, fileName) {\n var byteString = atob(b64Data.split(\",\")[1]);\n // separate out the mime component\n var mimeString = b64Data.split(\",\")[0].split(\":\")[1].split(\";\")[0];\n // write the bytes of the string to an ArrayBuffer\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n // write the ArrayBuffer to a blob, and you're done\n var bb = new Blob([ab], { type: mimeString });\n if (window.navigator && window.navigator.msSaveBlob) {\n window.navigator.msSaveOrOpenBlob(bb, fileName);\n }\n}\nfunction isMobile() {\n return typeof window.orientation !== \"undefined\";\n}\n\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return ValidatorResult; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return SurveyValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ValidatorRunner; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return NumericValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return TextValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return AnswerCountValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return RegexValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return EmailValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return ExpressionValidator; });\n\n\n\n\n\n\n\nvar ValidatorResult = /** @class */ (function () {\n function ValidatorResult(value, error) {\n if (error === void 0) { error = null; }\n this.value = value;\n this.error = error;\n }\n return ValidatorResult;\n}());\n\n/**\n * Base SurveyJS validator class.\n */\nvar SurveyValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyValidator, _super);\n function SurveyValidator() {\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"text\", _this, true);\n return _this;\n }\n Object.defineProperty(SurveyValidator.prototype, \"text\", {\n get: function () {\n return this.getLocalizableStringText(\"text\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"text\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"locText\", {\n get: function () {\n return this.getLocalizableString(\"text\");\n },\n enumerable: true,\n configurable: true\n });\n SurveyValidator.prototype.getErrorText = function (name) {\n if (this.text)\n return this.text;\n return this.getDefaultErrorText(name);\n };\n SurveyValidator.prototype.getDefaultErrorText = function (name) {\n return \"\";\n };\n SurveyValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n return null;\n };\n Object.defineProperty(SurveyValidator.prototype, \"isRunning\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyValidator.prototype, \"isAsync\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n SurveyValidator.prototype.getLocale = function () {\n return !!this.errorOwner ? this.errorOwner.getLocale() : \"\";\n };\n SurveyValidator.prototype.getMarkdownHtml = function (text) {\n return !!this.errorOwner ? this.errorOwner.getMarkdownHtml(text) : null;\n };\n SurveyValidator.prototype.getProcessedText = function (text) {\n return !!this.errorOwner ? this.errorOwner.getProcessedText(text) : text;\n };\n SurveyValidator.prototype.createCustomError = function (name) {\n return new __WEBPACK_IMPORTED_MODULE_2__error__[\"a\" /* CustomError */](this.getErrorText(name), this.errorOwner);\n };\n SurveyValidator.prototype.toString = function () {\n var res = this.getType().replace(\"validator\", \"\");\n if (!!this.text) {\n res += \", \" + this.text;\n }\n return res;\n };\n return SurveyValidator;\n}(__WEBPACK_IMPORTED_MODULE_1__base__[\"a\" /* Base */]));\n\nvar ValidatorRunner = /** @class */ (function () {\n function ValidatorRunner() {\n }\n ValidatorRunner.prototype.run = function (owner) {\n var _this = this;\n var res = [];\n var values = null;\n var properties = null;\n this.prepareAsyncValidators();\n var asyncResults = [];\n var validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n if (!values && validator.isValidateAllValues) {\n values = owner.getDataFilteredValues();\n properties = owner.getDataFilteredProperties();\n }\n if (validator.isAsync) {\n this.asyncValidators.push(validator);\n validator.onAsyncCompleted = function (result) {\n if (!!result && !!result.error)\n asyncResults.push(result.error);\n if (!_this.onAsyncCompleted)\n return;\n for (var i = 0; i < _this.asyncValidators.length; i++) {\n if (_this.asyncValidators[i].isRunning)\n return;\n }\n _this.onAsyncCompleted(asyncResults);\n };\n }\n }\n validators = owner.getValidators();\n for (var i = 0; i < validators.length; i++) {\n var validator = validators[i];\n var validatorResult = validator.validate(owner.validatedValue, owner.getValidatorTitle(), values, properties);\n if (!!validatorResult && !!validatorResult.error) {\n res.push(validatorResult.error);\n }\n }\n if (this.asyncValidators.length == 0 && !!this.onAsyncCompleted)\n this.onAsyncCompleted([]);\n return res;\n };\n ValidatorRunner.prototype.prepareAsyncValidators = function () {\n if (!!this.asyncValidators) {\n for (var i = 0; i < this.asyncValidators.length; i++) {\n this.asyncValidators[i].onAsyncCompleted = null;\n }\n }\n this.asyncValidators = [];\n };\n return ValidatorRunner;\n}());\n\n/**\n * Validate numeric values.\n */\nvar NumericValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(NumericValidator, _super);\n function NumericValidator(minValue, maxValue) {\n if (minValue === void 0) { minValue = null; }\n if (maxValue === void 0) { maxValue = null; }\n var _this = _super.call(this) || this;\n _this.minValue = minValue;\n _this.maxValue = maxValue;\n return _this;\n }\n NumericValidator.prototype.getType = function () {\n return \"numericvalidator\";\n };\n NumericValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(value))\n return null;\n if (!__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isNumber(value)) {\n return new ValidatorResult(null, new __WEBPACK_IMPORTED_MODULE_2__error__[\"d\" /* RequreNumericError */](null, this.errorOwner));\n }\n var result = new ValidatorResult(parseFloat(value));\n if (this.minValue !== null && this.minValue > result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n if (this.maxValue !== null && this.maxValue < result.value) {\n result.error = this.createCustomError(name);\n return result;\n }\n return typeof value === \"number\" ? null : result;\n };\n NumericValidator.prototype.getDefaultErrorText = function (name) {\n var vName = name ? name : __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"value\");\n if (this.minValue !== null && this.maxValue !== null) {\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"numericMinMax\")[\"format\"](vName, this.minValue, this.maxValue);\n }\n else {\n if (this.minValue !== null) {\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"numericMin\")[\"format\"](vName, this.minValue);\n }\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"numericMax\")[\"format\"](vName, this.maxValue);\n }\n };\n Object.defineProperty(NumericValidator.prototype, \"minValue\", {\n /**\n * The minValue property.\n */\n get: function () {\n return this.getPropertyValue(\"minValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"minValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumericValidator.prototype, \"maxValue\", {\n /**\n * The maxValue property.\n */\n get: function () {\n return this.getPropertyValue(\"maxValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n return NumericValidator;\n}(SurveyValidator));\n\n/**\n * Validate text values.\n */\nvar TextValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(TextValidator, _super);\n function TextValidator(minLength, maxLength, allowDigits) {\n if (minLength === void 0) { minLength = 0; }\n if (maxLength === void 0) { maxLength = 0; }\n if (allowDigits === void 0) { allowDigits = true; }\n var _this = _super.call(this) || this;\n _this.minLength = minLength;\n _this.maxLength = maxLength;\n _this.allowDigits = allowDigits;\n return _this;\n }\n TextValidator.prototype.getType = function () {\n return \"textvalidator\";\n };\n TextValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (value !== \"\" && __WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(value))\n return null;\n if (!this.allowDigits) {\n var reg = /^[A-Za-z\\s]*$/;\n if (!reg.test(value)) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n }\n if (this.minLength > 0 && value.length < this.minLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n if (this.maxLength > 0 && value.length > this.maxLength) {\n return new ValidatorResult(null, this.createCustomError(name));\n }\n return null;\n };\n TextValidator.prototype.getDefaultErrorText = function (name) {\n if (this.minLength > 0 && this.maxLength > 0)\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"textMinMaxLength\")[\"format\"](this.minLength, this.maxLength);\n if (this.minLength > 0)\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"textMinLength\")[\"format\"](this.minLength);\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"textMaxLength\")[\"format\"](this.maxLength);\n };\n Object.defineProperty(TextValidator.prototype, \"minLength\", {\n /**\n * The minLength property.\n */\n get: function () {\n return this.getPropertyValue(\"minLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"minLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"maxLength\", {\n /**\n * The maxLength property.\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextValidator.prototype, \"allowDigits\", {\n /**\n * The allowDigits property.\n */\n get: function () {\n return this.getPropertyValue(\"allowDigits\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowDigits\", val);\n },\n enumerable: true,\n configurable: true\n });\n return TextValidator;\n}(SurveyValidator));\n\nvar AnswerCountValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(AnswerCountValidator, _super);\n function AnswerCountValidator(minCount, maxCount) {\n if (minCount === void 0) { minCount = null; }\n if (maxCount === void 0) { maxCount = null; }\n var _this = _super.call(this) || this;\n _this.minCount = minCount;\n _this.maxCount = maxCount;\n return _this;\n }\n AnswerCountValidator.prototype.getType = function () {\n return \"answercountvalidator\";\n };\n AnswerCountValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (value == null || value.constructor != Array)\n return null;\n var count = value.length;\n if (this.minCount && count < this.minCount) {\n return new ValidatorResult(null, this.createCustomError(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"minSelectError\")[\"format\"](this.minCount)));\n }\n if (this.maxCount && count > this.maxCount) {\n return new ValidatorResult(null, this.createCustomError(__WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"maxSelectError\")[\"format\"](this.maxCount)));\n }\n return null;\n };\n AnswerCountValidator.prototype.getDefaultErrorText = function (name) {\n return name;\n };\n Object.defineProperty(AnswerCountValidator.prototype, \"minCount\", {\n /**\n * The minCount property.\n */\n get: function () {\n return this.getPropertyValue(\"minCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"minCount\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AnswerCountValidator.prototype, \"maxCount\", {\n /**\n * The maxCount property.\n */\n get: function () {\n return this.getPropertyValue(\"maxCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxCount\", val);\n },\n enumerable: true,\n configurable: true\n });\n return AnswerCountValidator;\n}(SurveyValidator));\n\n/**\n * Use it to validate the text by regular expressions.\n */\nvar RegexValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(RegexValidator, _super);\n function RegexValidator(regex) {\n if (regex === void 0) { regex = null; }\n var _this = _super.call(this) || this;\n _this.regex = regex;\n return _this;\n }\n RegexValidator.prototype.getType = function () {\n return \"regexvalidator\";\n };\n RegexValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.regex || __WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(value))\n return null;\n var re = new RegExp(this.regex);\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) {\n var res = this.hasError(re, value[i], name);\n if (res)\n return res;\n }\n }\n return this.hasError(re, value, name);\n };\n RegexValidator.prototype.hasError = function (re, value, name) {\n if (re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n Object.defineProperty(RegexValidator.prototype, \"regex\", {\n /**\n * The regex property.\n */\n get: function () {\n return this.getPropertyValue(\"regex\");\n },\n set: function (val) {\n this.setPropertyValue(\"regex\", val);\n },\n enumerable: true,\n configurable: true\n });\n return RegexValidator;\n}(SurveyValidator));\n\n/**\n * Validate e-mail address in the text input\n */\nvar EmailValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(EmailValidator, _super);\n function EmailValidator() {\n var _this = _super.call(this) || this;\n _this.re = /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()=[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()=[\\]\\.,;:\\s@\\\"]{2,})$/i;\n return _this;\n }\n EmailValidator.prototype.getType = function () {\n return \"emailvalidator\";\n };\n EmailValidator.prototype.validate = function (value, name, values, properties) {\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!value)\n return null;\n if (this.re.test(value))\n return null;\n return new ValidatorResult(value, this.createCustomError(name));\n };\n EmailValidator.prototype.getDefaultErrorText = function (name) {\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"invalidEmail\");\n };\n return EmailValidator;\n}(SurveyValidator));\n\n/**\n * Show error if expression returns false\n */\nvar ExpressionValidator = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ExpressionValidator, _super);\n function ExpressionValidator(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.conditionRunner = null;\n _this.isRunningValue = false;\n _this.expression = expression;\n return _this;\n }\n ExpressionValidator.prototype.getType = function () {\n return \"expressionvalidator\";\n };\n Object.defineProperty(ExpressionValidator.prototype, \"isValidateAllValues\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isAsync\", {\n get: function () {\n if (!this.ensureConditionRunner())\n return false;\n return this.conditionRunner.isAsync;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExpressionValidator.prototype, \"isRunning\", {\n get: function () {\n return this.isRunningValue;\n },\n enumerable: true,\n configurable: true\n });\n ExpressionValidator.prototype.validate = function (value, name, values, properties) {\n var _this = this;\n if (name === void 0) { name = null; }\n if (values === void 0) { values = null; }\n if (properties === void 0) { properties = null; }\n if (!this.ensureConditionRunner())\n return null;\n this.conditionRunner.onRunComplete = function (res) {\n _this.isRunningValue = false;\n if (!!_this.onAsyncCompleted) {\n _this.onAsyncCompleted(_this.generateError(res, value));\n }\n };\n this.isRunningValue = true;\n var res = this.conditionRunner.run(values, properties);\n if (this.conditionRunner.isAsync)\n return null;\n this.isRunningValue = false;\n return this.generateError(res, value);\n };\n ExpressionValidator.prototype.generateError = function (res, value) {\n if (!res) {\n return new ValidatorResult(value, this.createCustomError(name));\n }\n return null;\n };\n ExpressionValidator.prototype.getDefaultErrorText = function (name) {\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"invalidExpression\")[\"format\"](this.expression);\n };\n ExpressionValidator.prototype.ensureConditionRunner = function () {\n if (!!this.conditionRunner) {\n this.conditionRunner.expression = this.expression;\n return true;\n }\n if (!this.expression)\n return false;\n this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_5__conditions__[\"b\" /* ConditionRunner */](this.expression);\n return true;\n };\n Object.defineProperty(ExpressionValidator.prototype, \"expression\", {\n /**\n * The expression property.\n */\n get: function () {\n return this.getPropertyValue(\"expression\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: true,\n configurable: true\n });\n return ExpressionValidator;\n}(SurveyValidator));\n\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"surveyvalidator\", [\n { name: \"text\", serializationProperty: \"locText\" }\n]);\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"numericvalidator\", [\"minValue:number\", \"maxValue:number\"], function () {\n return new NumericValidator();\n}, \"surveyvalidator\");\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"textvalidator\", [\"minLength:number\", \"maxLength:number\", \"allowDigits:boolean\"], function () {\n return new TextValidator();\n}, \"surveyvalidator\");\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"answercountvalidator\", [\"minCount:number\", \"maxCount:number\"], function () {\n return new AnswerCountValidator();\n}, \"surveyvalidator\");\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"regexvalidator\", [\"regex\"], function () {\n return new RegexValidator();\n}, \"surveyvalidator\");\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"emailvalidator\", [], function () {\n return new EmailValidator();\n}, \"surveyvalidator\");\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"expressionvalidator\", [\"expression:condition\"], function () {\n return new ExpressionValidator();\n}, \"surveyvalidator\");\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Boolean; });\n\n\n\n\nvar Boolean = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Boolean, _super);\n function Boolean() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Boolean.prototype, \"itemClass\", {\n get: function () {\n var question = this.question;\n var cssClasses = question.cssClasses;\n var isChecked = question.checkedValue;\n var isDisabled = question.isReadOnly;\n var itemClass = cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n else if (isChecked === null)\n itemClass += \" \" + cssClasses.itemIndeterminate;\n return itemClass;\n },\n enumerable: true,\n configurable: true\n });\n Boolean.prototype.getLabelClass = function (checked) {\n var question = this.question;\n var cssClasses = this.question.cssClasses;\n return (cssClasses.label +\n \" \" +\n (question.checkedValue === !checked || question.isReadOnly\n ? question.cssClasses.disabledLabel\n : \"\"));\n };\n Boolean.prototype.preventDefaults = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n Boolean.prototype.onSwitchClick = function (event) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n var isRightClick = event.offsetX / event.target.offsetWidth > 0.5;\n var isRtl = document.defaultView.getComputedStyle(event.target).direction == \"rtl\";\n this.question.checkedValue = isRtl ? !isRightClick : isRightClick;\n }\n };\n Boolean.prototype.onLabelClick = function (event, value) {\n if (this.question.isIndeterminate) {\n this.preventDefaults(event);\n this.question.checkedValue = value;\n }\n };\n Boolean = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Boolean);\n return Boolean;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-boolean\", Boolean);\n/* harmony default export */ __webpack_exports__[\"b\"] = Boolean;\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Checkbox; });\n\n\n\n\nvar Checkbox = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Checkbox, _super);\n function Checkbox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Checkbox.prototype.getItemClass = function (item) {\n var question = this.question;\n var cssClasses = question.cssClasses;\n var isChecked = question.isItemSelected(item);\n var isDisabled = question.isReadOnly || !item.isEnabled;\n var allowHover = !isChecked && !isDisabled;\n var itemClass = cssClasses.item;\n if (!question.hasColumns) {\n itemClass +=\n question.colCount === 0\n ? \" \" + cssClasses.itemInline\n : \" sv-q-col-\" + question.colCount;\n }\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n if (allowHover)\n itemClass += \" \" + cssClasses.itemHover;\n return itemClass;\n };\n Checkbox = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Checkbox);\n return Checkbox;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-checkbox\", Checkbox);\n/* harmony default export */ __webpack_exports__[\"b\"] = Checkbox;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CheckboxItem; });\n\n\n\nvar CheckboxItem = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(CheckboxItem, _super);\n function CheckboxItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(CheckboxItem.prototype, \"isAllSelected\", {\n get: function () {\n return this.question.isAllSelected;\n },\n set: function (val) {\n this.question.isAllSelected = val;\n },\n enumerable: true,\n configurable: true\n });\n CheckboxItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(this.question.isItemSelected(item));\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CheckboxItem.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CheckboxItem.prototype, \"item\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CheckboxItem.prototype, \"index\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CheckboxItem.prototype, \"hideLabel\", void 0);\n CheckboxItem = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], CheckboxItem);\n return CheckboxItem;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-checkbox-item\", CheckboxItem);\n/* harmony default export */ __webpack_exports__[\"b\"] = CheckboxItem;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Comment; });\n\n\n\n\nvar Comment = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Comment, _super);\n function Comment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Comment.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n Comment.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Comment = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Comment);\n return Comment;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-comment\", Comment);\n/* harmony default export */ __webpack_exports__[\"b\"] = Comment;\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Composite; });\n\n\n\n\nvar Composite = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Composite, _super);\n function Composite() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Composite.prototype, \"contentPanel\", {\n get: function () {\n return this.question.contentPanel;\n },\n enumerable: true,\n configurable: true\n });\n Composite = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Composite);\n return Composite;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-composite\", Composite);\n/* harmony default export */ __webpack_exports__[\"b\"] = Composite;\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Custom; });\n\n\n\n\nvar Custom = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Custom, _super);\n function Custom() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Custom.prototype, \"contentQuestion\", {\n get: function () {\n return this.question.contentQuestion;\n },\n enumerable: true,\n configurable: true\n });\n Custom.prototype.getWidgetComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n Custom = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Custom);\n return Custom;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-custom\", Custom);\n/* harmony default export */ __webpack_exports__[\"b\"] = Custom;\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CustomWidget; });\n\n\n\nvar CustomWidget = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(CustomWidget, _super);\n function CustomWidget() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(CustomWidget.prototype, \"hasDefaultRender\", {\n get: function () {\n return this.question.customWidget.isDefaultRender || this.hasVueComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate ? true : false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"customHtml\", {\n get: function () {\n return this.question.customWidget.htmlTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"hasVueComponent\", {\n get: function () {\n var options = __WEBPACK_IMPORTED_MODULE_1_vue___default.a[\"options\"];\n if (!options)\n return false;\n return (options.components && options.components[this.question.customWidget.name]);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomWidget.prototype, \"componentName\", {\n get: function () {\n if (this.hasVueComponent)\n return this.question.customWidget.name;\n return \"survey-\" + this.question.getTemplate();\n },\n enumerable: true,\n configurable: true\n });\n CustomWidget.prototype.mounted = function () {\n this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.updated = function () {\n //this.question.customWidget.afterRender(this.question, this.$el);\n };\n CustomWidget.prototype.beforeDestroy = function () {\n this.question.customWidget.willUnmount(this.question, this.$el);\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CustomWidget.prototype, \"css\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], CustomWidget.prototype, \"question\", void 0);\n CustomWidget = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], CustomWidget);\n return CustomWidget;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-customwidget\", CustomWidget);\n/* harmony default export */ __webpack_exports__[\"b\"] = CustomWidget;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Dropdown; });\n\n\n\n\nvar Dropdown = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Dropdown, _super);\n function Dropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Dropdown.prototype, \"isOtherSelected\", {\n get: function () {\n var question = this.question;\n return question.hasOther && question.isOtherSelected;\n },\n enumerable: true,\n configurable: true\n });\n Dropdown = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Dropdown);\n return Dropdown;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-dropdown\", Dropdown);\n/* harmony default export */ __webpack_exports__[\"b\"] = Dropdown;\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyElementVue; });\n\n\n\nvar SurveyElementVue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyElementVue, _super);\n function SurveyElementVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyElementVue.prototype.getWidgetComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n SurveyElementVue.prototype.getRootClass = function (element) {\n var cssRoot = element.cssRoot;\n if (element.isReadOnly) {\n cssRoot += \" \" + this.element.cssClasses.disabled;\n }\n return cssRoot;\n };\n SurveyElementVue.prototype.getContentClass = function (element) {\n return element.cssContent;\n };\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return !this.element.isPanel && this.survey.questionErrorLocation === \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyElementVue.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return (!this.element.isPanel && this.survey.questionErrorLocation === \"bottom\");\n },\n enumerable: true,\n configurable: true\n });\n SurveyElementVue.prototype.mounted = function () {\n if (!this.element.isPanel) {\n this.element.afterRender(this.$el);\n }\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], SurveyElementVue.prototype, \"css\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], SurveyElementVue.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], SurveyElementVue.prototype, \"element\", void 0);\n SurveyElementVue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], SurveyElementVue);\n return SurveyElementVue;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-element\", SurveyElementVue);\n/* harmony default export */ __webpack_exports__[\"b\"] = SurveyElementVue;\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ElementHeader; });\n\n\n\nvar ElementHeader = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ElementHeader, _super);\n function ElementHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ElementHeader.prototype.getTitleClass = function (element) {\n return element.cssTitle;\n };\n ElementHeader.prototype.getHeaderClass = function (element) {\n return element.cssHeader;\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], ElementHeader.prototype, \"element\", void 0);\n ElementHeader = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], ElementHeader);\n return ElementHeader;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-element-header\", ElementHeader);\n/* harmony default export */ __webpack_exports__[\"b\"] = ElementHeader;\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Empty; });\n\n\n\n\nvar Empty = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Empty, _super);\n function Empty() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Empty = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Empty);\n return Empty;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-empty\", Empty);\n/* harmony default export */ __webpack_exports__[\"b\"] = Empty;\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Errors; });\n\n\n\nvar Errors = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Errors, _super);\n function Errors() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Errors.prototype, \"isShow\", {\n get: function () {\n return !!this.question.errors && this.question.errors.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Errors.prototype, \"classes\", {\n get: function () {\n var question = this.question;\n var classes = question.cssClasses\n ? question.cssClasses.error.root\n : \"panel-error-root\";\n var additionalClasses = \"\";\n if (this.location === \"top\") {\n additionalClasses = question.cssClasses.error.locationTop;\n }\n else if (this.location === \"bottom\") {\n additionalClasses = question.cssClasses.error.locationBottom;\n }\n if (additionalClasses)\n classes += \" \" + additionalClasses;\n return classes;\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Errors.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Errors.prototype, \"location\", void 0);\n Errors = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Errors);\n return Errors;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-errors\", Errors);\n/* harmony default export */ __webpack_exports__[\"b\"] = Errors;\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Expression; });\n\n\n\n\nvar Expression = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Expression, _super);\n function Expression() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Expression = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Expression);\n return Expression;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-expression\", Expression);\n/* harmony default export */ __webpack_exports__[\"b\"] = Expression;\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_utils__ = __webpack_require__(28);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return File; });\n\n\n\n\n\nvar File = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(File, _super);\n function File() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onDragOver = function (event) {\n event.preventDefault();\n };\n _this.onDrop = function (event) {\n event.preventDefault();\n var src = event.dataTransfer;\n _this.onChange(src);\n };\n return _this;\n }\n File.prototype.doChange = function (event) {\n var src = event.target || event.srcElement;\n this.onChange(src);\n };\n File.prototype.doClean = function (event) {\n var question = this.question;\n var src = event.target || event.srcElement;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"a\" /* confirmAction */])(question.confirmRemoveAllMessage);\n if (!isConfirmed)\n return;\n }\n question.clear();\n src.parentElement.querySelectorAll(\"input\")[0].value = \"\";\n };\n File.prototype.doRemoveFile = function (data) {\n var question = this.question;\n if (question.needConfirmRemoveFile) {\n var isConfirmed = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"a\" /* confirmAction */])(question.getConfirmRemoveMessage(data.name));\n if (!isConfirmed)\n return;\n }\n question.removeFile(data);\n };\n File.prototype.doDownloadFile = function (event, data) {\n if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"b\" /* detectIEOrEdge */])()) {\n event.preventDefault();\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"c\" /* loadFileFromBase64 */])(data.content, data.name);\n }\n };\n File.prototype.getPlaceholderClass = function () {\n return \"form-control \" + this.question.cssClasses.placeholderInput;\n };\n File.prototype.onChange = function (src) {\n if (!window[\"FileReader\"])\n return;\n if (!src || !src.files || src.files.length < 1)\n return;\n var files = [];\n var allowCount = this.question.allowMultiple ? src.files.length : 1;\n for (var i = 0; i < allowCount; i++) {\n files.push(src.files[i]);\n }\n src.value = \"\";\n this.question.loadFiles(files);\n };\n File = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], File);\n return File;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-file\", File);\n/* harmony default export */ __webpack_exports__[\"b\"] = File;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return FlowPanel; });\n\n\n\nvar FlowPanel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(FlowPanel, _super);\n function FlowPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n Object.defineProperty(FlowPanel.prototype, \"rootNode\", {\n get: function () {\n return this.rootNodeValue;\n },\n enumerable: true,\n configurable: true\n });\n FlowPanel.prototype.beforeMount = function () {\n if (!this.question)\n return;\n var self = this;\n this.question.onCustomHtmlProducing = function () {\n return \"\";\n };\n this.question.onGetHtmlForQuestion = self.renderQuestion;\n this.setRootNode();\n };\n FlowPanel.prototype.setRootNode = function () {\n var html = \"\" + this.question.produceHtml() + \"\";\n var doc = new DOMParser().parseFromString(html, \"text/xml\");\n this.rootNodeValue =\n !!doc && doc.childNodes.length > 0 ? doc.childNodes[0] : null;\n };\n FlowPanel.prototype.renderQuestion = function (question) {\n return \"\" + question.name + \"\";\n };\n FlowPanel.prototype.mounted = function () {\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n var self = this;\n this.question.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.question.isCollapsed;\n });\n };\n Object.defineProperty(FlowPanel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"showIcon\", {\n get: function () {\n return (this.question && (this.question.isExpanded || this.question.isCollapsed));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"iconCss\", {\n get: function () {\n var result = \"sv_panel_icon\";\n if (!this.isCollapsed)\n result += \" sv_expanded\";\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanel.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: true,\n configurable: true\n });\n FlowPanel.prototype.changeExpanded = function () {\n if (this.question.isCollapsed || this.question.isExpanded) {\n if (this.question.isCollapsed) {\n this.question.expand();\n }\n else {\n this.question.collapse();\n }\n }\n };\n FlowPanel.prototype.getTitleStyle = function () {\n var result = this.css.panel.title;\n if (this.question.isCollapsed || this.question.isExpanded) {\n result += \" \" + this.css.panel.titleExpandable;\n }\n return result;\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanel.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanel.prototype, \"isEditMode\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanel.prototype, \"css\", void 0);\n FlowPanel = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], FlowPanel);\n return FlowPanel;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-flowpanel\", FlowPanel);\n/* harmony default export */ __webpack_exports__[\"b\"] = FlowPanel;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return FlowPanelElement; });\n\n\n\nvar FlowPanelElement = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(FlowPanelElement, _super);\n function FlowPanelElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.question = null;\n _this.tagName = \"span\";\n _this.nodes = [];\n _this.text = \"\";\n _this.style = {};\n return _this;\n }\n FlowPanelElement_1 = FlowPanelElement;\n FlowPanelElement.prototype.getStyle = function (nodeType) {\n var style = {};\n if (nodeType.toLowerCase() === \"b\") {\n style.fontWeight = \"bold\";\n }\n if (nodeType.toLowerCase() === \"i\") {\n style.fontStyle = \"italic\";\n }\n if (nodeType.toLowerCase() === \"u\") {\n style.textDecoration = \"underline\";\n }\n return style;\n };\n Object.defineProperty(FlowPanelElement.prototype, \"elementId\", {\n get: function () {\n if (!this.elementIdValue) {\n if (!FlowPanelElement_1.idValue) {\n FlowPanelElement_1.idValue = 0;\n }\n FlowPanelElement_1.idValue++;\n this.elementIdValue = \"fp_el\" + FlowPanelElement_1.idValue;\n }\n return this.elementIdValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanelElement.prototype, \"survey\", {\n get: function () {\n return this.panel.survey;\n },\n enumerable: true,\n configurable: true\n });\n FlowPanelElement.prototype.beforeMount = function () {\n if (!this.panel || !this.node)\n return;\n var nodeType = this.node.nodeName.toLowerCase();\n if (!this.hasTextChildNodesOnly(this.node)) {\n this.nodes = this.getChildDomNodes(this.node);\n }\n else {\n if (nodeType == \"question\") {\n this.question = this.panel.getQuestionByName(this.node.textContent);\n }\n else {\n this.text = this.node.textContent;\n }\n }\n if (nodeType == \"div\" && !this.question) {\n this.tagName = \"div\";\n }\n this.style = this.getStyle(nodeType);\n };\n //duplicated code from element.vue\n FlowPanelElement.prototype.getWidgetComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getTemplate();\n };\n // duplicated code from reactpages.tsx\n FlowPanelElement.prototype.hasTextChildNodesOnly = function (node) {\n var nodes = node.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName.toLowerCase() !== \"#text\")\n return false;\n }\n return true;\n };\n FlowPanelElement.prototype.getChildDomNodes = function (node) {\n var domNodes = [];\n for (var i = 0; i < node.childNodes.length; i++) {\n domNodes.push(node.childNodes[i]);\n }\n return domNodes;\n };\n var FlowPanelElement_1;\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanelElement.prototype, \"node\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanelElement.prototype, \"panel\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], FlowPanelElement.prototype, \"css\", void 0);\n FlowPanelElement = FlowPanelElement_1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], FlowPanelElement);\n return FlowPanelElement;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-flowpanelelement\", FlowPanelElement);\n/* harmony default export */ __webpack_exports__[\"b\"] = FlowPanelElement;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyHeader; });\n\n\n\nvar SurveyHeader = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyHeader, _super);\n function SurveyHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyHeader.prototype.mounted = function () {\n var el = this.$el;\n if (el && this.survey)\n this.survey.doAfterRenderHeader(el);\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"],\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], SurveyHeader.prototype, \"survey\", void 0);\n SurveyHeader = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], SurveyHeader);\n return SurveyHeader;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-header\", SurveyHeader);\n/* harmony default export */ __webpack_exports__[\"b\"] = SurveyHeader;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Html; });\n\n\n\nvar Html = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Html, _super);\n function Html() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Html.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Html.prototype, \"css\", void 0);\n Html = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Html);\n return Html;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-html\", Html);\n/* harmony default export */ __webpack_exports__[\"b\"] = Html;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Image; });\n\n\n\nvar Image = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Image, _super);\n function Image() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Image.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Image.prototype, \"css\", void 0);\n Image = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Image);\n return Image;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-image\", Image);\n/* harmony default export */ __webpack_exports__[\"b\"] = Image;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ImagePicker; });\n\n\n\n\nvar ImagePicker = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ImagePicker, _super);\n function ImagePicker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ImagePicker.prototype.getItemClass = function (item) {\n var question = this.question;\n var cssClasses = question.cssClasses;\n var colCount = question.colCount;\n var itemClass = cssClasses.item +\n (colCount === 0\n ? \" \" + cssClasses.itemInline\n : \" sv-q-col-\" + colCount);\n var isChecked = this.question.isItemSelected(item);\n var isDisabled = question.isReadOnly || !item.isEnabled;\n var allowHover = !isChecked && !isDisabled;\n if (isChecked) {\n itemClass += \" \" + cssClasses.itemChecked;\n }\n if (isDisabled) {\n itemClass += \" \" + cssClasses.itemDisabled;\n }\n if (allowHover) {\n itemClass += \" \" + cssClasses.itemHover;\n }\n return itemClass;\n };\n ImagePicker = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], ImagePicker);\n return ImagePicker;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-imagepicker\", ImagePicker);\n/* harmony default export */ __webpack_exports__[\"b\"] = ImagePicker;\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Matrix; });\n\n\n\n\nvar Matrix = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Matrix, _super);\n function Matrix() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Matrix.prototype.getItemClass = function (row, column) {\n var question = this.question;\n var cssClasses = this.question.cssClasses;\n var isChecked = row.value == column.value;\n var isDisabled = question.isReadOnly;\n var allowHover = !isChecked && !isDisabled;\n var cellDisabledClass = question.hasCellText\n ? cssClasses.cellTextDisabled\n : cssClasses.itemDisabled;\n var cellSelectedClass = question.hasCellText\n ? cssClasses.cellTextSelected\n : cssClasses.itemChecked;\n var itemHoverClass = !question.hasCellText ? cssClasses.itemHover : \"\";\n var cellClass = question.hasCellText\n ? cssClasses.cellText\n : cssClasses.label;\n var itemClass = cellClass +\n (isChecked ? \" \" + cellSelectedClass : \"\") +\n (isDisabled ? \" \" + cellDisabledClass : \"\") +\n (allowHover ? \" \" + itemHoverClass : \"\");\n return itemClass;\n };\n Matrix.prototype.cellClick = function (row, column) {\n if (this.question.isReadOnly)\n return;\n row.value = column.value;\n };\n Matrix = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Matrix);\n return Matrix;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-matrix\", Matrix);\n/* harmony default export */ __webpack_exports__[\"b\"] = Matrix;\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixCell; });\n\n\n\nvar MatrixCell = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixCell, _super);\n function MatrixCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isVisible = false;\n return _this;\n }\n MatrixCell.prototype.getWidgetComponentName = function (element) {\n if (element.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-\" + element.getType();\n };\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.cell.showErrorOnTop;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixCell.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.cell.showErrorOnBottom;\n },\n enumerable: true,\n configurable: true\n });\n MatrixCell.prototype.getHeaders = function () {\n var element = this.cell.question;\n if (!element)\n return \"\";\n return element.isVisible ? this.cell.cell.column.locTitle.renderedHtml : \"\";\n };\n MatrixCell.prototype.getCellClass = function () {\n var element = this.cell.question;\n if (!element)\n return this.question.cssClasses.cell;\n var cellClass = element.cssClasses.itemValue;\n if (!!element.errors && element.errors.length > 0) {\n cellClass += \" \" + element.cssClasses.hasError;\n }\n cellClass += \" \" + element.cssClasses.asCell;\n return cellClass;\n };\n MatrixCell.prototype.getCellStyle = function () {\n if (!this.cell.isChoice)\n return null;\n return { \"text-align\": \"center\" };\n };\n MatrixCell.prototype.getItemClass = function (item) {\n var cssClasses = this.cell.question.cssClasses;\n var isDisabled = this.cell.question.isReadOnly || !item.isEnabled;\n var isChecked = item.value === this.cell.question.renderedValue;\n var allowHover = !isDisabled && !isChecked;\n var itemClass = this.cell.question.cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n if (allowHover)\n itemClass += \" \" + cssClasses.itemHover;\n return itemClass;\n };\n MatrixCell.prototype.removeRowClick = function () {\n this.question.removeRowUI(this.cell.row);\n };\n MatrixCell.prototype.mounted = function () {\n if (!this.cell.hasQuestion || !this.question || !this.question.survey)\n return;\n this.onVisibilityChanged();\n var self = this;\n this.cell.question.registerFunctionOnPropertyValueChanged(\"isVisible\", function () {\n self.onVisibilityChanged();\n });\n var options = {\n cell: this.cell.cell,\n cellQuestion: this.cell.question,\n htmlElement: this.$el,\n row: this.cell.row,\n column: this.cell.cell.column\n };\n this.question.survey.matrixAfterCellRender(this.question, options);\n };\n MatrixCell.prototype.onVisibilityChanged = function () {\n this.isVisible = this.cell.question.isVisible;\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], MatrixCell.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], MatrixCell.prototype, \"cell\", void 0);\n MatrixCell = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], MatrixCell);\n return MatrixCell;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-matrixcell\", MatrixCell);\n/* harmony default export */ __webpack_exports__[\"b\"] = MatrixCell;\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixDropdown; });\n\n\n\n\nvar MatrixDropdown = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDropdown, _super);\n function MatrixDropdown() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDropdown = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], MatrixDropdown);\n return MatrixDropdown;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-matrixdropdown\", MatrixDropdown);\n/* harmony default export */ __webpack_exports__[\"b\"] = MatrixDropdown;\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixDynamic; });\n\n\n\n\nvar MatrixDynamic = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDynamic, _super);\n function MatrixDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixDynamic.prototype.addRowClick = function () {\n this.question.addRow();\n };\n MatrixDynamic = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], MatrixDynamic);\n return MatrixDynamic;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-matrixdynamic\", MatrixDynamic);\n/* harmony default export */ __webpack_exports__[\"b\"] = MatrixDynamic;\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixTable; });\n\n\n\nvar MatrixTable = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixTable, _super);\n function MatrixTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(MatrixTable.prototype, \"table\", {\n get: function () {\n return this.question.renderedTable;\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], MatrixTable.prototype, \"question\", void 0);\n MatrixTable = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], MatrixTable);\n return MatrixTable;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-matrixtable\", MatrixTable);\n/* harmony default export */ __webpack_exports__[\"b\"] = MatrixTable;\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MultipleText; });\n\n\n\n\nvar MultipleText = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MultipleText, _super);\n function MultipleText() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MultipleText.prototype.getWidgetComponentName = function (question) {\n if (question.customWidget) {\n return \"survey-customwidget\";\n }\n return \"survey-text\";\n };\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnTop\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleText.prototype, \"hasErrorsOnBottom\", {\n get: function () {\n return this.question.survey.questionErrorLocation === \"bottom\";\n },\n enumerable: true,\n configurable: true\n });\n MultipleText = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], MultipleText);\n return MultipleText;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-multipletext\", MultipleText);\n/* harmony default export */ __webpack_exports__[\"b\"] = MultipleText;\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Navigation; });\n\n\n\nvar Navigation = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Navigation, _super);\n function Navigation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Navigation.prototype.nextButtonMouseDown = function () {\n this.mouseDownPage = this.survey.currentPage;\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.buttonMouseDown = function () {\n return this.survey.navigationMouseDown();\n };\n Navigation.prototype.prevPage = function () {\n this.survey.prevPage();\n };\n Navigation.prototype.nextPage = function () {\n if (!!this.mouseDownPage && this.mouseDownPage !== this.survey.currentPage)\n return;\n this.mouseDownPage = null;\n this.survey.nextPage();\n };\n Navigation.prototype.completeLastPage = function () {\n this.survey.completeLastPage();\n };\n Navigation.prototype.showPreview = function () {\n this.survey.showPreview();\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Navigation.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Navigation.prototype, \"css\", void 0);\n Navigation = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Navigation);\n return Navigation;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-navigation\", Navigation);\n/* harmony default export */ __webpack_exports__[\"b\"] = Navigation;\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return OtherChoice; });\n\n\n\nvar OtherChoice = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(OtherChoice, _super);\n function OtherChoice() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OtherChoice.prototype.change = function (event) {\n this.question.comment = event.target.value;\n };\n OtherChoice.prototype.keyup = function (event) {\n if (!this.question.isSurveyInputTextUpdate)\n return;\n this.question.comment = event.target.value;\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], OtherChoice.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], OtherChoice.prototype, \"commentClass\", void 0);\n OtherChoice = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], OtherChoice);\n return OtherChoice;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-other-choice\", OtherChoice);\n/* harmony default export */ __webpack_exports__[\"b\"] = OtherChoice;\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Page; });\n\n\n\nvar Page = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Page, _super);\n function Page() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCurrentPageChanged = false;\n return _this;\n }\n Page.prototype.mounted = function () {\n var _this = this;\n if (this.survey) {\n this.survey.afterRenderPage(this.$el);\n this.survey.onCurrentPageChanged.add(function (sender, options) {\n _this.isCurrentPageChanged = true;\n });\n }\n };\n Page.prototype.updated = function () {\n var self = this;\n self.survey.afterRenderPage(this.$el);\n this.$nextTick(function () {\n if (this.isCurrentPageChanged) {\n this.isCurrentPageChanged = false;\n self.survey.scrollToTopOnPageChange();\n }\n });\n };\n Object.defineProperty(Page.prototype, \"showHeader\", {\n get: function () {\n return this.page._showTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"showDescription\", {\n get: function () {\n return this.page._showDescription;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"num\", {\n get: function () {\n return this.page.num > 0 ? this.page.num + \". \" : \"\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"rows\", {\n get: function () {\n return this.page.rows;\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Page.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Page.prototype, \"page\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Page.prototype, \"css\", void 0);\n Page = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Page);\n return Page;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-page\", Page);\n/* harmony default export */ __webpack_exports__[\"b\"] = Page;\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Panel; });\n\n\n\nvar Panel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Panel, _super);\n function Panel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n Panel.prototype.mounted = function () {\n if (this.question.survey) {\n this.question.survey.afterRenderPanel(this.question, this.$el);\n }\n this.isCollapsed = this.question.isCollapsed;\n var self = this;\n this.question.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.question.isCollapsed;\n }, \"panel\");\n };\n Panel.prototype.beforeDestroy = function () {\n this.question.unRegisterFunctionOnPropertyValueChanged(\"state\", \"panel\");\n };\n Object.defineProperty(Panel.prototype, \"rootStyle\", {\n get: function () {\n var result = {};\n if (this.question.renderWidth) {\n result[\"flexBasis\"] = this.question.renderWidth;\n result[\"flexGrow\"] = 1;\n result[\"flexShrink\"] = 1;\n result[\"width\"] = this.question.renderWidth;\n result[\"minWidth\"] = this.question.minWidth;\n result[\"maxWidth\"] = this.question.maxWidth;\n }\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"showIcon\", {\n get: function () {\n return (this.question && (this.question.isExpanded || this.question.isCollapsed));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"rows\", {\n get: function () {\n return this.question.rows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"hasTitle\", {\n get: function () {\n return this.question.title.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"iconCss\", {\n get: function () {\n var result = this.css.panel.icon;\n if (!this.isCollapsed)\n result += \" \" + this.css.panel.iconExpanded;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Panel.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: true,\n configurable: true\n });\n Panel.prototype.changeExpanded = function () {\n if (this.question.isCollapsed || this.question.isExpanded) {\n if (this.question.isCollapsed) {\n this.question.expand();\n }\n else {\n this.question.collapse();\n }\n }\n };\n Panel.prototype.cancelPreview = function () {\n this.question.cancelPreview();\n };\n Panel.prototype.getTitleStyle = function () {\n var result = this.css.panel.title;\n if (this.question.isCollapsed || this.question.isExpanded) {\n result += \" \" + this.css.panel.titleExpandable;\n }\n return result;\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Panel.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Panel.prototype, \"isEditMode\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Panel.prototype, \"css\", void 0);\n Panel = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Panel);\n return Panel;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-panel\", Panel);\n/* harmony default export */ __webpack_exports__[\"b\"] = Panel;\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PanelDynamic; });\n\n\n\n\nvar PanelDynamic = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PanelDynamic, _super);\n function PanelDynamic() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamic.prototype, \"renderedPanels\", {\n get: function () {\n if (this.question.isRenderModeList)\n return this.question.panels;\n var panels = [];\n if (this.question.currentPanel) {\n panels.push(this.question.currentPanel);\n }\n return panels;\n },\n enumerable: true,\n configurable: true\n });\n PanelDynamic.prototype.addPanelClick = function () {\n this.question.addPanel();\n };\n PanelDynamic.prototype.getButtonAddCss = function (question) {\n var btnClasses = question.cssClasses.button + \" \" + question.cssClasses.buttonAdd;\n if (this.question.renderMode === \"list\") {\n btnClasses += \" \" + question.cssClasses.buttonAdd + \"--list-mode\";\n }\n return btnClasses;\n };\n PanelDynamic = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], PanelDynamic);\n return PanelDynamic;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-paneldynamic\", PanelDynamic);\n/* harmony default export */ __webpack_exports__[\"b\"] = PanelDynamic;\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PanelDynamicProgress; });\n\n\n\nvar PanelDynamicProgress = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PanelDynamicProgress, _super);\n function PanelDynamicProgress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamicProgress.prototype, \"cssClass\", {\n get: function () {\n return this.question.isProgressTopShowing ?\n this.question.cssClasses.progressTop : this.question.cssClasses.progressBottom;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PanelDynamicProgress.prototype, \"rangeMax\", {\n get: function () {\n return this.question.panelCount - 1;\n },\n enumerable: true,\n configurable: true\n });\n PanelDynamicProgress.prototype.addPanelClick = function () {\n this.question.addPanelUI();\n };\n PanelDynamicProgress.prototype.prevPanelClick = function () {\n this.question.goToPrevPanel();\n };\n PanelDynamicProgress.prototype.nextPanelClick = function () {\n this.question.goToNextPanel();\n };\n PanelDynamicProgress.prototype.changeRange = function (event) {\n this.question.currentIndex = event.target.value;\n };\n PanelDynamicProgress.prototype.getButtonAddCss = function (question) { };\n PanelDynamicProgress.prototype.getButtonPrevCss = function (question) {\n var btnClasses = question.cssClasses.buttonPrev;\n if (!question.isPrevButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonPrev + \"--disabled\";\n }\n return btnClasses;\n };\n PanelDynamicProgress.prototype.getButtonNextCss = function (question) {\n var btnClasses = question.cssClasses.buttonNext;\n if (!question.isNextButtonShowing) {\n btnClasses += \" \" + question.cssClasses.buttonNext + \"--disabled\";\n }\n return btnClasses;\n };\n Object.defineProperty(PanelDynamicProgress.prototype, \"progress\", {\n get: function () {\n return this.question.currentIndex / this.rangeMax * 100 + \"%\";\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], PanelDynamicProgress.prototype, \"question\", void 0);\n PanelDynamicProgress = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], PanelDynamicProgress);\n return PanelDynamicProgress;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-paneldynamicprogress\", PanelDynamicProgress);\n/* harmony default export */ __webpack_exports__[\"b\"] = PanelDynamicProgress;\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PanelDynamicRemove; });\n\n\n\nvar PanelDynamicRemove = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PanelDynamicRemove, _super);\n function PanelDynamicRemove() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isCollapsedValue = false;\n return _this;\n }\n PanelDynamicRemove.prototype.mounted = function () {\n this.isCollapsed = this.panel.isCollapsed;\n var self = this;\n this.panel.registerFunctionOnPropertyValueChanged(\"state\", function (val) {\n self.isCollapsed = self.panel.isCollapsed;\n }, \"button\");\n };\n PanelDynamicRemove.prototype.beforeDestroy = function () {\n this.panel.unRegisterFunctionOnPropertyValueChanged(\"state\", \"button\");\n };\n PanelDynamicRemove.prototype.removePanelClick = function (panel) {\n this.question.removePanelUI(panel);\n };\n Object.defineProperty(PanelDynamicRemove.prototype, \"isCollapsed\", {\n get: function () {\n return this.isCollapsedValue;\n },\n set: function (val) {\n this.isCollapsedValue = val;\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], PanelDynamicRemove.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], PanelDynamicRemove.prototype, \"panel\", void 0);\n PanelDynamicRemove = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], PanelDynamicRemove);\n return PanelDynamicRemove;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-paneldynamicremove\", PanelDynamicRemove);\n/* harmony default export */ __webpack_exports__[\"b\"] = PanelDynamicRemove;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Progress; });\n\n\n\nvar Progress = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Progress, _super);\n function Progress() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Progress.prototype, \"progress\", {\n get: function () {\n return this.survey.getProgress() + \"%\";\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Progress.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Progress.prototype, \"css\", void 0);\n Progress = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Progress);\n return Progress;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-progress\", Progress);\n/* harmony default export */ __webpack_exports__[\"b\"] = Progress;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Radiogroup; });\n\n\n\n\nvar Radiogroup = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Radiogroup, _super);\n function Radiogroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(Radiogroup.prototype, \"choicesCount\", {\n get: function () {\n return this.question.visibleChoices.length - 1;\n },\n enumerable: true,\n configurable: true\n });\n Radiogroup.prototype.getItemClass = function (item) {\n var cssClasses = this.question.cssClasses;\n var isDisabled = this.question.isReadOnly || !item.isEnabled;\n var isChecked = item.value === this.question.renderedValue || this.question.isOtherSelected && this.question.otherItem.value === item.value;\n var allowHover = !isDisabled && !isChecked;\n var itemClass = this.question.cssClasses.item;\n if (isDisabled)\n itemClass += \" \" + cssClasses.itemDisabled;\n if (isChecked)\n itemClass += \" \" + cssClasses.itemChecked;\n if (allowHover)\n itemClass += \" \" + cssClasses.itemHover;\n if (!this.question.hasColumns) {\n itemClass +=\n this.question.colCount === 0\n ? \" \" + cssClasses.itemInline\n : \" sv-q-col-\" + this.question.colCount;\n }\n return itemClass;\n };\n Radiogroup = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Radiogroup);\n return Radiogroup;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-radiogroup\", Radiogroup);\n/* harmony default export */ __webpack_exports__[\"b\"] = Radiogroup;\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return RadiogroupItem; });\n\n\n\nvar RadiogroupItem = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(RadiogroupItem, _super);\n function RadiogroupItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RadiogroupItem.prototype.getLabelClass = function (item) {\n return this.question.getLabelClass(item.value === this.question.value);\n };\n RadiogroupItem.prototype.getControlLabelClass = function (item) {\n return this.question.getControlLabelClass(item.value === this.question.value);\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], RadiogroupItem.prototype, \"question\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], RadiogroupItem.prototype, \"item\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], RadiogroupItem.prototype, \"index\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], RadiogroupItem.prototype, \"hideLabel\", void 0);\n RadiogroupItem = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], RadiogroupItem);\n return RadiogroupItem;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-radiogroup-item\", RadiogroupItem);\n/* harmony default export */ __webpack_exports__[\"b\"] = RadiogroupItem;\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Rating; });\n\n\n\n\nvar Rating = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Rating, _super);\n function Rating() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Rating.prototype.getCss = function (question, item) {\n var css = question.cssClasses.item;\n if (question.value == item.value) {\n css = css + \" \" + question.cssClasses.selected;\n }\n return css;\n };\n Rating.prototype.change = function (e) {\n this.question.value = e.target.value;\n };\n Rating.prototype.getRootClass = function (question) {\n var classes = question.cssClasses;\n if (question.isReadOnly)\n return classes.root + \" \" + classes.disabled;\n return classes.root;\n };\n Rating = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Rating);\n return Rating;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-rating\", Rating);\n/* harmony default export */ __webpack_exports__[\"b\"] = Rating;\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyModel__ = __webpack_require__(18);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Row; });\n\n\n\n\nvar Row = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Row, _super);\n function Row() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Row.prototype.mounted = function () {\n if (!!this.row) {\n __WEBPACK_IMPORTED_MODULE_3__surveyModel__[\"a\" /* VueSurveyModel */].updatePropertiesHash(this.row);\n }\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Row.prototype, \"row\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Row.prototype, \"css\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Row.prototype, \"survey\", void 0);\n Row = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Row);\n return Row;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-row\", Row);\n/* harmony default export */ __webpack_exports__[\"b\"] = Row;\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SignaturePad; });\n\n\n\n\nvar SignaturePad = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SignaturePad, _super);\n function SignaturePad() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SignaturePad = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], SignaturePad);\n return SignaturePad;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-signaturepad\", SignaturePad);\n/* harmony default export */ __webpack_exports__[\"b\"] = SignaturePad;\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyString; });\n\n\n\nvar SurveyString = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyString, _super);\n function SurveyString() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], SurveyString.prototype, \"locString\", void 0);\n SurveyString = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], SurveyString);\n return SurveyString;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-string\", SurveyString);\n/* harmony default export */ __webpack_exports__[\"b\"] = SurveyString;\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__stylesmanager__ = __webpack_require__(26);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Survey; });\n\n\n\n\n\nvar Survey = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Survey, _super);\n function Survey() {\n return _super.call(this) || this;\n }\n Survey.prototype.forceUpdate = function () {\n this.$forceUpdate();\n };\n Survey.prototype.mounted = function () {\n var el = this.$el;\n if (el && this.survey)\n this.survey.doAfterRenderSurvey(el);\n this.survey.renderCallback = this.forceUpdate;\n this.survey.startTimerFromUI();\n };\n Survey.prototype.beforeDestroy = function () {\n this.survey.stopTimer();\n this.survey.renderCallback = undefined;\n };\n Object.defineProperty(Survey.prototype, \"hasTitle\", {\n get: function () {\n return !!this.survey.title && this.survey.showTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"hasCompletedPage\", {\n get: function () {\n return this.survey.showCompletedPage && this.survey.state === \"completed\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Survey.prototype, \"css\", {\n get: function () {\n return this.survey.css;\n },\n enumerable: true,\n configurable: true\n });\n Survey.prototype.getCompletedPageClasses = function () {\n var css = this.css;\n return css.body + \" \" + css.completedPage;\n };\n Survey.prototype.getProcessedCompletedHtml = function () {\n if (!this.hasCompletedPage)\n return \"\";\n if (!this.processedCompletedHtmlValue) {\n this.processedCompletedHtmlValue = this.survey.processedCompletedHtml;\n }\n return this.processedCompletedHtmlValue;\n };\n Survey.prototype.getCompletedStateClasses = function () {\n return this.css.saveData[this.survey.completedState];\n };\n Survey.prototype.start = function () {\n this.survey.start();\n };\n Survey.prototype.doTrySaveAgain = function () {\n this.survey.doComplete();\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Survey.prototype, \"survey\", void 0);\n Survey = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Survey);\n return Survey;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n// TODO: make this functionality available via surveyCss in all examples\nObject.defineProperty(Survey, \"cssType\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__[\"a\" /* surveyCss */].currentType;\n },\n set: function (newType) {\n __WEBPACK_IMPORTED_MODULE_4__stylesmanager__[\"a\" /* StylesManager */].applyTheme(newType);\n },\n enumerable: true,\n configurable: false\n});\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey\", Survey);\n/* harmony default export */ __webpack_exports__[\"b\"] = Survey;\n\n\n/***/ }),\n/* 72 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(8);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Text; });\n\n\n\n\nvar Text = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Text, _super);\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Text.prototype.change = function (event) {\n this.question.value = event.target.value;\n };\n Text.prototype.keyup = function (event) {\n if (!this.question.isInputTextUpdate)\n return;\n this.question.value = event.target.value;\n };\n Text = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Text);\n return Text;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* default */]));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-text\", Text);\n/* harmony default export */ __webpack_exports__[\"b\"] = Text;\n\n\n/***/ }),\n/* 73 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return TimerPanel; });\n\n\n\nvar TimerPanel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(TimerPanel, _super);\n function TimerPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(TimerPanel.prototype, \"text\", {\n get: function () {\n return this.survey.timerInfoText;\n },\n enumerable: true,\n configurable: true\n });\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], TimerPanel.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], TimerPanel.prototype, \"css\", void 0);\n TimerPanel = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], TimerPanel);\n return TimerPanel;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-timerpanel\", TimerPanel);\n/* harmony default export */ __webpack_exports__[\"b\"] = TimerPanel;\n\n\n/***/ }),\n/* 74 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyModel__ = __webpack_require__(18);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Window; });\n\n\n\n\nvar Window = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Window, _super);\n function Window() {\n var _this = _super.call(this) || this;\n if (_this.window) {\n _this.surveyWindow = _this.window;\n }\n else {\n _this.surveyWindow = new __WEBPACK_IMPORTED_MODULE_3__surveyModel__[\"b\" /* VueSurveyWindowModel */](null, _this.survey);\n }\n if (_this.isexpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isexpanded;\n }\n if (_this.isExpanded !== undefined) {\n _this.surveyWindow.isExpanded = _this.isExpanded;\n }\n if (_this.closeOnCompleteTimeout !== undefined) {\n _this.surveyWindow.closeOnCompleteTimeout = _this.closeOnCompleteTimeout;\n }\n _this.surveyWindow.isShowing = true;\n var self = _this;\n _this.surveyWindow.closeWindowOnCompleteCallback = function () {\n self.doHide();\n };\n return _this;\n }\n Object.defineProperty(Window.prototype, \"windowSurvey\", {\n get: function () {\n return this.surveyWindow.survey;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"expandedCss\", {\n get: function () {\n return this.surveyWindow.isExpanded\n ? this.css.window.header.buttonCollapsed\n : this.css.window.header.buttonExpanded;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Window.prototype, \"isExpandedSurvey\", {\n get: function () {\n return this.surveyWindow.isExpanded;\n },\n set: function (val) {\n this.surveyWindow.isExpanded = val;\n },\n enumerable: true,\n configurable: true\n });\n Window.prototype.doExpand = function () {\n this.surveyWindow.isExpanded = !this.surveyWindow.isExpanded;\n };\n Window.prototype.doHide = function () {\n __WEBPACK_IMPORTED_MODULE_1_vue___default.a.set(this.surveyWindow, \"isShowing\", false);\n };\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Window.prototype, \"window\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Window.prototype, \"survey\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Window.prototype, \"isExpanded\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Window.prototype, \"isexpanded\", void 0);\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Prop\"]\n ], Window.prototype, \"closeOnCompleteTimeout\", void 0);\n Window = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"c\" /* __decorate */])([\n __WEBPACK_IMPORTED_MODULE_2_vue_property_decorator__[\"Component\"]\n ], Window);\n return Window;\n}(__WEBPACK_IMPORTED_MODULE_1_vue___default.a));\n\n__WEBPACK_IMPORTED_MODULE_1_vue___default.a.component(\"survey-window\", Window);\n/* harmony default export */ __webpack_exports__[\"b\"] = Window;\n\n\n/***/ }),\n/* 75 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ChoicesRestfull; });\n\n\n\n\n\n\nvar XmlParser = /** @class */ (function () {\n function XmlParser() {\n this.parser = new DOMParser();\n }\n XmlParser.prototype.assignValue = function (target, name, value) {\n if (Array.isArray(target[name])) {\n target[name].push(value);\n }\n else if (target[name] !== undefined) {\n target[name] = [target[name]].concat(value);\n }\n else if (typeof value === \"object\" &&\n Object.keys(value).length === 1 &&\n Object.keys(value)[0] === name) {\n target[name] = value[name];\n }\n else {\n target[name] = value;\n }\n };\n XmlParser.prototype.xml2Json = function (xmlNode, result) {\n if (xmlNode.children && xmlNode.children.length > 0) {\n for (var i = 0; i < xmlNode.children.length; i++) {\n var childNode = xmlNode.children[i];\n var childObject = {};\n this.xml2Json(childNode, childObject);\n this.assignValue(result, childNode.nodeName, childObject);\n }\n }\n else {\n this.assignValue(result, xmlNode.nodeName, xmlNode.textContent);\n }\n };\n XmlParser.prototype.parseXmlString = function (xmlString) {\n var xmlRoot = this.parser.parseFromString(xmlString, \"text/xml\");\n var json = {};\n this.xml2Json(xmlRoot, json);\n return json;\n };\n return XmlParser;\n}());\n/**\n * A definition for filling choices for checkbox, dropdown and radiogroup questions from resfull services.\n * The run method call a restfull service and results can be get on getResultCallback.\n */\nvar ChoicesRestfull = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ChoicesRestfull, _super);\n function ChoicesRestfull() {\n var _this = _super.call(this) || this;\n _this.lastObjHash = \"\";\n _this.isRunningValue = false;\n _this.processedUrl = \"\";\n _this.processedPath = \"\";\n _this.error = null;\n return _this;\n }\n Object.defineProperty(ChoicesRestfull, \"EncodeParameters\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_5__settings__[\"a\" /* settings */].webserviceEncodeParameters;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_5__settings__[\"a\" /* settings */].webserviceEncodeParameters = val;\n },\n enumerable: true,\n configurable: true\n });\n ChoicesRestfull.clearCache = function () {\n ChoicesRestfull.itemsResult = {};\n ChoicesRestfull.sendingSameRequests = {};\n };\n ChoicesRestfull.addSameRequest = function (obj) {\n var hash = obj.objHash;\n var res = ChoicesRestfull.sendingSameRequests[hash];\n if (!res) {\n ChoicesRestfull.sendingSameRequests[obj.objHash] = [];\n return false;\n }\n res.push(obj);\n return true;\n };\n ChoicesRestfull.unregisterSameRequests = function (obj, items) {\n var res = ChoicesRestfull.sendingSameRequests[obj.objHash];\n delete ChoicesRestfull.sendingSameRequests[obj.objHash];\n for (var i = 0; i < res.length; i++) {\n if (!!res[i].getResultCallback) {\n res[i].getResultCallback(items);\n }\n }\n };\n ChoicesRestfull.getCachedItemsResult = function (obj) {\n var hash = obj.objHash;\n var res = ChoicesRestfull.itemsResult[hash];\n if (!res)\n return false;\n if (obj.getResultCallback) {\n obj.getResultCallback(res);\n }\n return true;\n };\n ChoicesRestfull.prototype.run = function (textProcessor) {\n if (textProcessor === void 0) { textProcessor = null; }\n if (!this.url || !this.getResultCallback)\n return;\n this.processedText(textProcessor);\n if (!this.processedUrl) {\n this.doEmptyResultCallback({});\n this.lastObjHash = this.objHash;\n return;\n }\n if (this.lastObjHash === this.objHash)\n return;\n this.lastObjHash = this.objHash;\n this.error = null;\n if (this.useChangedItemsResults())\n return;\n if (ChoicesRestfull.addSameRequest(this))\n return;\n this.sendRequest();\n };\n Object.defineProperty(ChoicesRestfull.prototype, \"isRunning\", {\n get: function () {\n return this.isRunningValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"isWaitingForParameters\", {\n get: function () {\n return this.url && !this.processedUrl;\n },\n enumerable: true,\n configurable: true\n });\n ChoicesRestfull.prototype.useChangedItemsResults = function () {\n return ChoicesRestfull.getCachedItemsResult(this);\n };\n ChoicesRestfull.prototype.doEmptyResultCallback = function (serverResult) {\n var items = [];\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, serverResult);\n }\n this.getResultCallback(items);\n };\n ChoicesRestfull.prototype.processedText = function (textProcessor) {\n if (textProcessor) {\n var pUrl = textProcessor.processTextEx(this.url, false, __WEBPACK_IMPORTED_MODULE_5__settings__[\"a\" /* settings */].webserviceEncodeParameters);\n var pPath = textProcessor.processTextEx(this.path, false, __WEBPACK_IMPORTED_MODULE_5__settings__[\"a\" /* settings */].webserviceEncodeParameters);\n if (!pUrl.hasAllValuesOnLastRun || !pPath.hasAllValuesOnLastRun) {\n this.processedUrl = \"\";\n this.processedPath = \"\";\n }\n else {\n this.processedUrl = pUrl.text;\n this.processedPath = pPath.text;\n }\n }\n else {\n this.processedUrl = this.url;\n this.processedPath = this.path;\n }\n };\n ChoicesRestfull.prototype.parseResponse = function (response) {\n var parsedResponse;\n if (!!response &&\n typeof response.indexOf === \"function\" &&\n response.indexOf(\"<\") === 0) {\n var parser = new XmlParser();\n parsedResponse = parser.parseXmlString(response);\n }\n else {\n try {\n parsedResponse = JSON.parse(response);\n }\n catch (_a) {\n parsedResponse = (response || \"\")\n .split(\"\\n\")\n .map(function (s) { return s.trim(\" \"); })\n .filter(function (s) { return !!s; });\n }\n }\n return parsedResponse;\n };\n ChoicesRestfull.prototype.sendRequest = function () {\n this.isRunningValue = true;\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", this.processedUrl);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n var loadingObjHash = this.objHash;\n xhr.onload = function () {\n self.isRunningValue = false;\n if (xhr.status === 200) {\n self.onLoad(self.parseResponse(xhr.response), loadingObjHash);\n }\n else {\n self.onError(xhr.statusText, xhr.responseText);\n }\n };\n var options = { request: xhr };\n if (!!ChoicesRestfull.onBeforeSendRequest) {\n ChoicesRestfull.onBeforeSendRequest(this, options);\n }\n this.beforeSendRequest();\n options.request.send();\n };\n ChoicesRestfull.prototype.getType = function () {\n return \"choicesByUrl\";\n };\n Object.defineProperty(ChoicesRestfull.prototype, \"isEmpty\", {\n get: function () {\n return !this.url && !this.path && !this.valueName && !this.titleName;\n },\n enumerable: true,\n configurable: true\n });\n ChoicesRestfull.prototype.getCustomPropertiesNames = function () {\n var properties = this.getCustomProperties();\n var res = new Array();\n for (var i = 0; i < properties.length; i++) {\n res.push(this.getCustomPropertyName(properties[i].name));\n }\n return res;\n };\n ChoicesRestfull.prototype.getCustomPropertyName = function (propertyName) {\n return propertyName + \"Name\";\n };\n ChoicesRestfull.prototype.getCustomProperties = function () {\n var properties = __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].getProperties(this.itemValueType);\n var res = [];\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].name === \"value\" ||\n properties[i].name === \"text\" ||\n properties[i].name === \"visibleIf\" ||\n properties[i].name === \"enableIf\")\n continue;\n res.push(properties[i]);\n }\n return res;\n };\n ChoicesRestfull.prototype.setData = function (json) {\n this.clear();\n if (json.url)\n this.url = json.url;\n if (json.path)\n this.path = json.path;\n if (json.valueName)\n this.valueName = json.valueName;\n if (json.titleName)\n this.titleName = json.titleName;\n if (json.allowEmptyResponse !== undefined)\n this.allowEmptyResponse = json.allowEmptyResponse;\n if (json.attachOriginalItems !== undefined)\n this.attachOriginalItems = json.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (json[properties[i]])\n this[properties[i]] = json[properties[i]];\n }\n };\n ChoicesRestfull.prototype.getData = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n if (this.url)\n res[\"url\"] = this.url;\n if (this.path)\n res[\"path\"] = this.path;\n if (this.valueName)\n res[\"valueName\"] = this.valueName;\n if (this.titleName)\n res[\"titleName\"] = this.titleName;\n if (this.allowEmptyResponse)\n res[\"allowEmptyResponse\"] = this.allowEmptyResponse;\n if (this.attachOriginalItems)\n res[\"attachOriginalItems\"] = this.attachOriginalItems;\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n res[properties[i]] = this[properties[i]];\n }\n return res;\n };\n Object.defineProperty(ChoicesRestfull.prototype, \"url\", {\n get: function () {\n return this.getPropertyValue(\"url\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"url\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"path\", {\n get: function () {\n return this.getPropertyValue(\"path\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"path\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"valueName\", {\n get: function () {\n return this.getPropertyValue(\"valueName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"titleName\", {\n get: function () {\n return this.getPropertyValue(\"titleName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"titleName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"allowEmptyResponse\", {\n get: function () {\n return this.getPropertyValue(\"allowEmptyResponse\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowEmptyResponse\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"attachOriginalItems\", {\n get: function () {\n return this.getPropertyValue(\"attachOriginalItems\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"attachOriginalItems\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChoicesRestfull.prototype, \"itemValueType\", {\n get: function () {\n if (!this.owner)\n return \"itemvalue\";\n var prop = __WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].findProperty(this.owner.getType(), \"choices\");\n if (!prop)\n return \"itemvalue\";\n if (prop.type == \"itemvalue[]\")\n return \"itemvalue\";\n return prop.type;\n },\n enumerable: true,\n configurable: true\n });\n ChoicesRestfull.prototype.clear = function () {\n this.url = \"\";\n this.path = \"\";\n this.valueName = \"\";\n this.titleName = \"\";\n var properties = this.getCustomPropertiesNames();\n for (var i = 0; i < properties.length; i++) {\n if (this[properties[i]])\n this[properties[i]] = \"\";\n }\n };\n ChoicesRestfull.prototype.beforeSendRequest = function () {\n if (!!this.beforeSendRequestCallback) {\n this.beforeSendRequestCallback();\n }\n };\n ChoicesRestfull.prototype.onLoad = function (result, loadingObjHash) {\n if (loadingObjHash === void 0) { loadingObjHash = null; }\n if (!loadingObjHash) {\n loadingObjHash = this.objHash;\n }\n var items = new Array();\n var updatedResult = this.getResultAfterPath(result);\n if (updatedResult && updatedResult[\"length\"]) {\n for (var i = 0; i < updatedResult.length; i++) {\n var itemValue = updatedResult[i];\n if (!itemValue)\n continue;\n var value = !!this.getItemValueCallback\n ? this.getItemValueCallback(itemValue)\n : this.getValue(itemValue);\n var title = this.getTitle(itemValue);\n var item = new __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */](value, title);\n this.setCustomProperties(item, itemValue);\n if (this.attachOriginalItems) {\n item.originalItem = itemValue;\n }\n items.push(item);\n }\n }\n else {\n if (!this.allowEmptyResponse) {\n this.error = new __WEBPACK_IMPORTED_MODULE_4__error__[\"k\" /* WebRequestEmptyError */](null, this.owner);\n }\n }\n if (this.updateResultCallback) {\n items = this.updateResultCallback(items, result);\n }\n ChoicesRestfull.itemsResult[loadingObjHash] = items;\n this.callResultCallback(items, loadingObjHash);\n ChoicesRestfull.unregisterSameRequests(this, items);\n };\n ChoicesRestfull.prototype.callResultCallback = function (items, loadingObjHash) {\n if (loadingObjHash != this.objHash)\n return;\n this.getResultCallback(items);\n };\n ChoicesRestfull.prototype.setCustomProperties = function (item, itemValue) {\n var properties = this.getCustomProperties();\n for (var i = 0; i < properties.length; i++) {\n var prop = properties[i];\n var val = this.getValueCore(itemValue, this.getPropertyBinding(prop.name));\n if (!this.isValueEmpty(val)) {\n item[prop.name] = val;\n }\n }\n };\n ChoicesRestfull.prototype.getPropertyBinding = function (propertyName) {\n if (this[this.getCustomPropertyName(propertyName)])\n return this[this.getCustomPropertyName(propertyName)];\n if (this[propertyName])\n return this[propertyName];\n return propertyName;\n };\n ChoicesRestfull.prototype.onError = function (status, response) {\n this.error = new __WEBPACK_IMPORTED_MODULE_4__error__[\"l\" /* WebRequestError */](status, response, this.owner);\n this.doEmptyResultCallback(response);\n ChoicesRestfull.unregisterSameRequests(this, []);\n };\n ChoicesRestfull.prototype.getResultAfterPath = function (result) {\n if (!result)\n return result;\n if (!this.processedPath)\n return result;\n var pathes = this.getPathes();\n for (var i = 0; i < pathes.length; i++) {\n result = result[pathes[i]];\n if (!result)\n return null;\n }\n return result;\n };\n ChoicesRestfull.prototype.getPathes = function () {\n var pathes = [];\n if (this.processedPath.indexOf(\";\") > -1) {\n pathes = this.path.split(\";\");\n }\n else {\n pathes = this.processedPath.split(\",\");\n }\n if (pathes.length == 0)\n pathes.push(this.processedPath);\n return pathes;\n };\n ChoicesRestfull.prototype.getValue = function (item) {\n if (!item)\n return null;\n if (this.valueName)\n return this.getValueCore(item, this.valueName);\n if (!(item instanceof Object))\n return item;\n var len = Object.keys(item).length;\n if (len < 1)\n return null;\n return item[Object.keys(item)[0]];\n };\n ChoicesRestfull.prototype.getTitle = function (item) {\n var title = this.titleName ? this.titleName : \"title\";\n return this.getValueCore(item, title);\n };\n ChoicesRestfull.prototype.getValueCore = function (item, property) {\n if (!item)\n return null;\n if (property.indexOf(\".\") < 0)\n return item[property];\n var properties = property.split(\".\");\n for (var i = 0; i < properties.length; i++) {\n item = item[properties[i]];\n if (!item)\n return null;\n }\n return item;\n };\n Object.defineProperty(ChoicesRestfull.prototype, \"objHash\", {\n get: function () {\n return (this.processedUrl +\n \";\" +\n this.processedPath +\n \";\" +\n this.valueName +\n \";\" +\n this.titleName);\n },\n enumerable: true,\n configurable: true\n });\n ChoicesRestfull.itemsResult = {};\n ChoicesRestfull.sendingSameRequests = {};\n return ChoicesRestfull;\n}(__WEBPACK_IMPORTED_MODULE_1__base__[\"a\" /* Base */]));\n\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"choicesByUrl\", [\n \"url\",\n \"path\",\n \"valueName\",\n \"titleName\",\n { name: \"allowEmptyResponse:boolean\", default: false },\n { name: \"attachOriginalItems:boolean\", default: false, visible: false }\n], function () {\n return new ChoicesRestfull();\n});\n\n\n/***/ }),\n/* 76 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__expressions_expressionParser__ = __webpack_require__(142);\n/* unused harmony export ConditionsParserError */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ConditionsParser; });\n\nvar ConditionsParserError = /** @class */ (function () {\n function ConditionsParserError(at, code) {\n this.at = at;\n this.code = code;\n }\n return ConditionsParserError;\n}());\n\nvar ConditionsParser = /** @class */ (function () {\n function ConditionsParser() {\n }\n ConditionsParser.prototype.patchExpression = function (text) {\n return text\n .replace(/=>/g, \">=\")\n .replace(/=/g, \"!=\")\n .replace(/==/g, \"= \")\n .replace(/equals/g, \"equal \")\n .replace(/notequals/g, \"notequal \");\n };\n ConditionsParser.prototype.createCondition = function (text) {\n return this.parseExpression(text);\n };\n ConditionsParser.prototype.parseExpression = function (text) {\n try {\n var result = ConditionsParser.parserCache[text];\n if (result === undefined) {\n result = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__expressions_expressionParser__[\"a\" /* parse */])(this.patchExpression(text));\n if (!result.hasAsyncFunction()) {\n ConditionsParser.parserCache[text] = result;\n }\n }\n return result;\n }\n catch (e) {\n if (e instanceof __WEBPACK_IMPORTED_MODULE_0__expressions_expressionParser__[\"b\" /* SyntaxError */]) {\n this.conditionError = new ConditionsParserError(e.location.start.offset, e.message);\n }\n }\n };\n Object.defineProperty(ConditionsParser.prototype, \"error\", {\n get: function () {\n return this.conditionError;\n },\n enumerable: true,\n configurable: true\n });\n ConditionsParser.parserCache = {};\n return ConditionsParser;\n}());\n\n\n\n/***/ }),\n/* 77 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return dxSurveyService; });\n\n/**\n * The class contains methods to work with api.surveyjs.io service.\n */\nvar dxSurveyService = /** @class */ (function () {\n function dxSurveyService() {\n }\n Object.defineProperty(dxSurveyService, \"serviceUrl\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_0__settings__[\"a\" /* settings */].surveyServiceUrl;\n },\n set: function (val) {\n __WEBPACK_IMPORTED_MODULE_0__settings__[\"a\" /* settings */].surveyServiceUrl = val;\n },\n enumerable: true,\n configurable: true\n });\n dxSurveyService.prototype.loadSurvey = function (surveyId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getSurvey?surveyId=\" + surveyId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n onLoad(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.getSurveyJsonAndIsCompleted = function (surveyId, clientId, onLoad) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", dxSurveyService.serviceUrl +\n \"/getSurveyAndIsCompleted?surveyId=\" +\n surveyId +\n \"&clientId=\" +\n clientId);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n xhr.onload = function () {\n var result = JSON.parse(xhr.response);\n var surveyJson = result ? result.survey : null;\n var isCompleted = result ? result.isCompleted : null;\n onLoad(xhr.status == 200, surveyJson, isCompleted, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.sendResult = function (postId, result, onSendResult, clientId, isPartialCompleted) {\n if (clientId === void 0) { clientId = null; }\n if (isPartialCompleted === void 0) { isPartialCompleted = false; }\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/post/\");\n xhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n var data = { postId: postId, surveyResult: JSON.stringify(result) };\n if (clientId)\n data[\"clientId\"] = clientId;\n if (isPartialCompleted)\n data[\"isPartialCompleted\"] = true;\n var dataStringify = JSON.stringify(data);\n var self = this;\n xhr.onload = xhr.onerror = function () {\n if (!onSendResult)\n return;\n onSendResult(xhr.status === 200, xhr.response, xhr);\n };\n xhr.send(dataStringify);\n };\n dxSurveyService.prototype.sendFile = function (postId, file, onSendFile) {\n var xhr = new XMLHttpRequest();\n xhr.onload = xhr.onerror = function () {\n if (!onSendFile)\n return;\n onSendFile(xhr.status == 200, JSON.parse(xhr.response));\n };\n xhr.open(\"POST\", dxSurveyService.serviceUrl + \"/upload/\", true);\n var formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"postId\", postId);\n xhr.send(formData);\n };\n dxSurveyService.prototype.getResult = function (resultId, name, onGetResult) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&name=\" + name;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/getResult?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n var list = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n list = [];\n for (var key in result.QuestionResult) {\n var el = { name: key, value: result.QuestionResult[key] };\n list.push(el);\n }\n }\n onGetResult(xhr.status == 200, result, list, xhr.response);\n };\n xhr.send();\n };\n dxSurveyService.prototype.isCompleted = function (resultId, clientId, onIsCompleted) {\n var xhr = new XMLHttpRequest();\n var data = \"resultId=\" + resultId + \"&clientId=\" + clientId;\n xhr.open(\"GET\", dxSurveyService.serviceUrl + \"/isCompleted?\" + data);\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n var self = this;\n xhr.onload = function () {\n var result = null;\n if (xhr.status == 200) {\n result = JSON.parse(xhr.response);\n }\n onIsCompleted(xhr.status == 200, result, xhr.response);\n };\n xhr.send();\n };\n return dxSurveyService;\n}());\n\n\n\n/***/ }),\n/* 78 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return englishStrings; });\n//Uncomment this line on creating a translation file\n//import { surveyLocalization } from \"../surveyStrings\";\nvar englishStrings = {\n pagePrevText: \"Previous\",\n pageNextText: \"Next\",\n completeText: \"Complete\",\n previewText: \"Preview\",\n editText: \"Edit\",\n startSurveyText: \"Start\",\n otherItemText: \"Other (describe)\",\n noneItemText: \"None\",\n selectAllItemText: \"Select All\",\n progressText: \"Page {0} of {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Answered {0}/{1} questions\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Thank you for completing the survey!\",\n completingSurveyBefore: \"Our records show that you have already completed this survey.\",\n loadingSurvey: \"Loading Survey...\",\n optionsCaption: \"Choose...\",\n value: \"value\",\n requiredError: \"Please answer the question.\",\n requiredErrorInPanel: \"Please answer at least one question.\",\n requiredInAllRowsError: \"Please answer questions in all rows.\",\n numericError: \"The value should be numeric.\",\n textMinLength: \"Please enter at least {0} characters.\",\n textMaxLength: \"Please enter less than {0} characters.\",\n textMinMaxLength: \"Please enter more than {0} and less than {1} characters.\",\n minRowCountError: \"Please fill in at least {0} rows.\",\n minSelectError: \"Please select at least {0} variants.\",\n maxSelectError: \"Please select no more than {0} variants.\",\n numericMinMax: \"The '{0}' should be equal or more than {1} and equal or less than {2}\",\n numericMin: \"The '{0}' should be equal or more than {1}\",\n numericMax: \"The '{0}' should be equal or less than {1}\",\n invalidEmail: \"Please enter a valid e-mail address.\",\n invalidExpression: \"The expression: {0} should return 'true'.\",\n urlRequestError: \"The request returned error '{0}'. {1}\",\n urlGetChoicesError: \"The request returned empty data or the 'path' property is incorrect\",\n exceedMaxSize: \"The file size should not exceed {0}.\",\n otherRequiredError: \"Please enter the other value.\",\n uploadingFile: \"Your file is uploading. Please wait several seconds and try again.\",\n loadingFile: \"Loading...\",\n chooseFile: \"Choose file(s)...\",\n noFileChosen: \"No file chosen\",\n confirmDelete: \"Do you want to delete the record?\",\n keyDuplicationError: \"This value should be unique.\",\n addColumn: \"Add column\",\n addRow: \"Add row\",\n removeRow: \"Remove\",\n addPanel: \"Add new\",\n removePanel: \"Remove\",\n choices_Item: \"item\",\n matrix_column: \"Column\",\n matrix_row: \"Row\",\n savingData: \"The results are saving on the server...\",\n savingDataError: \"An error occurred and we could not save the results.\",\n savingDataSuccess: \"The results were saved successfully!\",\n saveAgainButton: \"Try again\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"You have spent {0} on this page and {1} in total.\",\n timerSpentPage: \"You have spent {0} on this page.\",\n timerSpentSurvey: \"You have spent {0} in total.\",\n timerLimitAll: \"You have spent {0} of {1} on this page and {2} of {3} in total.\",\n timerLimitPage: \"You have spent {0} of {1} on this page.\",\n timerLimitSurvey: \"You have spent {0} of {1} in total.\",\n cleanCaption: \"Clean\",\n clearCaption: \"Clear\",\n chooseFileCaption: \"Choose file\",\n removeFileCaption: \"Remove this file\",\n booleanCheckedLabel: \"Yes\",\n booleanUncheckedLabel: \"No\",\n confirmRemoveFile: \"Are you sure that you want to remove this file: {0}?\",\n confirmRemoveAllFiles: \"Are you sure that you want to remove all files?\",\n questionTitlePatternText: \"Question Title\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n//surveyLocalization.locales[\"en\"] = englishStrings;\n//surveyLocalization.localeNames[\"en\"] = \"English\";\n\n\n/***/ }),\n/* 79 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionMatrixBaseModel; });\n\n\n\n\n\n\n/**\n * A Model for a matrix base question.\n */\nvar QuestionMatrixBaseModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixBaseModel, _super);\n function QuestionMatrixBaseModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.generatedVisibleRows = null;\n _this.generatedTotalRow = null;\n _this.filteredRows = null;\n _this.filteredColumns = null;\n _this.columns = _this.createColumnValues();\n _this.rows = _this.createItemValues(\"rows\");\n return _this;\n }\n QuestionMatrixBaseModel.prototype.createColumnValues = function () {\n return this.createItemValues(\"columns\");\n };\n QuestionMatrixBaseModel.prototype.getType = function () {\n return \"matrixbase\";\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"showHeader\", {\n /**\n * Set this property to false, to hide table header. The default value is true.\n */\n get: function () {\n return this.getPropertyValue(\"showHeader\");\n },\n set: function (val) {\n this.setPropertyValue(\"showHeader\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columns\", {\n /**\n * The list of columns. A column has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"columns\");\n },\n set: function (newValue) {\n this.setPropertyValue(\"columns\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleColumns\", {\n get: function () {\n return !!this.filteredColumns ? this.filteredColumns : this.columns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rows\", {\n /**\n * The list of rows. A row has a value and an optional text\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (newValue) {\n var newRows = this.processRowsOnSet(newValue);\n this.setPropertyValue(\"rows\", newRows);\n this.filterItems();\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.processRowsOnSet = function (newRows) {\n return newRows;\n };\n QuestionMatrixBaseModel.prototype.getVisibleRows = function () {\n return [];\n };\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"rowsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each row item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see visibleIf\n */\n get: function () {\n return this.getPropertyValue(\"rowsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixBaseModel.prototype, \"columnsVisibleIf\", {\n /**\n * An expression that returns true or false. It runs against each column item and if for this item it returns true, then the item is visible otherwise the item becomes invisible. Please use {item} to get the current item value in the expression.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getPropertyValue(\"columnsVisibleIf\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"columnsVisibleIf\", val);\n this.filterItems();\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixBaseModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runItemsCondition(values, properties);\n };\n QuestionMatrixBaseModel.prototype.filterItems = function () {\n if (this.areInvisibleElementsShowing) {\n this.onRowsChanged();\n return false;\n }\n if (this.isLoadingFromJson || !this.data)\n return false;\n return this.runItemsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionMatrixBaseModel.prototype.onColumnsChanged = function () { };\n QuestionMatrixBaseModel.prototype.onRowsChanged = function () {\n this.fireCallback(this.visibleRowsChangedCallback);\n };\n QuestionMatrixBaseModel.prototype.shouldRunColumnExpression = function () {\n return true;\n };\n QuestionMatrixBaseModel.prototype.hasRowsAsItems = function () {\n return true;\n };\n QuestionMatrixBaseModel.prototype.runItemsCondition = function (values, properties) {\n var oldVisibleRows = null;\n if (!!this.filteredRows && !__WEBPACK_IMPORTED_MODULE_5__helpers__[\"a\" /* Helpers */].isValueEmpty(this.defaultValue)) {\n oldVisibleRows = [];\n for (var i = 0; i < this.filteredRows.length; i++) {\n oldVisibleRows.push(this.filteredRows[i]);\n }\n }\n var hasChanges = this.hasRowsAsItems() && this.runConditionsForRows(values, properties);\n var hasColumnsChanged = this.runConditionsForColumns(values, properties);\n hasChanges = hasColumnsChanged || hasChanges;\n if (hasChanges) {\n if (!!this.filteredColumns || !!this.filteredRows) {\n this.clearIncorrectValues();\n }\n if (!!oldVisibleRows) {\n this.restoreNewVisibleRowsValues(oldVisibleRows);\n }\n this.generatedVisibleRows = null;\n if (hasColumnsChanged) {\n this.onColumnsChanged();\n }\n this.onRowsChanged();\n }\n return hasChanges;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForRows = function (values, properties) {\n var runner = !!this.rowsVisibleIf\n ? new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"b\" /* ConditionRunner */](this.rowsVisibleIf)\n : null;\n this.filteredRows = [];\n var hasChanged = __WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].runConditionsForItems(this.rows, this.filteredRows, runner, values, properties);\n if (this.filteredRows.length === this.rows.length) {\n this.filteredRows = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.runConditionsForColumns = function (values, properties) {\n var runner = !!this.columnsVisibleIf\n ? new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"b\" /* ConditionRunner */](this.columnsVisibleIf)\n : null;\n this.filteredColumns = [];\n var hasChanged = __WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].runConditionsForItems(this.columns, this.filteredColumns, runner, values, properties, this.shouldRunColumnExpression());\n if (this.filteredColumns.length === this.columns.length) {\n this.filteredColumns = null;\n }\n return hasChanged;\n };\n QuestionMatrixBaseModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var columns = !!this.filteredColumns ? this.filteredColumns : this.columns;\n for (var key in val) {\n if (__WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].getItemByValue(rows, key) &&\n __WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].getItemByValue(columns, val[key])) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixBaseModel.prototype.clearInvisibleValuesInRows = function () {\n if (this.isEmpty())\n return;\n var newData = __WEBPACK_IMPORTED_MODULE_5__helpers__[\"a\" /* Helpers */].getUnbindValue(this.value);\n var rows = this.rows;\n for (var i = 0; i < rows.length; i++) {\n var key = rows[i].value;\n if (!!newData[key] && !rows[i].isVisible) {\n delete newData[key];\n }\n }\n if (__WEBPACK_IMPORTED_MODULE_5__helpers__[\"a\" /* Helpers */].isTwoValueEquals(newData, this.value))\n return;\n this.value = newData;\n };\n QuestionMatrixBaseModel.prototype.restoreNewVisibleRowsValues = function (oldVisibleRows) {\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n var val = this.defaultValue;\n var newValue = __WEBPACK_IMPORTED_MODULE_5__helpers__[\"a\" /* Helpers */].getUnbindValue(this.value);\n var isChanged = false;\n for (var key in val) {\n if (__WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].getItemByValue(rows, key) &&\n !__WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].getItemByValue(oldVisibleRows, key)) {\n if (newValue == null)\n newValue = {};\n newValue[key] = val[key];\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newValue;\n }\n };\n return QuestionMatrixBaseModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"matrixbase\", [\n \"columnsVisibleIf:condition\",\n \"rowsVisibleIf:condition\",\n { name: \"showHeader:boolean\", default: true }\n], undefined, \"question\");\n\n\n/***/ }),\n/* 80 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__panel__ = __webpack_require__(20);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PageModel; });\n\n\n\n\n/**\n * The page object. It has elements collection, that contains questions and panels.\n */\nvar PageModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(PageModel, _super);\n function PageModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.hasShownValue = false;\n _this.isRandomizing = false;\n /**\n * Time in seconds end-user spent on this page\n */\n _this.timeSpent = 0;\n var self = _this;\n _this.locTitle.onGetTextCallback = function (text) {\n if (self.num > 0)\n return self.num + \". \" + text;\n return text;\n };\n return _this;\n }\n PageModel.prototype.getType = function () {\n return \"page\";\n };\n PageModel.prototype.toString = function () {\n return this.name;\n };\n Object.defineProperty(PageModel.prototype, \"isPage\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n PageModel.prototype.delete = function () {\n if (!!this.survey) {\n this.removeSelfFromList(this.survey.pages);\n }\n };\n PageModel.prototype.onFirstRendering = function () {\n if (this.wasShown)\n return;\n _super.prototype.onFirstRendering.call(this);\n };\n Object.defineProperty(PageModel.prototype, \"visibleIndex\", {\n /**\n * The visible index of the page. It has values from 0 to visible page count - 1.\n * @see SurveyModel.visiblePages\n * @see SurveyModel.pages\n */\n get: function () {\n return this.getPropertyValue(\"visibleIndex\", -1);\n },\n set: function (val) {\n this.setPropertyValue(\"visibleIndex\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"isStarted\", {\n /**\n * Returns true, if the page is started page in the survey. It can be shown on the start only and the end-user could not comeback to it after it passed it.\n */\n get: function () {\n return this.survey && this.survey.isPageStarted(this);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"cssClasses\", {\n get: function () {\n var css = this.css;\n var classes = { page: {}, pageTitle: \"\", pageDescription: \"\", row: \"\" };\n this.copyCssClasses(classes.page, css.page);\n if (!!css.pageTitle) {\n classes.pageTitle = css.pageTitle;\n }\n if (!!css.pageDescription) {\n classes.pageDescription = css.pageDescription;\n }\n if (!!css.row) {\n classes.row = css.row;\n }\n if (this.survey) {\n this.survey.updatePageCssClasses(this, classes);\n }\n return classes;\n },\n enumerable: true,\n configurable: true\n });\n PageModel.prototype.getIsPageVisible = function (exceptionQuestion) {\n if (this.isStarted)\n return false;\n return _super.prototype.getIsPageVisible.call(this, exceptionQuestion);\n };\n Object.defineProperty(PageModel.prototype, \"num\", {\n get: function () {\n return this.getPropertyValue(\"num\", -1);\n },\n set: function (val) {\n if (this.num == val)\n return;\n this.setPropertyValue(\"num\", val);\n this.onNumChanged(val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"navigationButtonsVisibility\", {\n /**\n * Set this property to \"hide\" to make \"Prev\", \"Next\" and \"Complete\" buttons are invisible for this page. Set this property to \"show\" to make these buttons visible, even if survey showNavigationButtons property is false.\n * @see SurveyMode.showNavigationButtons\n */\n get: function () {\n return this.getPropertyValue(\"navigationButtonsVisibility\");\n },\n set: function (val) {\n this.setPropertyValue(\"navigationButtonsVisibility\", val.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"wasShown\", {\n /**\n * The property returns true, if the page has been shown to the end-user.\n */\n get: function () {\n return this.hasShownValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"hasShown\", {\n get: function () {\n return this.wasShown;\n },\n enumerable: true,\n configurable: true\n });\n PageModel.prototype.setWasShown = function (val) {\n if (val == this.hasShownValue)\n return;\n this.hasShownValue = val;\n if (this.isDesignMode)\n return;\n if (val == true && this.areQuestionsRandomized) {\n this.randomizeElements();\n }\n };\n PageModel.prototype.randomizeElements = function () {\n if (this.isRandomizing)\n return;\n this.isRandomizing = true;\n var oldElements = [];\n var elements = this.elements;\n for (var i = 0; i < elements.length; i++) {\n oldElements.push(elements[i]);\n }\n var newElements = __WEBPACK_IMPORTED_MODULE_2__helpers__[\"a\" /* Helpers */].randomizeArray(oldElements);\n this.elements.splice(0, this.elements.length);\n for (var i = 0; i < newElements.length; i++) {\n this.elements.push(newElements[i]);\n }\n this.isRandomizing = false;\n };\n Object.defineProperty(PageModel.prototype, \"areQuestionsRandomized\", {\n /**\n * The property returns true, if the elements are randomized on the page\n * @see hasShown\n * @see questionsOrder\n * @see SurveyModel.questionsOrder\n */\n get: function () {\n var order = this.questionsOrder == \"default\" && this.survey\n ? this.survey.questionsOrder\n : this.questionsOrder;\n return order == \"random\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageModel.prototype, \"questionsOrder\", {\n /**\n * Use this property to randomize questions. Set it to 'random' to randomize questions, 'initial' to keep them in the same order or 'default' to use the Survey questionsOrder property\n * @see SurveyModel.questionsOrder\n * @see areQuestionsRandomized\n */\n get: function () {\n return this.getPropertyValue(\"questionsOrder\");\n },\n set: function (val) {\n this.setPropertyValue(\"questionsOrder\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Call it to scroll to the page top.\n */\n PageModel.prototype.scrollToTop = function () {\n if (!!this.survey) {\n this.survey.scrollElementToTop(this, null, this, this.id);\n }\n };\n // public get timeSpent(): number {\n // return this.getPropertyValue(\"timeSpent\", 0);\n // }\n // public set timeSpent(val: number) {\n // this.setPropertyValue(\"timeSpent\", val);\n // }\n /**\n * Returns the list of all panels in the page\n */\n PageModel.prototype.getPanels = function (visibleOnly, includingDesignTime) {\n if (visibleOnly === void 0) { visibleOnly = false; }\n if (includingDesignTime === void 0) { includingDesignTime = false; }\n var result = new Array();\n this.addPanelsIntoList(result, visibleOnly, includingDesignTime);\n return result;\n };\n Object.defineProperty(PageModel.prototype, \"maxTimeToFinish\", {\n /**\n * The maximum time in seconds that end-user has to complete the page. If the value is 0 or less, the end-user has unlimited number of time to finish the page.\n * @see startTimer\n * @see SurveyModel.maxTimeToFinishPage\n */\n get: function () {\n return this.getPropertyValue(\"maxTimeToFinish\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxTimeToFinish\", val);\n },\n enumerable: true,\n configurable: true\n });\n PageModel.prototype.onNumChanged = function (value) { };\n PageModel.prototype.onVisibleChanged = function () {\n if (this.isRandomizing)\n return;\n _super.prototype.onVisibleChanged.call(this);\n if (this.survey != null) {\n this.survey.pageVisibilityChanged(this, this.isVisible);\n }\n };\n PageModel.prototype.dragDropStart = function (src, target, nestedPanelDepth) {\n if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; }\n this.dragDropInfo = new __WEBPACK_IMPORTED_MODULE_3__panel__[\"a\" /* DragDropInfo */](src, target, nestedPanelDepth);\n };\n PageModel.prototype.dragDropMoveTo = function (destination, isBottom, isEdge) {\n if (isBottom === void 0) { isBottom = false; }\n if (isEdge === void 0) { isEdge = false; }\n if (!this.dragDropInfo)\n return false;\n this.dragDropInfo.destination = destination;\n this.dragDropInfo.isBottom = isBottom;\n this.dragDropInfo.isEdge = isEdge;\n this.correctDragDropInfo(this.dragDropInfo);\n if (!this.dragDropCanDropTagert())\n return false;\n if (!this.dragDropCanDropSource() || !this.dragDropAllowFromSurvey()) {\n if (!!this.dragDropInfo.source) {\n var row = this.dragDropFindRow(this.dragDropInfo.target);\n this.updateRowsRemoveElementFromRow(this.dragDropInfo.target, row);\n }\n return false;\n }\n this.dragDropAddTarget(this.dragDropInfo);\n return true;\n };\n PageModel.prototype.correctDragDropInfo = function (dragDropInfo) {\n if (!dragDropInfo.destination)\n return;\n var panel = dragDropInfo.destination.isPanel\n ? dragDropInfo.destination\n : null;\n if (!panel)\n return;\n if (!dragDropInfo.target.isLayoutTypeSupported(panel.getChildrenLayoutType())) {\n dragDropInfo.isEdge = true;\n }\n };\n PageModel.prototype.dragDropAllowFromSurvey = function () {\n var dest = this.dragDropInfo.destination;\n if (!dest || !this.survey)\n return true;\n var insertBefore = null;\n var insertAfter = null;\n var parent = dest.isPage || (!this.dragDropInfo.isEdge && dest.isPanel)\n ? dest\n : dest.parent;\n if (!dest.isPage) {\n var container = dest.parent;\n if (!!container) {\n var elements = container.elements;\n var index = elements.indexOf(dest);\n if (index > -1) {\n insertBefore = dest;\n insertAfter = dest;\n if (this.dragDropInfo.isBottom) {\n insertBefore =\n index < elements.length - 1 ? elements[index + 1] : null;\n }\n else {\n insertAfter = index > 0 ? elements[index - 1] : null;\n }\n }\n }\n }\n var options = {\n target: this.dragDropInfo.target,\n source: this.dragDropInfo.source,\n parent: parent,\n insertAfter: insertAfter,\n insertBefore: insertBefore\n };\n return this.survey.dragAndDropAllow(options);\n };\n PageModel.prototype.dragDropFinish = function (isCancel) {\n if (isCancel === void 0) { isCancel = false; }\n if (!this.dragDropInfo)\n return;\n var target = this.dragDropInfo.target;\n var row = this.dragDropFindRow(target);\n var targetIndex = this.dragDropGetElementIndex(target, row);\n this.updateRowsRemoveElementFromRow(target, row);\n if (!isCancel && !!row) {\n var src = this.dragDropInfo.source;\n var isSamePanel = false;\n if (!!src && !!src.parent) {\n isSamePanel = row.panel == src.parent;\n if (isSamePanel) {\n row.panel.dragDropMoveElement(src, target, targetIndex);\n targetIndex = -1;\n }\n else {\n src.parent.removeElement(src);\n }\n }\n if (targetIndex > -1) {\n row.panel.addElement(target, targetIndex);\n }\n }\n this.dragDropInfo = null;\n return !isCancel ? target : null;\n };\n PageModel.prototype.dragDropGetElementIndex = function (target, row) {\n if (!row)\n return -1;\n var index = row.elements.indexOf(target);\n if (row.index == 0)\n return index;\n var prevRow = row.panel.rows[row.index - 1];\n var prevElement = prevRow.elements[prevRow.elements.length - 1];\n return index + row.panel.elements.indexOf(prevElement) + 1;\n };\n PageModel.prototype.dragDropCanDropTagert = function () {\n var destination = this.dragDropInfo.destination;\n if (!destination || destination.isPage)\n return true;\n return this.dragDropCanDropCore(this.dragDropInfo.target, destination);\n };\n PageModel.prototype.dragDropCanDropSource = function () {\n var source = this.dragDropInfo.source;\n if (!source)\n return true;\n var destination = this.dragDropInfo.destination;\n if (!this.dragDropCanDropCore(source, destination))\n return false;\n return this.dragDropCanDropNotNext(source, destination, this.dragDropInfo.isEdge, this.dragDropInfo.isBottom);\n };\n PageModel.prototype.dragDropCanDropCore = function (target, destination) {\n if (!destination)\n return true;\n if (this.dragDropIsSameElement(destination, target))\n return false;\n if (target.isPanel) {\n var pnl = target;\n if (pnl.containsElement(destination) ||\n !!pnl.getElementByName(destination.name))\n return false;\n }\n return true;\n };\n PageModel.prototype.dragDropCanDropNotNext = function (source, destination, isEdge, isBottom) {\n if (!destination || (destination.isPanel && !isEdge))\n return true;\n if (source.parent !== destination.parent)\n return true;\n var pnl = source.parent;\n var srcIndex = pnl.elements.indexOf(source);\n var destIndex = pnl.elements.indexOf(destination);\n if (destIndex < srcIndex && !isBottom)\n destIndex--;\n if (isBottom)\n destIndex++;\n return srcIndex < destIndex\n ? destIndex - srcIndex > 1\n : srcIndex - destIndex > 0;\n };\n PageModel.prototype.dragDropIsSameElement = function (el1, el2) {\n return el1 == el2 || el1.name == el2.name;\n };\n return PageModel;\n}(__WEBPACK_IMPORTED_MODULE_3__panel__[\"b\" /* PanelModelBase */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"page\", [\n {\n name: \"navigationButtonsVisibility\",\n default: \"inherit\",\n choices: [\"inherit\", \"show\", \"hide\"]\n },\n {\n name: \"questionsOrder\",\n default: \"default\",\n choices: [\"default\", \"initial\", \"random\"]\n },\n { name: \"maxTimeToFinish:number\", default: 0, minValue: 0 }\n], function () {\n return new PageModel();\n}, \"panelbase\");\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(9);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionCustomWidget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CustomWidgetCollection; });\n\nvar QuestionCustomWidget = /** @class */ (function () {\n function QuestionCustomWidget(name, widgetJson) {\n this.name = name;\n this.widgetJson = widgetJson;\n this.isFirstRender = true;\n this.htmlTemplate = widgetJson.htmlTemplate ? widgetJson.htmlTemplate : \"\";\n }\n QuestionCustomWidget.prototype.afterRender = function (question, el) {\n var _this = this;\n if (this.isFirstRender) {\n this.isFirstRender = false;\n question.survey.onLocaleChangedEvent.add(function () {\n _this.widgetJson.willUnmount(question, el);\n _this.widgetJson.afterRender(question, el);\n });\n }\n if (this.widgetJson.afterRender)\n this.widgetJson.afterRender(question, el);\n };\n QuestionCustomWidget.prototype.willUnmount = function (question, el) {\n if (this.widgetJson.willUnmount)\n this.widgetJson.willUnmount(question, el);\n };\n QuestionCustomWidget.prototype.getDisplayValue = function (question, value) {\n if (value === void 0) { value = undefined; }\n if (this.widgetJson.getDisplayValue)\n return this.widgetJson.getDisplayValue(question, value);\n return null;\n };\n QuestionCustomWidget.prototype.isFit = function (question) {\n if (this.isLibraryLoaded() && this.widgetJson.isFit)\n return this.widgetJson.isFit(question);\n return false;\n };\n QuestionCustomWidget.prototype.init = function () {\n if (this.widgetJson.init) {\n this.widgetJson.init();\n }\n };\n QuestionCustomWidget.prototype.activatedByChanged = function (activatedBy) {\n if (this.isLibraryLoaded() && this.widgetJson.activatedByChanged) {\n this.widgetJson.activatedByChanged(activatedBy);\n }\n };\n QuestionCustomWidget.prototype.isLibraryLoaded = function () {\n if (this.widgetJson.widgetIsLoaded)\n return this.widgetJson.widgetIsLoaded() == true;\n return true;\n };\n Object.defineProperty(QuestionCustomWidget.prototype, \"isDefaultRender\", {\n get: function () {\n return this.widgetJson.isDefaultRender;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfQuestionType\", {\n get: function () {\n return this.widgetJson.pdfQuestionType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCustomWidget.prototype, \"pdfRender\", {\n get: function () {\n return this.widgetJson.pdfRender;\n },\n enumerable: true,\n configurable: true\n });\n return QuestionCustomWidget;\n}());\n\nvar CustomWidgetCollection = /** @class */ (function () {\n function CustomWidgetCollection() {\n this.widgetsValues = [];\n this.widgetsActivatedBy = {};\n this.onCustomWidgetAdded = new __WEBPACK_IMPORTED_MODULE_0__base__[\"b\" /* Event */]();\n }\n Object.defineProperty(CustomWidgetCollection.prototype, \"widgets\", {\n get: function () {\n return this.widgetsValues;\n },\n enumerable: true,\n configurable: true\n });\n CustomWidgetCollection.prototype.add = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n this.addCustomWidget(widgetJson, activatedBy);\n };\n CustomWidgetCollection.prototype.addCustomWidget = function (widgetJson, activatedBy) {\n if (activatedBy === void 0) { activatedBy = \"property\"; }\n var name = widgetJson.name;\n if (!name) {\n name = \"widget_\" + this.widgets.length + 1;\n }\n var customWidget = new QuestionCustomWidget(name, widgetJson);\n this.widgetsValues.push(customWidget);\n customWidget.init();\n this.widgetsActivatedBy[name] = activatedBy;\n customWidget.activatedByChanged(activatedBy);\n this.onCustomWidgetAdded.fire(customWidget, null);\n };\n /**\n * Returns the way the custom wiget is activated. It can be activated by a property (\"property\"), question type (\"type\") or by new/custom question type (\"customtype\").\n * @param widgetName the custom widget name\n * @see setActivatedBy\n */\n CustomWidgetCollection.prototype.getActivatedBy = function (widgetName) {\n var res = this.widgetsActivatedBy[widgetName];\n return res ? res : \"property\";\n };\n /**\n * Sets the way the custom wiget is activated. The activation types are: property (\"property\"), question type (\"type\") or new/custom question type (\"customtype\"). A custom wiget may support all or only some of this activation types.\n * @param widgetName\n * @param activatedBy there are three possible variants: \"property\", \"type\" and \"customtype\"\n */\n CustomWidgetCollection.prototype.setActivatedBy = function (widgetName, activatedBy) {\n if (!widgetName || !activatedBy)\n return;\n var widget = this.getCustomWidgetByName(widgetName);\n if (!widget)\n return;\n this.widgetsActivatedBy[widgetName] = activatedBy;\n widget.activatedByChanged(activatedBy);\n };\n CustomWidgetCollection.prototype.clear = function () {\n this.widgetsValues = [];\n };\n CustomWidgetCollection.prototype.getCustomWidgetByName = function (name) {\n for (var i = 0; i < this.widgets.length; i++) {\n if (this.widgets[i].name == name)\n return this.widgets[i];\n }\n return null;\n };\n CustomWidgetCollection.prototype.getCustomWidget = function (question) {\n for (var i = 0; i < this.widgetsValues.length; i++) {\n if (this.widgetsValues[i].isFit(question))\n return this.widgetsValues[i];\n }\n return null;\n };\n CustomWidgetCollection.Instance = new CustomWidgetCollection();\n return CustomWidgetCollection;\n}());\n\n\n\n/***/ }),\n/* 82 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__itemvalue__ = __webpack_require__(15);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionDropdownModel; });\n\n\n\n\n\n\n/**\n * A Model for a dropdown question\n */\nvar QuestionDropdownModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionDropdownModel, _super);\n function QuestionDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.minMaxChoices = [];\n _this.createLocalizableString(\"optionsCaption\", _this);\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"choicesMin\", \"choicesMax\", \"choicesStep\"], function () {\n self.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionDropdownModel.prototype, \"showOptionsCaption\", {\n /**\n * This flag controls whether to show options caption item ('Choose...').\n */\n get: function () {\n return this.getPropertyValue(\"showOptionsCaption\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showOptionsCaption\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"optionsCaption\", {\n /**\n * Use this property to set the options caption different from the default value. The default value is taken from localization strings.\n */\n get: function () {\n return this.getLocalizableStringText(\"optionsCaption\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"optionsCaption\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"optionsCaption\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"locOptionsCaption\", {\n get: function () {\n return this.getLocalizableString(\"optionsCaption\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionDropdownModel.prototype.getType = function () {\n return \"dropdown\";\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"selectedItem\", {\n get: function () {\n if (this.isEmpty())\n return null;\n return __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: true,\n configurable: true\n });\n QuestionDropdownModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionDropdownModel.prototype.getChoices = function () {\n var items = _super.prototype.getChoices.call(this);\n if (this.choicesMax <= this.choicesMin)\n return items;\n var res = [];\n for (var i = 0; i < items.length; i++) {\n res.push(items[i]);\n }\n if (this.minMaxChoices.length === 0 ||\n this.minMaxChoices.length !==\n (this.choicesMax - this.choicesMin) / this.choicesStep + 1) {\n this.minMaxChoices = [];\n for (var i = this.choicesMin; i <= this.choicesMax; i += this.choicesStep) {\n this.minMaxChoices.push(new __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */](i));\n }\n }\n res = res.concat(this.minMaxChoices);\n return res;\n };\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMin\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMax\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMin\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMin\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesMax\", {\n /**\n * Use this and choicesMax property to automatically add choices. For example choicesMin = 1 and choicesMax = 10 will generate ten additional choices from 1 to 10.\n * @see choicesMin\n * @see choicesStep\n */\n get: function () {\n return this.getPropertyValue(\"choicesMax\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"choicesMax\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionDropdownModel.prototype, \"choicesStep\", {\n /**\n * The default value is 1. It tells the value of the iterator between choicesMin and choicesMax properties.\n * If choicesMin = 10, choicesMax = 30 and choicesStep = 10 then you will have only three additional choices: [10, 20, 30].\n * @see choicesMin\n * @see choicesMax\n */\n get: function () {\n return this.getPropertyValue(\"choicesStep\", 1);\n },\n set: function (val) {\n if (val < 1)\n val = 1;\n this.setPropertyValue(\"choicesStep\", val);\n },\n enumerable: true,\n configurable: true\n });\n return QuestionDropdownModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__[\"b\" /* QuestionSelectBase */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"dropdown\", [\n { name: \"optionsCaption\", serializationProperty: \"locOptionsCaption\" },\n { name: \"showOptionsCaption:boolean\", default: true },\n { name: \"choicesMin:number\", default: 0 },\n { name: \"choicesMax:number\", default: 0 },\n { name: \"choicesStep:number\", default: 1, minValue: 1 },\n], function () {\n return new QuestionDropdownModel(\"\");\n}, \"selectbase\");\n__WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"dropdown\", function (name) {\n var q = new QuestionDropdownModel(name);\n q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__conditions__ = __webpack_require__(12);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionExpressionModel; });\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = getCurrecyCodes;\n\n\n\n\n\n\n/**\n * A Model for expression question. It is a read-only question. It calculates value based on epxression property.\n */\nvar QuestionExpressionModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionExpressionModel, _super);\n function QuestionExpressionModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createLocalizableString(\"format\", _this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n if (self.expressionRunner) {\n self.expressionRunner = new __WEBPACK_IMPORTED_MODULE_5__conditions__[\"a\" /* ExpressionRunner */](self.expression);\n }\n });\n return _this;\n }\n QuestionExpressionModel.prototype.getType = function () {\n return \"expression\";\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"hasInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"format\", {\n /**\n * Use this property to display the value in your own format. Make sure you have \"{0}\" substring in your string, to display the actual value.\n */\n get: function () {\n return this.getLocalizableStringText(\"format\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"format\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"locFormat\", {\n get: function () {\n return this.getLocalizableString(\"format\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the question value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionExpressionModel.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n QuestionExpressionModel.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n QuestionExpressionModel.prototype.runCondition = function (values, properties) {\n var _this = this;\n _super.prototype.runCondition.call(this, values, properties);\n if (!this.expression || this.expressionIsRunning)\n return;\n this.locCalculation();\n if (!this.expressionRunner) {\n this.expressionRunner = new __WEBPACK_IMPORTED_MODULE_5__conditions__[\"a\" /* ExpressionRunner */](this.expression);\n }\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(newValue, _this.value)) {\n _this.value = newValue;\n }\n _this.unlocCalculation();\n };\n this.expressionRunner.run(values, properties);\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"maximumFractionDigits\", {\n /**\n * The maximum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"maximumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"maximumFractionDigits\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"minimumFractionDigits\", {\n /**\n * The minimum number of fraction digits to use if displayStyle is not \"none\". Possible values are from 0 to 20. The default value is -1 and it means that this property is not used.\n */\n get: function () {\n return this.getPropertyValue(\"minimumFractionDigits\", -1);\n },\n set: function (val) {\n if (val < -1 || val > 20)\n return;\n this.setPropertyValue(\"minimumFractionDigits\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionExpressionModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var val = this.isValueEmpty(value) ? this.defaultValue : value;\n if (this.isValueEmpty(val))\n return \"\";\n var str = this.getValueAsStr(val);\n if (!this.format)\n return str;\n return this.format[\"format\"](str);\n };\n Object.defineProperty(QuestionExpressionModel.prototype, \"displayStyle\", {\n /**\n * You may set this property to \"decimal\", \"currency\", \"percent\" or \"date\". If you set it to \"currency\", you may use the currency property to display the value in currency different from USD.\n * @see currency\n */\n get: function () {\n return this.getPropertyValue(\"displayStyle\");\n },\n set: function (val) {\n this.setPropertyValue(\"displayStyle\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"currency\", {\n /**\n * Use it to display the value in the currency differen from USD. The displayStype should be set to \"currency\".\n * @see displayStyle\n */\n get: function () {\n return this.getPropertyValue(\"currency\");\n },\n set: function (val) {\n if (getCurrecyCodes().indexOf(val) < 0)\n return;\n this.setPropertyValue(\"currency\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionExpressionModel.prototype, \"useGrouping\", {\n get: function () {\n return this.getPropertyValue(\"useGrouping\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"useGrouping\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionExpressionModel.prototype.getValueAsStr = function (val) {\n if (this.displayStyle == \"date\") {\n var d = new Date(val);\n if (!!d && !!d.toLocaleDateString)\n return d.toLocaleDateString();\n }\n if (this.displayStyle != \"none\" && __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isNumber(val)) {\n var locale = this.getLocale();\n if (!locale)\n locale = \"en\";\n var options = {\n style: this.displayStyle,\n currency: this.currency,\n useGrouping: this.useGrouping,\n };\n if (this.maximumFractionDigits > -1) {\n options[\"maximumFractionDigits\"] = this.maximumFractionDigits;\n }\n if (this.minimumFractionDigits > -1) {\n options[\"minimumFractionDigits\"] = this.minimumFractionDigits;\n }\n return val.toLocaleString(locale, options);\n }\n return val.toString();\n };\n return QuestionExpressionModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\nfunction getCurrecyCodes() {\n return [\n \"AED\",\n \"AFN\",\n \"ALL\",\n \"AMD\",\n \"ANG\",\n \"AOA\",\n \"ARS\",\n \"AUD\",\n \"AWG\",\n \"AZN\",\n \"BAM\",\n \"BBD\",\n \"BDT\",\n \"BGN\",\n \"BHD\",\n \"BIF\",\n \"BMD\",\n \"BND\",\n \"BOB\",\n \"BOV\",\n \"BRL\",\n \"BSD\",\n \"BTN\",\n \"BWP\",\n \"BYN\",\n \"BZD\",\n \"CAD\",\n \"CDF\",\n \"CHE\",\n \"CHF\",\n \"CHW\",\n \"CLF\",\n \"CLP\",\n \"CNY\",\n \"COP\",\n \"COU\",\n \"CRC\",\n \"CUC\",\n \"CUP\",\n \"CVE\",\n \"CZK\",\n \"DJF\",\n \"DKK\",\n \"DOP\",\n \"DZD\",\n \"EGP\",\n \"ERN\",\n \"ETB\",\n \"EUR\",\n \"FJD\",\n \"FKP\",\n \"GBP\",\n \"GEL\",\n \"GHS\",\n \"GIP\",\n \"GMD\",\n \"GNF\",\n \"GTQ\",\n \"GYD\",\n \"HKD\",\n \"HNL\",\n \"HRK\",\n \"HTG\",\n \"HUF\",\n \"IDR\",\n \"ILS\",\n \"INR\",\n \"IQD\",\n \"IRR\",\n \"ISK\",\n \"JMD\",\n \"JOD\",\n \"JPY\",\n \"KES\",\n \"KGS\",\n \"KHR\",\n \"KMF\",\n \"KPW\",\n \"KRW\",\n \"KWD\",\n \"KYD\",\n \"KZT\",\n \"LAK\",\n \"LBP\",\n \"LKR\",\n \"LRD\",\n \"LSL\",\n \"LYD\",\n \"MAD\",\n \"MDL\",\n \"MGA\",\n \"MKD\",\n \"MMK\",\n \"MNT\",\n \"MOP\",\n \"MRO\",\n \"MUR\",\n \"MVR\",\n \"MWK\",\n \"MXN\",\n \"MXV\",\n \"MYR\",\n \"MZN\",\n \"NAD\",\n \"NGN\",\n \"NIO\",\n \"NOK\",\n \"NPR\",\n \"NZD\",\n \"OMR\",\n \"PAB\",\n \"PEN\",\n \"PGK\",\n \"PHP\",\n \"PKR\",\n \"PLN\",\n \"PYG\",\n \"QAR\",\n \"RON\",\n \"RSD\",\n \"RUB\",\n \"RWF\",\n \"SAR\",\n \"SBD\",\n \"SCR\",\n \"SDG\",\n \"SEK\",\n \"SGD\",\n \"SHP\",\n \"SLL\",\n \"SOS\",\n \"SRD\",\n \"SSP\",\n \"STD\",\n \"SVC\",\n \"SYP\",\n \"SZL\",\n \"THB\",\n \"TJS\",\n \"TMT\",\n \"TND\",\n \"TOP\",\n \"TRY\",\n \"TTD\",\n \"TWD\",\n \"TZS\",\n \"UAH\",\n \"UGX\",\n \"USD\",\n \"USN\",\n \"UYI\",\n \"UYU\",\n \"UZS\",\n \"VEF\",\n \"VND\",\n \"VUV\",\n \"WST\",\n \"XAF\",\n \"XAG\",\n \"XAU\",\n \"XBA\",\n \"XBB\",\n \"XBC\",\n \"XBD\",\n \"XCD\",\n \"XDR\",\n \"XOF\",\n \"XPD\",\n \"XPF\",\n \"XPT\",\n \"XSU\",\n \"XTS\",\n \"XUA\",\n \"XXX\",\n \"YER\",\n \"ZAR\",\n \"ZMW\",\n \"ZWL\",\n ];\n}\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"expression\", [\n \"expression:expression\",\n { name: \"format\", serializationProperty: \"locFormat\" },\n {\n name: \"displayStyle\",\n default: \"none\",\n choices: [\"none\", \"decimal\", \"currency\", \"percent\", \"date\"],\n },\n {\n name: \"currency\",\n choices: function () {\n return getCurrecyCodes();\n },\n default: \"USD\",\n },\n { name: \"maximumFractionDigits:number\", default: -1 },\n { name: \"minimumFractionDigits:number\", default: -1 },\n { name: \"useGrouping:boolean\", default: true },\n { name: \"commentText\", visible: false },\n { name: \"enableIf\", visible: false },\n { name: \"isRequired\", visible: false },\n { name: \"readOnly\", visible: false },\n { name: \"requiredErrorText\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"requiredIf\", visible: false },\n], function () {\n return new QuestionExpressionModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_4__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"expression\", function (name) {\n return new QuestionExpressionModel(name);\n});\n\n\n/***/ }),\n/* 84 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__validator__ = __webpack_require__(29);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionTextModel; });\n\n\n\n\n\n\n/**\n * A Model for an input text question.\n */\nvar QuestionTextModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionTextModel, _super);\n function QuestionTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionTextModel.prototype.isTextValue = function () {\n return this.inputType == \"text\";\n };\n QuestionTextModel.prototype.getType = function () {\n return \"text\";\n };\n Object.defineProperty(QuestionTextModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.getPropertyValue(\"inputType\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == \"datetime_local\")\n val = \"datetime-local\";\n this.min = undefined;\n this.max = undefined;\n this.step = undefined;\n this.setPropertyValue(\"inputType\", val.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n QuestionTextModel.prototype.getValidators = function () {\n var validators = _super.prototype.getValidators.call(this);\n if (this.inputType === \"email\" &&\n !this.validators.some(function (v) { return v.getType() === \"emailvalidator\"; })) {\n validators.push(new __WEBPACK_IMPORTED_MODULE_5__validator__[\"c\" /* EmailValidator */]());\n }\n return validators;\n };\n QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionTextModel.prototype.getMaxLength = function () {\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionTextModel.prototype, \"size\", {\n /**\n * The text input size\n */\n get: function () {\n return this.getPropertyValue(\"size\");\n },\n set: function (val) {\n this.setPropertyValue(\"size\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"min\", {\n /**\n * The minimum value\n */\n get: function () {\n return this.getPropertyValue(\"min\");\n },\n set: function (val) {\n this.setPropertyValue(\"min\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"max\", {\n /**\n * The maximum value\n */\n get: function () {\n var maxValue = this.getPropertyValue(\"max\");\n if (!maxValue &&\n (this.inputType === \"date\" || this.inputType === \"datetime-local\")) {\n maxValue = \"2999-12-31\";\n }\n return maxValue;\n },\n set: function (val) {\n this.setPropertyValue(\"max\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"step\", {\n /**\n * The step value\n */\n get: function () {\n return this.getPropertyValue(\"step\");\n },\n set: function (val) {\n this.setPropertyValue(\"step\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionTextModel.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n QuestionTextModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionTextModel.prototype.supportGoNextPageError = function () {\n return [\"date\", \"datetime\", \"datetime-local\"].indexOf(this.inputType) < 0;\n };\n Object.defineProperty(QuestionTextModel.prototype, \"placeHolder\", {\n /**\n * The input place holder.\n */\n get: function () {\n return this.getLocalizableStringText(\"placeHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"placeHolder\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionTextModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionTextModel.prototype.canRunValidators = function (isOnValueChanged) {\n return (this.errors.length > 0 ||\n !isOnValueChanged ||\n this.supportGoNextPageError());\n };\n QuestionTextModel.prototype.setNewValue = function (newValue) {\n newValue = this.correctValueType(newValue);\n _super.prototype.setNewValue.call(this, newValue);\n };\n QuestionTextModel.prototype.correctValueType = function (newValue) {\n if (!newValue)\n return newValue;\n if (this.inputType == \"number\" || this.inputType == \"range\") {\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isNumber(newValue) ? parseFloat(newValue) : \"\";\n }\n return newValue;\n };\n QuestionTextModel.prototype.addSupportedValidators = function (supportedValidators) {\n _super.prototype.addSupportedValidators.call(this, supportedValidators);\n supportedValidators.push(\"numeric\", \"text\", \"regex\", \"email\");\n };\n return QuestionTextModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* Question */]));\n\nvar minMaxTypes = [\n \"number\",\n \"range\",\n \"date\",\n \"datetime-local\",\n \"month\",\n \"time\",\n \"week\",\n];\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"text\", [\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n { name: \"size:number\", default: 25 },\n {\n name: \"min\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return minMaxTypes.indexOf(obj.inputType) !== -1;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"max\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return minMaxTypes.indexOf(obj.inputType) !== -1;\n },\n onPropertyEditorUpdate: function (obj, propertyEditor) {\n propertyEditor.inputType = obj.inputType;\n },\n },\n {\n name: \"step:number\",\n dependsOn: \"inputType\",\n visibleIf: function (obj) {\n if (!obj)\n return false;\n return obj.inputType === \"number\";\n },\n },\n { name: \"maxLength:number\", default: -1 },\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n], function () {\n return new QuestionTextModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_1__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"text\", function (name) {\n return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n/* 85 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__survey__ = __webpack_require__(27);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyWindowModel; });\n\n\n\n/**\n * A Model for a survey running in the Window.\n */\nvar SurveyWindowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyWindowModel, _super);\n function SurveyWindowModel(jsonObj, initialModel) {\n if (initialModel === void 0) { initialModel = null; }\n var _this = _super.call(this) || this;\n /**\n * Set this value to negative value, for example -1, to avoid closing the window on completing the survey. Leave it equals to 0 (default value) to close the window immediately, or set it to 3, 5, 10, ... to close the window in 3, 5, 10 seconds.\n */\n _this.closeOnCompleteTimeout = 0;\n if (initialModel) {\n _this.surveyValue = initialModel;\n }\n else {\n _this.surveyValue = _this.createSurvey(jsonObj);\n }\n _this.surveyValue.showTitle = false;\n if (\"undefined\" !== typeof document) {\n _this.windowElement = document.createElement(\"div\");\n }\n var self = _this;\n _this.survey.onComplete.add(function (survey, options) {\n self.onSurveyComplete();\n });\n return _this;\n }\n SurveyWindowModel.prototype.getType = function () {\n return \"window\";\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"survey\", {\n /**\n * A survey object.\n * @see SurveyModel\n */\n get: function () {\n return this.surveyValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"isShowing\", {\n /**\n * Returns true if the window is currently showing. Set it to true to show the window and false to hide it.\n * @see show\n * @see hide\n */\n get: function () {\n return this.getPropertyValue(\"isShowing\", false);\n },\n set: function (val) {\n if (this.isShowing == val)\n return;\n this.setPropertyValue(\"isShowing\", val);\n if (this.showingChangedCallback)\n this.showingChangedCallback();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Show the window\n * @see hide\n * @see isShowing\n */\n SurveyWindowModel.prototype.show = function () {\n this.isShowing = true;\n };\n /**\n * Hide the window\n * @see show\n * @see isShowing\n */\n SurveyWindowModel.prototype.hide = function () {\n this.isShowing = false;\n };\n Object.defineProperty(SurveyWindowModel.prototype, \"isExpanded\", {\n /**\n * Returns true if the window is expanded. Set it to true to expand the window or false to collapse it.\n * @see expand\n * @see collapse\n */\n get: function () {\n return this.getPropertyValue(\"isExpanded\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isExpanded\", val);\n if (!this.isLoadingFromJson && this.expandedChangedCallback)\n this.expandedChangedCallback();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"title\", {\n /**\n * The window and survey title.\n */\n get: function () {\n return this.survey.title;\n },\n set: function (value) {\n this.survey.title = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyWindowModel.prototype, \"locTitle\", {\n get: function () {\n return this.survey.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Expand the window to show the survey.\n */\n SurveyWindowModel.prototype.expand = function () {\n this.expandcollapse(true);\n };\n /**\n * Collapse the window and show survey title only.\n */\n SurveyWindowModel.prototype.collapse = function () {\n this.expandcollapse(false);\n };\n SurveyWindowModel.prototype.createSurvey = function (jsonObj) {\n return new __WEBPACK_IMPORTED_MODULE_2__survey__[\"a\" /* SurveyModel */](jsonObj);\n };\n SurveyWindowModel.prototype.expandcollapse = function (value) {\n this.isExpanded = value;\n };\n SurveyWindowModel.prototype.onSurveyComplete = function () {\n if (this.closeOnCompleteTimeout < 0)\n return;\n if (this.closeOnCompleteTimeout == 0) {\n this.closeWindowOnComplete();\n }\n else {\n var self = this;\n var timerId = null;\n var func = function () {\n self.closeWindowOnComplete();\n window.clearInterval(timerId);\n };\n timerId = window.setInterval(func, this.closeOnCompleteTimeout * 1000);\n }\n };\n SurveyWindowModel.prototype.closeWindowOnComplete = function () {\n if (!!this.closeWindowOnCompleteCallback) {\n this.closeWindowOnCompleteCallback();\n }\n };\n SurveyWindowModel.surveyElementName = \"windowSurveyJS\";\n return SurveyWindowModel;\n}(__WEBPACK_IMPORTED_MODULE_1__base__[\"a\" /* Base */]));\n\n\n\n/***/ }),\n/* 86 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(9);\n/* unused harmony export surveyTimerFunctions */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyTimer; });\n\nvar surveyTimerFunctions = {\n setTimeout: function (func) {\n return window.setTimeout(func, 1000);\n },\n clearTimeout: function (timerId) {\n window.clearTimeout(timerId);\n }\n};\nvar SurveyTimer = /** @class */ (function () {\n function SurveyTimer() {\n this.listenerCounter = 0;\n this.timerId = -1;\n this.onTimer = new __WEBPACK_IMPORTED_MODULE_0__base__[\"b\" /* Event */]();\n }\n Object.defineProperty(SurveyTimer, \"instance\", {\n get: function () {\n if (!SurveyTimer.instanceValue) {\n SurveyTimer.instanceValue = new SurveyTimer();\n }\n return SurveyTimer.instanceValue;\n },\n enumerable: true,\n configurable: true\n });\n SurveyTimer.prototype.start = function (func) {\n var _this = this;\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.add(func);\n }\n if (this.timerId < 0) {\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n }\n this.listenerCounter++;\n };\n SurveyTimer.prototype.stop = function (func) {\n if (func === void 0) { func = null; }\n if (func) {\n this.onTimer.remove(func);\n }\n this.listenerCounter--;\n if (this.listenerCounter == 0 && this.timerId > -1) {\n surveyTimerFunctions.clearTimeout(this.timerId);\n this.timerId = -1;\n }\n };\n SurveyTimer.prototype.doTimer = function () {\n var _this = this;\n if (this.timerId < 0)\n return;\n this.onTimer.fire(this, {});\n this.timerId = surveyTimerFunctions.setTimeout(function () {\n _this.doTimer();\n });\n };\n SurveyTimer.instanceValue = null;\n return SurveyTimer;\n}());\n\n\n\n/***/ }),\n/* 87 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(14);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return defaultBootstrapCss; });\n\nvar defaultBootstrapCss = {\n root: \"sv_main sv_bootstrap_css\",\n container: \"sv_container\",\n header: \"panel-heading card-header\",\n body: \"panel-body card-block mt-4\",\n bodyEmpty: \"panel-body card-block mt-4 sv_body_empty\",\n footer: \"panel-footer card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn\",\n prev: \"btn sv_prev_btn\",\n next: \"btn sv_next_btn\",\n start: \"btn sv_start_btn\",\n preview: \"btn sv_preview_btn\",\n edit: \"btn sv_edit_btn\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow sv_qstn\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n title: \"\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n requiredText: \"sv_q_required_text\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln form-inline checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n },\n checkbox: {\n root: \"sv_qcbc sv_qcbx form-inline\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_checkbox_inline\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-material\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n label: \"sv_q_m_label\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n },\n matrixdropdown: { root: \"table\" },\n matrixdynamic: {\n root: \"table\",\n button: \"button\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn\",\n buttonRemove: \"button sv-paneldynamic__remove-btn\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"sv_qcbc form-inline\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n itemDecorator: \"sv-hidden\",\n controlLabel: \"\",\n materialDecorator: \"circle\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button\",\n column: \"sv_q_select_column\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"sv_q_file\",\n placeholderInput: \"sv_q_file_placeholder\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header panel-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n__WEBPACK_IMPORTED_MODULE_0__cssstandard__[\"a\" /* surveyCss */][\"bootstrap\"] = defaultBootstrapCss;\n\n\n/***/ }),\n/* 88 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(14);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return defaultBootstrapMaterialCss; });\n\nvar defaultBootstrapMaterialCss = {\n root: \"sv_main sv_bootstrapmaterial_css\",\n container: \"sv_container\",\n header: \"card-heading\",\n body: \"card-body\",\n bodyEmpty: \"card-body sv_body_empty\",\n footer: \"card-footer\",\n title: \"\",\n description: \"\",\n logo: \"sv_logo\",\n logoImage: \"sv_logo__image\",\n headerText: \"sv_header__text\",\n navigationButton: \"\",\n completedPage: \"\",\n navigation: {\n complete: \"btn sv_complete_btn btn-primary\",\n prev: \"btn sv_prev_btn btn-primary\",\n next: \"btn sv_next_btn btn-primary\",\n start: \"btn sv_start_btn btn-primary\",\n preview: \"btn sv_preview_btn btn-primary\",\n edit: \"btn sv_edit_btn btn-primary\",\n },\n progress: \"progress center-block mx-auto mb-4\",\n progressBar: \"progress-bar\",\n progressTextUnderBar: \"sv-hidden\",\n page: {\n root: \"\",\n title: \"\",\n description: \"small\",\n },\n pageTitle: \"\",\n pageDescription: \"small\",\n row: \"sv_row\",\n question: {\n mainRoot: \"sv_qstn form-group bmd-form-group\",\n flowRoot: \"sv_q_flow form-group bmd-form-group\",\n header: \"\",\n headerLeft: \"title-left\",\n content: \"\",\n contentLeft: \"content-left\",\n titleLeftRoot: \"sv_qstn_left\",\n requiredText: \"sv_q_required_text\",\n title: \"\",\n number: \"sv_q_num\",\n description: \"small\",\n descriptionUnderInput: \"small\",\n comment: \"form-control\",\n required: \"\",\n titleRequired: \"\",\n hasError: \"has-error\",\n indent: 20,\n formGroup: \"form-group bmd-form-group\",\n },\n panel: {\n title: \"sv_p_title\",\n titleExpandable: \"sv_p_title_expandable\",\n icon: \"sv_panel_icon\",\n iconExpanded: \"sv_expanded\",\n description: \"small sv_p_description\",\n container: \"sv_p_container\",\n footer: \"sv_p_footer\",\n },\n error: {\n root: \"alert alert-danger\",\n icon: \"glyphicon glyphicon-exclamation-sign\",\n item: \"\",\n locationTop: \"sv_qstn_error_top\",\n locationBottom: \"sv_qstn_error_bottom\",\n },\n boolean: {\n root: \"sv_qbln checkbox\",\n item: \"sv-boolean\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n },\n checkbox: {\n root: \"sv_qcbx\",\n item: \"checkbox\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_checkbox_inline\",\n itemDecorator: \"sv-hidden\",\n itemControl: \"\",\n label: \"\",\n labelChecked: \"\",\n controlLabel: \"\",\n materialDecorator: \"checkbox-decorator\",\n other: \"sv_q_checkbox_other form-control\",\n column: \"sv_q_select_column\",\n },\n comment: \"form-control\",\n dropdown: {\n root: \"\",\n control: \"form-control\",\n other: \"sv_q_dd_other form-control\",\n },\n html: { root: \"\" },\n image: { root: \"sv_q_image\", image: \"sv_image_image\" },\n matrix: {\n root: \"table sv_q_matrix\",\n row: \"form-group bmd-form-group\",\n label: \"sv_q_m_label radio-inline\",\n cellText: \"sv_q_m_cell_text\",\n cellTextSelected: \"sv_q_m_cell_selected bg-primary\",\n cellLabel: \"sv_q_m_cell_label\",\n itemValue: \"form-control\",\n itemChecked: \"checked\",\n itemDecorator: \"sv-hidden\",\n materialDecorator: \"bmd-radio\"\n },\n matrixdropdown: { root: \"table\", itemValue: \"form-group bmd-form-group\" },\n matrixdynamic: {\n mainRoot: \"sv_qstn\",\n flowRoot: \"sv_q_flow\",\n root: \"table\",\n button: \"btn btn-primary\",\n itemValue: \"form-group bmd-form-group\",\n buttonAdd: \"\",\n buttonRemove: \"\",\n iconAdd: \"\",\n iconRemove: \"\",\n },\n paneldynamic: {\n root: \"\",\n navigation: \"sv-paneldynamic__navigation\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n title: \"sv-title sv-question__title\",\n button: \"button\",\n buttonAdd: \"button sv-paneldynamic__add-btn btn btn-primary\",\n buttonRemove: \"button sv-paneldynamic__remove-btn btn btn-primary\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n },\n multipletext: {\n root: \"table\",\n itemTitle: \"\",\n row: \"form-group bmd-form-group\",\n itemValue: \"sv_q_mt_item_value form-control\",\n },\n radiogroup: {\n root: \"\",\n item: \"radio\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_radiogroup_inline\",\n itemDecorator: \"sv-hidden\",\n label: \"\",\n labelChecked: \"\",\n itemControl: \"\",\n controlLabel: \"sv_q_radiogroup_control_label\",\n materialDecorator: \"bmd-radio\",\n other: \"sv_q_radiogroup_other form-control\",\n clearButton: \"sv_q_radiogroup_clear button btn btn-primary\",\n column: \"sv_q_select_column\",\n },\n imagepicker: {\n root: \"sv_imgsel\",\n item: \"sv_q_imgsel\",\n itemChecked: \"checked\",\n itemInline: \"sv_q_imagepicker_inline\",\n label: \"sv_q_imgsel_label\",\n itemControl: \"sv_q_imgsel_control_item\",\n image: \"sv_q_imgsel_image\",\n itemText: \"sv_q_imgsel_text\",\n clearButton: \"sv_q_radiogroup_clear\",\n },\n rating: {\n root: \"btn-group\",\n item: \"btn btn-default btn-secondary\",\n selected: \"active\",\n minText: \"sv_q_rating_min_text\",\n itemText: \"sv_q_rating_item_text\",\n maxText: \"sv_q_rating_max_text\",\n disabled: \"\",\n },\n text: \"form-control\",\n expression: \"form-control\",\n file: {\n root: \"form-group bmd-form-group is-fileinput sv_q_file\",\n placeholderInput: \"\",\n preview: \"sv_q_file_preview\",\n removeButton: \"sv_q_file_remove_button\",\n fileInput: \"sv_q_file_input\",\n removeFile: \"sv_q_file_remove\",\n removeFileSvg: \"sv-hidden\",\n fileDecorator: \"sv-hidden\",\n fileSignBottom: \"sv-hidden\",\n removeButtonBottom: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"alert alert-info\",\n error: \"alert alert-danger\",\n success: \"alert alert-success\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"modal-content\",\n body: \"modal-body\",\n header: {\n root: \"modal-header card-title\",\n title: \"pull-left\",\n button: \"glyphicon pull-right\",\n buttonExpanded: \"glyphicon pull-right glyphicon-chevron-up\",\n buttonCollapsed: \"glyphicon pull-right glyphicon-chevron-down\",\n },\n },\n};\n__WEBPACK_IMPORTED_MODULE_0__cssstandard__[\"a\" /* surveyCss */][\"bootstrapmaterial\"] = defaultBootstrapMaterialCss;\n\n\n/***/ }),\n/* 89 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cssstandard__ = __webpack_require__(14);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return modernCss; });\n\nvar modernCss = {\n root: \"sv-root-modern\",\n container: \"sv-container-modern\",\n header: \"sv-title sv-container-modern__title\",\n body: \"sv-body\",\n bodyEmpty: \"sv-body sv-body--empty\",\n footer: \"sv-footer sv-body__footer sv-clearfix\",\n title: \"\",\n description: \"\",\n logo: \"sv-logo\",\n logoImage: \"sv-logo__image\",\n headerText: \"sv-header__text\",\n navigationButton: \"\",\n completedPage: \"sv-completedpage\",\n navigation: {\n complete: \"sv-btn sv-footer__complete-btn\",\n prev: \"sv-btn sv-footer__prev-btn\",\n next: \"sv-btn sv-footer__next-btn\",\n start: \"sv-btn sv-footer__start-btn\",\n preview: \"sv-btn sv-footer__preview-btn\",\n edit: \"sv-btn sv-footer__edit-btn\",\n },\n panel: {\n title: \"sv-title sv-panel__title\",\n titleExpandable: \"sv-panel__title--expandable\",\n description: \"sv-description sv-panel__description\",\n container: \"sv-panel sv-row__panel\",\n content: \"sv-panel__content\",\n icon: \"sv-panel__icon\",\n iconExpanded: \"sv-panel__icon--expanded\",\n footer: \"sv-panel__footer\",\n },\n paneldynamic: {\n root: \"sv-paneldynamic\",\n navigation: \"sv-paneldynamic__navigation\",\n title: \"sv-title sv-question__title\",\n button: \"sv-btn\",\n buttonRemove: \"sv-paneldynamic__remove-btn\",\n buttonAdd: \"sv-paneldynamic__add-btn\",\n progressTop: \"sv-paneldynamic__progress sv-paneldynamic__progress--top\",\n progressBottom: \"sv-paneldynamic__progress sv-paneldynamic__progress--bottom\",\n buttonPrev: \"sv-paneldynamic__prev-btn\",\n buttonNext: \"sv-paneldynamic__next-btn\",\n progressContainer: \"sv-paneldynamic__progress-container\",\n progress: \"sv-progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-paneldynamic__progress-text\",\n separator: \"sv-paneldynamic__separator\",\n },\n progress: \"sv-progress sv-body__progress\",\n progressBar: \"sv-progress__bar\",\n progressText: \"sv-progress__text\",\n progressTextInBar: \"sv-hidden\",\n page: {\n root: \"sv-page sv-body__page\",\n title: \"sv-title sv-page__title\",\n description: \"sv-description sv-page__description\",\n },\n pageTitle: \"sv-title sv-page__title\",\n pageDescription: \"sv-description sv-page__description\",\n row: \"sv-row sv-clearfix\",\n question: {\n mainRoot: \"sv-question sv-row__question\",\n flowRoot: \"sv-question sv-row__question sv-row__question--flow\",\n asCell: \"sv-table__cell\",\n header: \"sv-question__header\",\n headerLeft: \"sv-question__header--location--left\",\n headerTop: \"sv-question__header--location--top\",\n headerBottom: \"sv-question__header--location--bottom\",\n content: \"sv-question__content\",\n contentLeft: \"sv-question__content--left\",\n titleLeftRoot: \"\",\n titleOnAnswer: \"sv-question__title--answer\",\n titleOnError: \"sv-question__title--error\",\n title: \"sv-title sv-question__title\",\n requiredText: \"sv-question__required-text\",\n number: \"sv-question__num\",\n description: \"sv-description sv-question__description\",\n descriptionUnderInput: \"sv-description sv-question__description\",\n comment: \"sv-comment\",\n required: \"sv-question--required\",\n titleRequired: \"sv-question__title--required\",\n indent: 20,\n footer: \"sv-question__footer\",\n formGroup: \"sv-question__form-group\",\n hasError: \"\",\n disabled: \"sv-question--disabled\",\n },\n image: { root: \"sv-image\", image: \"sv_image_image\" },\n error: {\n root: \"sv-question__erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sv-question__erbox--location--top\",\n locationBottom: \"sv-question__erbox--location--bottom\",\n },\n checkbox: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-checkbox sv-selectbase__item\",\n itemDisabled: \"sv-item--disabled sv-checkbox--disabled\",\n itemChecked: \"sv-checkbox--checked\",\n itemHover: \"sv-checkbox--allowhover\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-checkbox__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-checkbox__decorator\",\n other: \"sv-comment sv-question__other\",\n column: \"sv-selectbase__column\",\n },\n radiogroup: {\n root: \"sv-selectbase\",\n item: \"sv-item sv-radio sv-selectbase__item\",\n itemInline: \"sv-selectbase__item--inline\",\n label: \"sv-selectbase__label\",\n labelChecked: \"\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemChecked: \"sv-radio--checked\",\n itemHover: \"sv-radio--allowhover\",\n itemControl: \"sv-visuallyhidden sv-item__control\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n controlLabel: \"sv-item__control-label\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n other: \"sv-comment sv-question__other\",\n clearButton: \"sv-btn sv-selectbase__clear-btn\",\n column: \"sv-selectbase__column\",\n },\n boolean: {\n root: \"\",\n small: \"sv-row__question--small\",\n item: \"sv-boolean sv-item\",\n control: \"sv-visuallyhidden\",\n itemChecked: \"sv-boolean--checked\",\n itemIndeterminate: \"sv-boolean--indeterminate\",\n itemDisabled: \"sv-item--disabled sv-boolean--disabled\",\n switch: \"sv-boolean__switch\",\n slider: \"sv-boolean__slider\",\n label: \"sv-boolean__label \",\n disabledLabel: \"sv-boolean__label--disabled\",\n },\n text: {\n root: \"sv-text\",\n small: \"sv-row__question--small\",\n onError: \"sv-text--error\",\n },\n multipletext: {\n root: \"sv-multipletext\",\n item: \"sv-multipletext__item\",\n itemTitle: \"sv-multipletext__item-title\",\n row: \"sv-multipletext__row\",\n cell: \"sv-multipletext__cell\",\n },\n dropdown: {\n root: \"\",\n small: \"sv-row__question--small\",\n control: \"sv-dropdown\",\n selectWrapper: \"\",\n other: \"sv-comment sv-question__other\",\n onError: \"sv-dropdown--error\",\n },\n imagepicker: {\n root: \"sv-imagepicker\",\n item: \"sv-imagepicker__item\",\n itemInline: \"sv-imagepicker__item--inline\",\n itemChecked: \"sv-imagepicker__item--checked\",\n itemDisabled: \"sv-imagepicker__item--disabled\",\n itemHover: \"sv-imagepicker__item--allowhover\",\n label: \"sv-imagepicker__label\",\n itemControl: \"sv-imagepicker__control\",\n image: \"sv-imagepicker__image\",\n itemText: \"sv-imagepicker__text\",\n clearButton: \"sv-btn\",\n other: \"sv-comment sv-question__other\",\n },\n matrix: {\n tableWrapper: \"sv-matrix\",\n root: \"sv-table\",\n cell: \"sv-table__cell sv-matrix__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n label: \"sv-item sv-radio sv-matrix__label\",\n itemValue: \"sv-visuallyhidden sv-item__control sv-radio__control\",\n itemChecked: \"sv-radio--checked\",\n itemDisabled: \"sv-item--disabled sv-radio--disabled\",\n itemHover: \"sv-radio--allowhover\",\n materialDecorator: \"sv-item__decorator sv-radio__decorator\",\n itemDecorator: \"sv-item__svg sv-radio__svg\",\n cellText: \"sv-matrix__text\",\n cellTextSelected: \"sv-matrix__text--сhecked\",\n cellTextDisabled: \"sv-matrix__text--disabled\",\n },\n matrixdropdown: {\n root: \"sv-table\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n },\n matrixdynamic: {\n root: \"sv-table sv-matrixdynamic\",\n cell: \"sv-table__cell\",\n headerCell: \"sv-table__cell sv-table__cell--header\",\n button: \"sv-btn\",\n buttonAdd: \"sv-matrixdynamic__add-btn\",\n buttonRemove: \"sv-matrixdynamic__remove-btn\",\n iconAdd: \"\",\n iconRemove: \"\",\n },\n rating: {\n root: \"sv-rating\",\n item: \"sv-rating__item\",\n selected: \"sv-rating__item--selected\",\n minText: \"sv-rating__min-text\",\n itemText: \"sv-rating__item-text\",\n maxText: \"sv-rating__max-text\",\n disabled: \"sv-rating--disabled\",\n },\n comment: {\n root: \"sv-comment\",\n small: \"sv-row__question--small\",\n },\n expression: \"\",\n file: {\n root: \"sv-file\",\n other: \"sv-comment sv-question__other\",\n placeholderInput: \"sv-visuallyhidden\",\n preview: \"sv-file__preview\",\n fileSign: \"sv-hidden\",\n fileSignBottom: \"sv-file__sign\",\n fileDecorator: \"sv-file__decorator\",\n fileInput: \"sv-visuallyhidden\",\n noFileChosen: \"sv-description sv-file__no-file-chosen\",\n chooseFile: \"sv-btn sv-file__choose-btn\",\n disabled: \"sv-file__choose-btn--disabled\",\n removeButton: \"sv-hidden\",\n removeButtonBottom: \"sv-btn sv-file__clean-btn\",\n removeFile: \"sv-hidden\",\n removeFileSvg: \"sv-file__remove-svg\",\n wrapper: \"sv-file__wrapper\",\n },\n signaturepad: {\n root: \"sv-signaturepad sjs_sp_container\",\n small: \"sv-row__question--small\",\n controls: \"sjs_sp_controls\",\n clearButton: \"sjs_sp_clear\",\n },\n saveData: {\n root: \"\",\n saving: \"\",\n error: \"\",\n success: \"\",\n saveAgainButton: \"\",\n },\n window: {\n root: \"sv_window\",\n body: \"sv_window_content\",\n header: {\n root: \"sv_window_title\",\n title: \"\",\n button: \"\",\n buttonExpanded: \"\",\n buttonCollapsed: \"\",\n },\n },\n};\n__WEBPACK_IMPORTED_MODULE_0__cssstandard__[\"a\" /* surveyCss */][\"modern\"] = modernCss;\n\n\n/***/ }),\n/* 90 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_arabic__ = __webpack_require__(144);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__localization_bulgarian__ = __webpack_require__(145);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localization_catalan__ = __webpack_require__(146);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__localization_czech__ = __webpack_require__(147);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_danish__ = __webpack_require__(148);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__localization_dutch__ = __webpack_require__(149);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__localization_estonian__ = __webpack_require__(150);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__localization_finnish__ = __webpack_require__(151);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localization_french__ = __webpack_require__(152);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localization_georgian__ = __webpack_require__(153);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__localization_german__ = __webpack_require__(154);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__localization_greek__ = __webpack_require__(155);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__localization_hebrew__ = __webpack_require__(156);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__localization_hungarian__ = __webpack_require__(157);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__localization_icelandic__ = __webpack_require__(158);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__localization_indonesian__ = __webpack_require__(159);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__localization_italian__ = __webpack_require__(160);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__localization_japanese__ = __webpack_require__(161);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__localization_korean__ = __webpack_require__(162);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__localization_latvian__ = __webpack_require__(163);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__localization_lithuanian__ = __webpack_require__(164);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__localization_norwegian__ = __webpack_require__(165);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__localization_persian__ = __webpack_require__(166);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__localization_polish__ = __webpack_require__(167);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__localization_portuguese__ = __webpack_require__(168);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__localization_romanian__ = __webpack_require__(169);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__localization_russian__ = __webpack_require__(170);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__localization_simplified_chinese__ = __webpack_require__(171);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__localization_spanish__ = __webpack_require__(172);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__localization_swedish__ = __webpack_require__(174);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__localization_thai__ = __webpack_require__(176);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__localization_turkish__ = __webpack_require__(178);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__localization_traditional_chinese__ = __webpack_require__(177);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__localization_ukrainian__ = __webpack_require__(179);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__localization_tajik__ = __webpack_require__(175);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__localization_swahili__ = __webpack_require__(173);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ }),\n/* 91 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss__ = __webpack_require__(136);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__main_scss__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__modern_scss__ = __webpack_require__(137);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__modern_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__modern_scss__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__settings__ = __webpack_require__(10);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return __WEBPACK_IMPORTED_MODULE_2__settings__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers__ = __webpack_require__(6);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return __WEBPACK_IMPORTED_MODULE_3__helpers__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__validator__ = __webpack_require__(29);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"e\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"f\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"g\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"h\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"i\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return __WEBPACK_IMPORTED_MODULE_4__validator__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__itemvalue__ = __webpack_require__(15);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__base__ = __webpack_require__(9);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return __WEBPACK_IMPORTED_MODULE_6__base__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return __WEBPACK_IMPORTED_MODULE_6__base__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"p\", function() { return __WEBPACK_IMPORTED_MODULE_6__base__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"q\", function() { return __WEBPACK_IMPORTED_MODULE_6__base__[\"c\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__calculatedValue__ = __webpack_require__(140);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"r\", function() { return __WEBPACK_IMPORTED_MODULE_7__calculatedValue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__error__ = __webpack_require__(13);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"s\", function() { return __WEBPACK_IMPORTED_MODULE_8__error__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"t\", function() { return __WEBPACK_IMPORTED_MODULE_8__error__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"u\", function() { return __WEBPACK_IMPORTED_MODULE_8__error__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"v\", function() { return __WEBPACK_IMPORTED_MODULE_8__error__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"w\", function() { return __WEBPACK_IMPORTED_MODULE_8__error__[\"e\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__localizablestring__ = __webpack_require__(17);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"x\", function() { return __WEBPACK_IMPORTED_MODULE_9__localizablestring__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__expressionItems__ = __webpack_require__(141);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"y\", function() { return __WEBPACK_IMPORTED_MODULE_10__expressionItems__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"z\", function() { return __WEBPACK_IMPORTED_MODULE_10__expressionItems__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__choicesRestfull__ = __webpack_require__(75);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"A\", function() { return __WEBPACK_IMPORTED_MODULE_11__choicesRestfull__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__functionsfactory__ = __webpack_require__(23);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"B\", function() { return __WEBPACK_IMPORTED_MODULE_12__functionsfactory__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"C\", function() { return __WEBPACK_IMPORTED_MODULE_12__functionsfactory__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__conditions__ = __webpack_require__(12);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"D\", function() { return __WEBPACK_IMPORTED_MODULE_13__conditions__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"E\", function() { return __WEBPACK_IMPORTED_MODULE_13__conditions__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__ = __webpack_require__(22);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"F\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"g\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"G\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"H\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"f\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"I\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"J\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"K\", function() { return __WEBPACK_IMPORTED_MODULE_14__expressions_expressions__[\"e\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__conditionsParser__ = __webpack_require__(76);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"L\", function() { return __WEBPACK_IMPORTED_MODULE_15__conditionsParser__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__conditionProcessValue__ = __webpack_require__(16);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"M\", function() { return __WEBPACK_IMPORTED_MODULE_16__conditionProcessValue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__jsonobject__ = __webpack_require__(5);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"N\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"O\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"e\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"P\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"f\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Q\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"g\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"R\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"h\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"S\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"i\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"T\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"U\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"j\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"V\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"k\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"W\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"l\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"X\", function() { return __WEBPACK_IMPORTED_MODULE_17__jsonobject__[\"c\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__ = __webpack_require__(24);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Y\", function() { return __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Z\", function() { return __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_0\", function() { return __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_1\", function() { return __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_2\", function() { return __WEBPACK_IMPORTED_MODULE_18__question_matrixdropdownbase__[\"e\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__question_matrixdropdown__ = __webpack_require__(190);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_3\", function() { return __WEBPACK_IMPORTED_MODULE_19__question_matrixdropdown__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_4\", function() { return __WEBPACK_IMPORTED_MODULE_19__question_matrixdropdown__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__question_matrixdynamic__ = __webpack_require__(191);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_5\", function() { return __WEBPACK_IMPORTED_MODULE_20__question_matrixdynamic__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_6\", function() { return __WEBPACK_IMPORTED_MODULE_20__question_matrixdynamic__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__question_matrix__ = __webpack_require__(189);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_7\", function() { return __WEBPACK_IMPORTED_MODULE_21__question_matrix__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_8\", function() { return __WEBPACK_IMPORTED_MODULE_21__question_matrix__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_9\", function() { return __WEBPACK_IMPORTED_MODULE_21__question_matrix__[\"c\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__question_multipletext__ = __webpack_require__(192);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_10\", function() { return __WEBPACK_IMPORTED_MODULE_22__question_multipletext__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_11\", function() { return __WEBPACK_IMPORTED_MODULE_22__question_multipletext__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__panel__ = __webpack_require__(20);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_12\", function() { return __WEBPACK_IMPORTED_MODULE_23__panel__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_13\", function() { return __WEBPACK_IMPORTED_MODULE_23__panel__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_14\", function() { return __WEBPACK_IMPORTED_MODULE_23__panel__[\"d\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__flowpanel__ = __webpack_require__(143);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_15\", function() { return __WEBPACK_IMPORTED_MODULE_24__flowpanel__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__page__ = __webpack_require__(80);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_16\", function() { return __WEBPACK_IMPORTED_MODULE_25__page__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__question__ = __webpack_require__(11);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_17\", function() { return __WEBPACK_IMPORTED_MODULE_26__question__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__questionnonvalue__ = __webpack_require__(25);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_18\", function() { return __WEBPACK_IMPORTED_MODULE_27__questionnonvalue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__question_empty__ = __webpack_require__(184);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_19\", function() { return __WEBPACK_IMPORTED_MODULE_28__question_empty__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__question_baseselect__ = __webpack_require__(19);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_20\", function() { return __WEBPACK_IMPORTED_MODULE_29__question_baseselect__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_21\", function() { return __WEBPACK_IMPORTED_MODULE_29__question_baseselect__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__question_checkbox__ = __webpack_require__(181);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_22\", function() { return __WEBPACK_IMPORTED_MODULE_30__question_checkbox__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__question_comment__ = __webpack_require__(182);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_23\", function() { return __WEBPACK_IMPORTED_MODULE_31__question_comment__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__question_dropdown__ = __webpack_require__(82);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_24\", function() { return __WEBPACK_IMPORTED_MODULE_32__question_dropdown__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__questionfactory__ = __webpack_require__(7);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_25\", function() { return __WEBPACK_IMPORTED_MODULE_33__questionfactory__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_26\", function() { return __WEBPACK_IMPORTED_MODULE_33__questionfactory__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__question_file__ = __webpack_require__(185);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_27\", function() { return __WEBPACK_IMPORTED_MODULE_34__question_file__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__question_html__ = __webpack_require__(186);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_28\", function() { return __WEBPACK_IMPORTED_MODULE_35__question_html__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__question_radiogroup__ = __webpack_require__(194);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_29\", function() { return __WEBPACK_IMPORTED_MODULE_36__question_radiogroup__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__question_rating__ = __webpack_require__(195);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_30\", function() { return __WEBPACK_IMPORTED_MODULE_37__question_rating__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__question_expression__ = __webpack_require__(83);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_31\", function() { return __WEBPACK_IMPORTED_MODULE_38__question_expression__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__question_text__ = __webpack_require__(84);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_32\", function() { return __WEBPACK_IMPORTED_MODULE_39__question_text__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__question_boolean__ = __webpack_require__(180);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_33\", function() { return __WEBPACK_IMPORTED_MODULE_40__question_boolean__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__question_imagepicker__ = __webpack_require__(188);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_34\", function() { return __WEBPACK_IMPORTED_MODULE_41__question_imagepicker__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__question_image__ = __webpack_require__(187);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_35\", function() { return __WEBPACK_IMPORTED_MODULE_42__question_image__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__question_signaturepad__ = __webpack_require__(196);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_36\", function() { return __WEBPACK_IMPORTED_MODULE_43__question_signaturepad__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__question_paneldynamic__ = __webpack_require__(193);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_37\", function() { return __WEBPACK_IMPORTED_MODULE_44__question_paneldynamic__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_38\", function() { return __WEBPACK_IMPORTED_MODULE_44__question_paneldynamic__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__surveytimer__ = __webpack_require__(86);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_39\", function() { return __WEBPACK_IMPORTED_MODULE_45__surveytimer__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__survey__ = __webpack_require__(27);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_40\", function() { return __WEBPACK_IMPORTED_MODULE_46__survey__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__trigger__ = __webpack_require__(197);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_41\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_42\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_43\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_44\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"d\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_45\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"e\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_46\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"f\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_47\", function() { return __WEBPACK_IMPORTED_MODULE_47__trigger__[\"g\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__surveyWindow__ = __webpack_require__(85);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_48\", function() { return __WEBPACK_IMPORTED_MODULE_48__surveyWindow__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__textPreProcessor__ = __webpack_require__(21);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_49\", function() { return __WEBPACK_IMPORTED_MODULE_49__textPreProcessor__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__dxSurveyService__ = __webpack_require__(77);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_50\", function() { return __WEBPACK_IMPORTED_MODULE_50__dxSurveyService__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__localization_english__ = __webpack_require__(78);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_51\", function() { return __WEBPACK_IMPORTED_MODULE_51__localization_english__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__surveyStrings__ = __webpack_require__(1);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_52\", function() { return __WEBPACK_IMPORTED_MODULE_52__surveyStrings__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_53\", function() { return __WEBPACK_IMPORTED_MODULE_52__surveyStrings__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__questionCustomWidgets__ = __webpack_require__(81);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_54\", function() { return __WEBPACK_IMPORTED_MODULE_53__questionCustomWidgets__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_55\", function() { return __WEBPACK_IMPORTED_MODULE_53__questionCustomWidgets__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__question_custom__ = __webpack_require__(183);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_56\", function() { return __WEBPACK_IMPORTED_MODULE_54__question_custom__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_57\", function() { return __WEBPACK_IMPORTED_MODULE_54__question_custom__[\"b\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_58\", function() { return __WEBPACK_IMPORTED_MODULE_54__question_custom__[\"c\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_59\", function() { return __WEBPACK_IMPORTED_MODULE_54__question_custom__[\"d\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__stylesmanager__ = __webpack_require__(26);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"_60\", function() { return __WEBPACK_IMPORTED_MODULE_55__stylesmanager__[\"a\"]; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Version; });\n// styles\n\n\nvar Version;\nVersion = \"\" + \"1.7.20\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// export { cultureInfo } from \"../../cultureInfo\";\n\n\n\n//Uncomment to include the \"date\" question type.\n//export {default as QuestionDateModel} from \"../../plugins/question_date\";\n\n\n/***/ }),\n/* 92 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_boolean_vue__ = __webpack_require__(31);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_boolean_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1edb9dd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_boolean_vue__ = __webpack_require__(212);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_boolean_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1edb9dd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_boolean_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1edb9dd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_boolean_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/boolean.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1edb9dd6\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1edb9dd6\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 93 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkbox_vue__ = __webpack_require__(32);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkbox_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_cad276f6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkbox_vue__ = __webpack_require__(238);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkbox_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_cad276f6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkbox_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_cad276f6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkbox_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/checkbox.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-cad276f6\", Component.options)\n } else {\n hotAPI.reload(\"data-v-cad276f6\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 94 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkboxitem_vue__ = __webpack_require__(33);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkboxitem_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_c58c80d0_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkboxitem_vue__ = __webpack_require__(237);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_checkboxitem_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_c58c80d0_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkboxitem_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_c58c80d0_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_checkboxitem_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/checkboxitem.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-c58c80d0\", Component.options)\n } else {\n hotAPI.reload(\"data-v-c58c80d0\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 95 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_comment_vue__ = __webpack_require__(34);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_comment_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_099c2c8d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_comment_vue__ = __webpack_require__(203);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_comment_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_099c2c8d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_comment_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_099c2c8d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_comment_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/comment.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-099c2c8d\", Component.options)\n } else {\n hotAPI.reload(\"data-v-099c2c8d\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 96 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_composite_vue__ = __webpack_require__(35);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_composite_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1a9e2196_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_composite_vue__ = __webpack_require__(208);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_composite_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1a9e2196_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_composite_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1a9e2196_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_composite_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/composite.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1a9e2196\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1a9e2196\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 97 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_custom_vue__ = __webpack_require__(36);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_custom_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d4aae09a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_custom_vue__ = __webpack_require__(240);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_custom_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d4aae09a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_custom_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d4aae09a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_custom_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/custom.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-d4aae09a\", Component.options)\n } else {\n hotAPI.reload(\"data-v-d4aae09a\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 98 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_customwidget_vue__ = __webpack_require__(37);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_customwidget_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1e61a7b7_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_customwidget_vue__ = __webpack_require__(211);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_customwidget_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1e61a7b7_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_customwidget_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1e61a7b7_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_customwidget_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/customwidget.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1e61a7b7\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1e61a7b7\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 99 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_dropdown_vue__ = __webpack_require__(38);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_dropdown_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6b3215d3_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_dropdown_vue__ = __webpack_require__(225);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_dropdown_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6b3215d3_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_dropdown_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6b3215d3_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_dropdown_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/dropdown.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-6b3215d3\", Component.options)\n } else {\n hotAPI.reload(\"data-v-6b3215d3\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 100 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_element_vue__ = __webpack_require__(39);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_element_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_973472ac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_element_vue__ = __webpack_require__(233);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_element_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_973472ac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_element_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_973472ac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_element_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/element.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-973472ac\", Component.options)\n } else {\n hotAPI.reload(\"data-v-973472ac\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 101 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_elementheader_vue__ = __webpack_require__(40);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_elementheader_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27adc537_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_elementheader_vue__ = __webpack_require__(214);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_elementheader_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27adc537_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_elementheader_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27adc537_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_elementheader_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/elementheader.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-27adc537\", Component.options)\n } else {\n hotAPI.reload(\"data-v-27adc537\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 102 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_empty_vue__ = __webpack_require__(41);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_empty_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_05052c0a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_empty_vue__ = __webpack_require__(200);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_empty_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_05052c0a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_empty_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_05052c0a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_empty_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/empty.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-05052c0a\", Component.options)\n } else {\n hotAPI.reload(\"data-v-05052c0a\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 103 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_errors_vue__ = __webpack_require__(42);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_errors_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5682e6ad_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_errors_vue__ = __webpack_require__(220);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_errors_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5682e6ad_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_errors_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5682e6ad_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_errors_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/errors.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-5682e6ad\", Component.options)\n } else {\n hotAPI.reload(\"data-v-5682e6ad\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 104 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_expression_vue__ = __webpack_require__(43);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_expression_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1d20865a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_expression_vue__ = __webpack_require__(209);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_expression_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1d20865a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_expression_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1d20865a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_expression_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/expression.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1d20865a\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1d20865a\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 105 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_file_vue__ = __webpack_require__(44);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_file_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_20f70284_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_file_vue__ = __webpack_require__(213);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_file_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_20f70284_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_file_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_20f70284_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_file_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/file.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-20f70284\", Component.options)\n } else {\n hotAPI.reload(\"data-v-20f70284\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 106 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanel_vue__ = __webpack_require__(45);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_96ae1a78_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanel_vue__ = __webpack_require__(232);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanel_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_96ae1a78_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanel_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_96ae1a78_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanel_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/flowpanel.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-96ae1a78\", Component.options)\n } else {\n hotAPI.reload(\"data-v-96ae1a78\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 107 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanelelement_vue__ = __webpack_require__(46);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanelelement_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9d992c30_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanelelement_vue__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_flowpanelelement_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9d992c30_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanelelement_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9d992c30_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_flowpanelelement_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/flowpanelelement.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-9d992c30\", Component.options)\n } else {\n hotAPI.reload(\"data-v-9d992c30\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 108 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_header_vue__ = __webpack_require__(47);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_header_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_69cff8cf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_header_vue__ = __webpack_require__(224);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_header_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_69cff8cf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_header_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_69cff8cf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_header_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/header.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-69cff8cf\", Component.options)\n } else {\n hotAPI.reload(\"data-v-69cff8cf\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 109 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_html_vue__ = __webpack_require__(48);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_html_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0742e16d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_html_vue__ = __webpack_require__(202);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_html_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0742e16d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_html_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0742e16d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_html_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/html.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0742e16d\", Component.options)\n } else {\n hotAPI.reload(\"data-v-0742e16d\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 110 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_image_vue__ = __webpack_require__(49);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_image_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1dc8d709_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_image_vue__ = __webpack_require__(210);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_image_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1dc8d709_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_image_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_1dc8d709_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_image_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/image.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-1dc8d709\", Component.options)\n } else {\n hotAPI.reload(\"data-v-1dc8d709\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 111 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_imagepicker_vue__ = __webpack_require__(50);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_imagepicker_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_153fe052_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_imagepicker_vue__ = __webpack_require__(207);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_imagepicker_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_153fe052_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_imagepicker_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_153fe052_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_imagepicker_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/imagepicker.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-153fe052\", Component.options)\n } else {\n hotAPI.reload(\"data-v-153fe052\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 112 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrix_vue__ = __webpack_require__(51);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrix_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7fa2f403_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrix_vue__ = __webpack_require__(230);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrix_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7fa2f403_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrix_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7fa2f403_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrix_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/matrix.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7fa2f403\", Component.options)\n } else {\n hotAPI.reload(\"data-v-7fa2f403\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 113 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixcell_vue__ = __webpack_require__(52);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixcell_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3ca54ee5_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixcell_vue__ = __webpack_require__(217);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixcell_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3ca54ee5_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixcell_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3ca54ee5_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixcell_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/matrixcell.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-3ca54ee5\", Component.options)\n } else {\n hotAPI.reload(\"data-v-3ca54ee5\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 114 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdropdown_vue__ = __webpack_require__(53);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdropdown_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b4da6d8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdropdown_vue__ = __webpack_require__(204);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdropdown_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b4da6d8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdropdown_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b4da6d8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdropdown_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/matrixdropdown.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0b4da6d8\", Component.options)\n } else {\n hotAPI.reload(\"data-v-0b4da6d8\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 115 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdynamic_vue__ = __webpack_require__(54);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdynamic_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9a0b88e8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdynamic_vue__ = __webpack_require__(234);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixdynamic_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9a0b88e8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdynamic_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9a0b88e8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixdynamic_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/matrixdynamic.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-9a0b88e8\", Component.options)\n } else {\n hotAPI.reload(\"data-v-9a0b88e8\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 116 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixtable_vue__ = __webpack_require__(55);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixtable_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_fa197e4a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixtable_vue__ = __webpack_require__(242);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_matrixtable_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_fa197e4a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixtable_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_fa197e4a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_matrixtable_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/matrixtable.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-fa197e4a\", Component.options)\n } else {\n hotAPI.reload(\"data-v-fa197e4a\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 117 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_multipletext_vue__ = __webpack_require__(56);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_multipletext_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_93fe4c02_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_multipletext_vue__ = __webpack_require__(231);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_multipletext_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_93fe4c02_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_multipletext_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_93fe4c02_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_multipletext_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/multipletext.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-93fe4c02\", Component.options)\n } else {\n hotAPI.reload(\"data-v-93fe4c02\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 118 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_navigation_vue__ = __webpack_require__(57);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_navigation_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_75eadfd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_navigation_vue__ = __webpack_require__(228);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_navigation_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_75eadfd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_navigation_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_75eadfd6_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_navigation_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/navigation.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-75eadfd6\", Component.options)\n } else {\n hotAPI.reload(\"data-v-75eadfd6\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 119 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_otherChoice_vue__ = __webpack_require__(58);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_otherChoice_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_2ed776ff_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_otherChoice_vue__ = __webpack_require__(216);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_otherChoice_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_2ed776ff_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_otherChoice_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_2ed776ff_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_otherChoice_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/otherChoice.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2ed776ff\", Component.options)\n } else {\n hotAPI.reload(\"data-v-2ed776ff\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 120 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_page_vue__ = __webpack_require__(59);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_page_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_4e962a51_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_page_vue__ = __webpack_require__(219);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_page_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_4e962a51_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_page_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_4e962a51_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_page_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/page.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4e962a51\", Component.options)\n } else {\n hotAPI.reload(\"data-v-4e962a51\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 121 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_panel_vue__ = __webpack_require__(60);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_panel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0c78899c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_panel_vue__ = __webpack_require__(205);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_panel_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0c78899c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_panel_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0c78899c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_panel_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/panel.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0c78899c\", Component.options)\n } else {\n hotAPI.reload(\"data-v-0c78899c\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 122 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamic_vue__ = __webpack_require__(61);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamic_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9dda5d06_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamic_vue__ = __webpack_require__(236);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamic_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9dda5d06_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamic_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_9dda5d06_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamic_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/paneldynamic.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-9dda5d06\", Component.options)\n } else {\n hotAPI.reload(\"data-v-9dda5d06\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 123 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicprogress_vue__ = __webpack_require__(62);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicprogress_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_742bffac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicprogress_vue__ = __webpack_require__(227);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicprogress_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_742bffac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicprogress_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_742bffac_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicprogress_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/paneldynamicprogress.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-742bffac\", Component.options)\n } else {\n hotAPI.reload(\"data-v-742bffac\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 124 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicremove_vue__ = __webpack_require__(63);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicremove_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_db6b2f7e_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicremove_vue__ = __webpack_require__(241);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_paneldynamicremove_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_db6b2f7e_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicremove_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_db6b2f7e_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_paneldynamicremove_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/paneldynamicremove.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-db6b2f7e\", Component.options)\n } else {\n hotAPI.reload(\"data-v-db6b2f7e\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 125 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_progress_vue__ = __webpack_require__(64);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_progress_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27e325ef_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_progress_vue__ = __webpack_require__(215);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_progress_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27e325ef_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_progress_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_27e325ef_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_progress_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/progress.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-27e325ef\", Component.options)\n } else {\n hotAPI.reload(\"data-v-27e325ef\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 126 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroup_vue__ = __webpack_require__(65);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroup_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_06c6d526_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroup_vue__ = __webpack_require__(201);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroup_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_06c6d526_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroup_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_06c6d526_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroup_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/radiogroup.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-06c6d526\", Component.options)\n } else {\n hotAPI.reload(\"data-v-06c6d526\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 127 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroupitem_vue__ = __webpack_require__(66);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroupitem_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5bbe97b9_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroupitem_vue__ = __webpack_require__(221);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_radiogroupitem_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5bbe97b9_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroupitem_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5bbe97b9_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_radiogroupitem_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/radiogroupitem.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-5bbe97b9\", Component.options)\n } else {\n hotAPI.reload(\"data-v-5bbe97b9\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 128 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_rating_vue__ = __webpack_require__(67);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_rating_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7092bfdf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_rating_vue__ = __webpack_require__(226);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_rating_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7092bfdf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_rating_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7092bfdf_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_rating_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/rating.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7092bfdf\", Component.options)\n } else {\n hotAPI.reload(\"data-v-7092bfdf\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 129 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_row_vue__ = __webpack_require__(68);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_row_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7cc0bd88_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_row_vue__ = __webpack_require__(229);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_row_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7cc0bd88_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_row_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7cc0bd88_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_row_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/row.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7cc0bd88\", Component.options)\n } else {\n hotAPI.reload(\"data-v-7cc0bd88\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_signaturepad_vue__ = __webpack_require__(69);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_signaturepad_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0462349d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_signaturepad_vue__ = __webpack_require__(199);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_signaturepad_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0462349d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_signaturepad_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0462349d_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_signaturepad_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/signaturepad.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0462349d\", Component.options)\n } else {\n hotAPI.reload(\"data-v-0462349d\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 131 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_string_vue__ = __webpack_require__(70);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_string_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d3a3d75a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_string_vue__ = __webpack_require__(239);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_string_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d3a3d75a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_string_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_d3a3d75a_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_string_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/string.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-d3a3d75a\", Component.options)\n } else {\n hotAPI.reload(\"data-v-d3a3d75a\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 132 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_survey_vue__ = __webpack_require__(71);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_survey_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6874e1c8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_survey_vue__ = __webpack_require__(223);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_survey_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6874e1c8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_survey_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6874e1c8_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_survey_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/survey.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-6874e1c8\", Component.options)\n } else {\n hotAPI.reload(\"data-v-6874e1c8\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 133 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_text_vue__ = __webpack_require__(72);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_text_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_40ece422_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_text_vue__ = __webpack_require__(218);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_text_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_40ece422_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_text_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_40ece422_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_text_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/text.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-40ece422\", Component.options)\n } else {\n hotAPI.reload(\"data-v-40ece422\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_timerpanel_vue__ = __webpack_require__(73);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_timerpanel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0d2abe21_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_timerpanel_vue__ = __webpack_require__(206);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_timerpanel_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0d2abe21_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_timerpanel_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0d2abe21_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_timerpanel_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/timerpanel.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0d2abe21\", Component.options)\n } else {\n hotAPI.reload(\"data-v-0d2abe21\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_window_vue__ = __webpack_require__(74);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_window_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_62f588b2_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_window_vue__ = __webpack_require__(222);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__ = __webpack_require__(4);\nvar disposed = false\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\n\nvar Component = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__node_modules_vue_loader_lib_runtime_component_normalizer__[\"a\" /* default */])(\n __WEBPACK_IMPORTED_MODULE_0__ts_loader_node_modules_vue_loader_lib_selector_type_script_index_0_window_vue__[\"b\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_62f588b2_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_window_vue__[\"a\" /* render */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_62f588b2_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_window_vue__[\"b\" /* staticRenderFns */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"src/vue/window.vue\"\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-62f588b2\", Component.options)\n } else {\n hotAPI.reload(\"data-v-62f588b2\", Component.options)\n }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* unused harmony default export */ var _unused_webpack_default_export = Component.exports;\n\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process, global) {/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30), __webpack_require__(243)))\n\n/***/ }),\n/* 139 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/*!\n * Signature Pad v2.3.2\n * https://github.com/szimek/signature_pad\n *\n * Copyright 2017 Szymon Nowak\n * Released under the MIT license\n *\n * The main idea and some parts of the code (e.g. drawing variable width Bézier curve) are taken from:\n * http://corner.squareup.com/2012/07/smoother-signatures.html\n *\n * Implementation of interpolation using cubic Bézier curves is taken from:\n * http://benknowscode.wordpress.com/2012/09/14/path-interpolation-using-cubic-bezier-and-control-point-estimation-in-javascript\n *\n * Algorithm for approximated length of a Bézier curve is taken from:\n * http://www.lemoda.net/maths/bezier-length/index.html\n *\n */\n\nfunction Point(x, y, time) {\n this.x = x;\n this.y = y;\n this.time = time || new Date().getTime();\n}\n\nPoint.prototype.velocityFrom = function (start) {\n return this.time !== start.time ? this.distanceTo(start) / (this.time - start.time) : 1;\n};\n\nPoint.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.x - start.x, 2) + Math.pow(this.y - start.y, 2));\n};\n\nPoint.prototype.equals = function (other) {\n return this.x === other.x && this.y === other.y && this.time === other.time;\n};\n\nfunction Bezier(startPoint, control1, control2, endPoint) {\n this.startPoint = startPoint;\n this.control1 = control1;\n this.control2 = control2;\n this.endPoint = endPoint;\n}\n\n// Returns approximated length.\nBezier.prototype.length = function () {\n var steps = 10;\n var length = 0;\n var px = void 0;\n var py = void 0;\n\n for (var i = 0; i <= steps; i += 1) {\n var t = i / steps;\n var cx = this._point(t, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x);\n var cy = this._point(t, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);\n if (i > 0) {\n var xdiff = cx - px;\n var ydiff = cy - py;\n length += Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n }\n px = cx;\n py = cy;\n }\n\n return length;\n};\n\n/* eslint-disable no-multi-spaces, space-in-parens */\nBezier.prototype._point = function (t, start, c1, c2, end) {\n return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t;\n};\n\n/* eslint-disable */\n\n// http://stackoverflow.com/a/27078401/815507\nfunction throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function later() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n\nfunction SignaturePad(canvas, options) {\n var self = this;\n var opts = options || {};\n\n this.velocityFilterWeight = opts.velocityFilterWeight || 0.7;\n this.minWidth = opts.minWidth || 0.5;\n this.maxWidth = opts.maxWidth || 2.5;\n this.throttle = 'throttle' in opts ? opts.throttle : 16; // in miliseconds\n this.minDistance = 'minDistance' in opts ? opts.minDistance : 5;\n\n if (this.throttle) {\n this._strokeMoveUpdate = throttle(SignaturePad.prototype._strokeUpdate, this.throttle);\n } else {\n this._strokeMoveUpdate = SignaturePad.prototype._strokeUpdate;\n }\n\n this.dotSize = opts.dotSize || function () {\n return (this.minWidth + this.maxWidth) / 2;\n };\n this.penColor = opts.penColor || 'black';\n this.backgroundColor = opts.backgroundColor || 'rgba(0,0,0,0)';\n this.onBegin = opts.onBegin;\n this.onEnd = opts.onEnd;\n\n this._canvas = canvas;\n this._ctx = canvas.getContext('2d');\n this.clear();\n\n // We need add these inline so they are available to unbind while still having\n // access to 'self' we could use _.bind but it's not worth adding a dependency.\n this._handleMouseDown = function (event) {\n if (event.which === 1) {\n self._mouseButtonDown = true;\n self._strokeBegin(event);\n }\n };\n\n this._handleMouseMove = function (event) {\n if (self._mouseButtonDown) {\n self._strokeMoveUpdate(event);\n }\n };\n\n this._handleMouseUp = function (event) {\n if (event.which === 1 && self._mouseButtonDown) {\n self._mouseButtonDown = false;\n self._strokeEnd(event);\n }\n };\n\n this._handleTouchStart = function (event) {\n if (event.targetTouches.length === 1) {\n var touch = event.changedTouches[0];\n self._strokeBegin(touch);\n }\n };\n\n this._handleTouchMove = function (event) {\n // Prevent scrolling.\n event.preventDefault();\n\n var touch = event.targetTouches[0];\n self._strokeMoveUpdate(touch);\n };\n\n this._handleTouchEnd = function (event) {\n var wasCanvasTouched = event.target === self._canvas;\n if (wasCanvasTouched) {\n event.preventDefault();\n self._strokeEnd(event);\n }\n };\n\n // Enable mouse and touch event handlers\n this.on();\n}\n\n// Public methods\nSignaturePad.prototype.clear = function () {\n var ctx = this._ctx;\n var canvas = this._canvas;\n\n ctx.fillStyle = this.backgroundColor;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n this._data = [];\n this._reset();\n this._isEmpty = true;\n};\n\nSignaturePad.prototype.fromDataURL = function (dataUrl) {\n var _this = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var image = new Image();\n var ratio = options.ratio || window.devicePixelRatio || 1;\n var width = options.width || this._canvas.width / ratio;\n var height = options.height || this._canvas.height / ratio;\n\n this._reset();\n image.src = dataUrl;\n image.onload = function () {\n _this._ctx.drawImage(image, 0, 0, width, height);\n };\n this._isEmpty = false;\n};\n\nSignaturePad.prototype.toDataURL = function (type) {\n var _canvas;\n\n switch (type) {\n case 'image/svg+xml':\n return this._toSVG();\n default:\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n return (_canvas = this._canvas).toDataURL.apply(_canvas, [type].concat(options));\n }\n};\n\nSignaturePad.prototype.on = function () {\n this._handleMouseEvents();\n this._handleTouchEvents();\n};\n\nSignaturePad.prototype.off = function () {\n this._canvas.removeEventListener('mousedown', this._handleMouseDown);\n this._canvas.removeEventListener('mousemove', this._handleMouseMove);\n document.removeEventListener('mouseup', this._handleMouseUp);\n\n this._canvas.removeEventListener('touchstart', this._handleTouchStart);\n this._canvas.removeEventListener('touchmove', this._handleTouchMove);\n this._canvas.removeEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype.isEmpty = function () {\n return this._isEmpty;\n};\n\n// Private methods\nSignaturePad.prototype._strokeBegin = function (event) {\n this._data.push([]);\n this._reset();\n this._strokeUpdate(event);\n\n if (typeof this.onBegin === 'function') {\n this.onBegin(event);\n }\n};\n\nSignaturePad.prototype._strokeUpdate = function (event) {\n var x = event.clientX;\n var y = event.clientY;\n\n var point = this._createPoint(x, y);\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup && lastPointGroup[lastPointGroup.length - 1];\n var isLastPointTooClose = lastPoint && point.distanceTo(lastPoint) < this.minDistance;\n\n // Skip this point if it's too close to the previous one\n if (!(lastPoint && isLastPointTooClose)) {\n var _addPoint = this._addPoint(point),\n curve = _addPoint.curve,\n widths = _addPoint.widths;\n\n if (curve && widths) {\n this._drawCurve(curve, widths.start, widths.end);\n }\n\n this._data[this._data.length - 1].push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n};\n\nSignaturePad.prototype._strokeEnd = function (event) {\n var canDrawCurve = this.points.length > 2;\n var point = this.points[0]; // Point instance\n\n if (!canDrawCurve && point) {\n this._drawDot(point);\n }\n\n if (point) {\n var lastPointGroup = this._data[this._data.length - 1];\n var lastPoint = lastPointGroup[lastPointGroup.length - 1]; // plain object\n\n // When drawing a dot, there's only one point in a group, so without this check\n // such group would end up with exactly the same 2 points.\n if (!point.equals(lastPoint)) {\n lastPointGroup.push({\n x: point.x,\n y: point.y,\n time: point.time,\n color: this.penColor\n });\n }\n }\n\n if (typeof this.onEnd === 'function') {\n this.onEnd(event);\n }\n};\n\nSignaturePad.prototype._handleMouseEvents = function () {\n this._mouseButtonDown = false;\n\n this._canvas.addEventListener('mousedown', this._handleMouseDown);\n this._canvas.addEventListener('mousemove', this._handleMouseMove);\n document.addEventListener('mouseup', this._handleMouseUp);\n};\n\nSignaturePad.prototype._handleTouchEvents = function () {\n // Pass touch events to canvas element on mobile IE11 and Edge.\n this._canvas.style.msTouchAction = 'none';\n this._canvas.style.touchAction = 'none';\n\n this._canvas.addEventListener('touchstart', this._handleTouchStart);\n this._canvas.addEventListener('touchmove', this._handleTouchMove);\n this._canvas.addEventListener('touchend', this._handleTouchEnd);\n};\n\nSignaturePad.prototype._reset = function () {\n this.points = [];\n this._lastVelocity = 0;\n this._lastWidth = (this.minWidth + this.maxWidth) / 2;\n this._ctx.fillStyle = this.penColor;\n};\n\nSignaturePad.prototype._createPoint = function (x, y, time) {\n var rect = this._canvas.getBoundingClientRect();\n\n return new Point(x - rect.left, y - rect.top, time || new Date().getTime());\n};\n\nSignaturePad.prototype._addPoint = function (point) {\n var points = this.points;\n var tmp = void 0;\n\n points.push(point);\n\n if (points.length > 2) {\n // To reduce the initial lag make it work with 3 points\n // by copying the first point to the beginning.\n if (points.length === 3) points.unshift(points[0]);\n\n tmp = this._calculateCurveControlPoints(points[0], points[1], points[2]);\n var c2 = tmp.c2;\n tmp = this._calculateCurveControlPoints(points[1], points[2], points[3]);\n var c3 = tmp.c1;\n var curve = new Bezier(points[1], c2, c3, points[2]);\n var widths = this._calculateCurveWidths(curve);\n\n // Remove the first element from the list,\n // so that we always have no more than 4 points in points array.\n points.shift();\n\n return { curve: curve, widths: widths };\n }\n\n return {};\n};\n\nSignaturePad.prototype._calculateCurveControlPoints = function (s1, s2, s3) {\n var dx1 = s1.x - s2.x;\n var dy1 = s1.y - s2.y;\n var dx2 = s2.x - s3.x;\n var dy2 = s2.y - s3.y;\n\n var m1 = { x: (s1.x + s2.x) / 2.0, y: (s1.y + s2.y) / 2.0 };\n var m2 = { x: (s2.x + s3.x) / 2.0, y: (s2.y + s3.y) / 2.0 };\n\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n\n var dxm = m1.x - m2.x;\n var dym = m1.y - m2.y;\n\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n\n var tx = s2.x - cm.x;\n var ty = s2.y - cm.y;\n\n return {\n c1: new Point(m1.x + tx, m1.y + ty),\n c2: new Point(m2.x + tx, m2.y + ty)\n };\n};\n\nSignaturePad.prototype._calculateCurveWidths = function (curve) {\n var startPoint = curve.startPoint;\n var endPoint = curve.endPoint;\n var widths = { start: null, end: null };\n\n var velocity = this.velocityFilterWeight * endPoint.velocityFrom(startPoint) + (1 - this.velocityFilterWeight) * this._lastVelocity;\n\n var newWidth = this._strokeWidth(velocity);\n\n widths.start = this._lastWidth;\n widths.end = newWidth;\n\n this._lastVelocity = velocity;\n this._lastWidth = newWidth;\n\n return widths;\n};\n\nSignaturePad.prototype._strokeWidth = function (velocity) {\n return Math.max(this.maxWidth / (velocity + 1), this.minWidth);\n};\n\nSignaturePad.prototype._drawPoint = function (x, y, size) {\n var ctx = this._ctx;\n\n ctx.moveTo(x, y);\n ctx.arc(x, y, size, 0, 2 * Math.PI, false);\n this._isEmpty = false;\n};\n\nSignaturePad.prototype._drawCurve = function (curve, startWidth, endWidth) {\n var ctx = this._ctx;\n var widthDelta = endWidth - startWidth;\n var drawSteps = Math.floor(curve.length());\n\n ctx.beginPath();\n\n for (var i = 0; i < drawSteps; i += 1) {\n // Calculate the Bezier (x, y) coordinate for this step.\n var t = i / drawSteps;\n var tt = t * t;\n var ttt = tt * t;\n var u = 1 - t;\n var uu = u * u;\n var uuu = uu * u;\n\n var x = uuu * curve.startPoint.x;\n x += 3 * uu * t * curve.control1.x;\n x += 3 * u * tt * curve.control2.x;\n x += ttt * curve.endPoint.x;\n\n var y = uuu * curve.startPoint.y;\n y += 3 * uu * t * curve.control1.y;\n y += 3 * u * tt * curve.control2.y;\n y += ttt * curve.endPoint.y;\n\n var width = startWidth + ttt * widthDelta;\n this._drawPoint(x, y, width);\n }\n\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._drawDot = function (point) {\n var ctx = this._ctx;\n var width = typeof this.dotSize === 'function' ? this.dotSize() : this.dotSize;\n\n ctx.beginPath();\n this._drawPoint(point.x, point.y, width);\n ctx.closePath();\n ctx.fill();\n};\n\nSignaturePad.prototype._fromData = function (pointGroups, drawCurve, drawDot) {\n for (var i = 0; i < pointGroups.length; i += 1) {\n var group = pointGroups[i];\n\n if (group.length > 1) {\n for (var j = 0; j < group.length; j += 1) {\n var rawPoint = group[j];\n var point = new Point(rawPoint.x, rawPoint.y, rawPoint.time);\n var color = rawPoint.color;\n\n if (j === 0) {\n // First point in a group. Nothing to draw yet.\n\n // All points in the group have the same color, so it's enough to set\n // penColor just at the beginning.\n this.penColor = color;\n this._reset();\n\n this._addPoint(point);\n } else if (j !== group.length - 1) {\n // Middle point in a group.\n var _addPoint2 = this._addPoint(point),\n curve = _addPoint2.curve,\n widths = _addPoint2.widths;\n\n if (curve && widths) {\n drawCurve(curve, widths, color);\n }\n } else {\n // Last point in a group. Do nothing.\n }\n }\n } else {\n this._reset();\n var _rawPoint = group[0];\n drawDot(_rawPoint);\n }\n }\n};\n\nSignaturePad.prototype._toSVG = function () {\n var _this2 = this;\n\n var pointGroups = this._data;\n var canvas = this._canvas;\n var ratio = Math.max(window.devicePixelRatio || 1, 1);\n var minX = 0;\n var minY = 0;\n var maxX = canvas.width / ratio;\n var maxY = canvas.height / ratio;\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'width', canvas.width);\n svg.setAttributeNS(null, 'height', canvas.height);\n\n this._fromData(pointGroups, function (curve, widths, color) {\n var path = document.createElement('path');\n\n // Need to check curve for NaN values, these pop up when drawing\n // lines on the canvas that are not continuous. E.g. Sharp corners\n // or stopping mid-stroke and than continuing without lifting mouse.\n if (!isNaN(curve.control1.x) && !isNaN(curve.control1.y) && !isNaN(curve.control2.x) && !isNaN(curve.control2.y)) {\n var attr = 'M ' + curve.startPoint.x.toFixed(3) + ',' + curve.startPoint.y.toFixed(3) + ' ' + ('C ' + curve.control1.x.toFixed(3) + ',' + curve.control1.y.toFixed(3) + ' ') + (curve.control2.x.toFixed(3) + ',' + curve.control2.y.toFixed(3) + ' ') + (curve.endPoint.x.toFixed(3) + ',' + curve.endPoint.y.toFixed(3));\n\n path.setAttribute('d', attr);\n path.setAttribute('stroke-width', (widths.end * 2.25).toFixed(3));\n path.setAttribute('stroke', color);\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke-linecap', 'round');\n\n svg.appendChild(path);\n }\n }, function (rawPoint) {\n var circle = document.createElement('circle');\n var dotSize = typeof _this2.dotSize === 'function' ? _this2.dotSize() : _this2.dotSize;\n circle.setAttribute('r', dotSize);\n circle.setAttribute('cx', rawPoint.x);\n circle.setAttribute('cy', rawPoint.y);\n circle.setAttribute('fill', rawPoint.color);\n\n svg.appendChild(circle);\n });\n\n var prefix = 'data:image/svg+xml;base64,';\n var header = '';\n var body = svg.innerHTML;\n\n // IE hack for missing innerHTML property on SVGElement\n if (body === undefined) {\n var dummy = document.createElement('dummy');\n var nodes = svg.childNodes;\n dummy.innerHTML = '';\n\n for (var i = 0; i < nodes.length; i += 1) {\n dummy.appendChild(nodes[i].cloneNode(true));\n }\n\n body = dummy.innerHTML;\n }\n\n var footer = '';\n var data = header + body + footer;\n\n return prefix + btoa(data);\n};\n\nSignaturePad.prototype.fromData = function (pointGroups) {\n var _this3 = this;\n\n this.clear();\n\n this._fromData(pointGroups, function (curve, widths) {\n return _this3._drawCurve(curve, widths.start, widths.end);\n }, function (rawPoint) {\n return _this3._drawDot(rawPoint);\n });\n\n this._data = pointGroups;\n};\n\nSignaturePad.prototype.toData = function () {\n return this._data;\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = SignaturePad;\n\n\n/***/ }),\n/* 140 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(5);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CalculatedValue; });\n\n\n\n\n\n/**\n * The calculated value is a way to define the variable in Survey Creator.\n * It has two main properties: name and expression. Based on expression the value read-only property is automatically calculated.\n * The name property should be unique though all calculated values.\n * It uses survey.getVariable/seruvey.setVariable functions to get/set its value. The class do not store its value internally.\n * You may set includeIntoResult property to true to store this calculated value into survey result.\n */\nvar CalculatedValue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(CalculatedValue, _super);\n function CalculatedValue(name, expression) {\n if (name === void 0) { name = null; }\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.expressionIsRunning = false;\n _this.isCalculated = false;\n if (!!name) {\n _this.name = name;\n }\n if (!!expression) {\n _this.expression = expression;\n }\n return _this;\n }\n CalculatedValue.prototype.setOwner = function (data) {\n this.data = data;\n this.rerunExpression();\n };\n CalculatedValue.prototype.getType = function () {\n return \"calculatedvalue\";\n };\n Object.defineProperty(CalculatedValue.prototype, \"name\", {\n /**\n * The calculated value name. It should be non empty and unique.\n */\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"includeIntoResult\", {\n /**\n * Set this property to true to include the non-empty calculated value into survey result, survey.data property.\n */\n get: function () {\n return this.getPropertyValue(\"includeIntoResult\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"includeIntoResult\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CalculatedValue.prototype, \"expression\", {\n /**\n * The Expression that used to calculate the value. You may use standard operators like +, -, * and /, squares (). Here is the example of accessing the question value {questionname}.\n *
Example: \"({quantity} * {price}) * (100 - {discount}) / 100\"\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n this.rerunExpression();\n },\n enumerable: true,\n configurable: true\n });\n CalculatedValue.prototype.locCalculation = function () {\n this.expressionIsRunning = true;\n };\n CalculatedValue.prototype.unlocCalculation = function () {\n this.expressionIsRunning = false;\n };\n CalculatedValue.prototype.resetCalculation = function () {\n this.isCalculated = false;\n };\n CalculatedValue.prototype.doCalculation = function (calculatedValues, values, properties) {\n if (this.isCalculated)\n return;\n this.runExpressionCore(calculatedValues, values, properties);\n this.isCalculated = true;\n };\n CalculatedValue.prototype.runExpression = function (values, properties) {\n this.runExpressionCore(null, values, properties);\n };\n Object.defineProperty(CalculatedValue.prototype, \"value\", {\n get: function () {\n if (!this.data)\n return undefined;\n return this.data.getVariable(this.name);\n },\n enumerable: true,\n configurable: true\n });\n CalculatedValue.prototype.setValue = function (val) {\n if (!this.data)\n return;\n this.data.setVariable(this.name, val);\n };\n Object.defineProperty(CalculatedValue.prototype, \"canRunExpression\", {\n get: function () {\n return (!!this.data &&\n !this.isLoadingFromJson &&\n !!this.expression &&\n !this.expressionIsRunning &&\n !!this.name);\n },\n enumerable: true,\n configurable: true\n });\n CalculatedValue.prototype.rerunExpression = function () {\n if (!this.canRunExpression)\n return;\n this.runExpression(this.data.getFilteredValues(), this.data.getFilteredProperties());\n };\n CalculatedValue.prototype.runExpressionCore = function (calculatedValues, values, properties) {\n if (!this.canRunExpression)\n return;\n this.ensureExpression(values);\n this.locCalculation();\n if (!!calculatedValues) {\n this.runDependentExpressions(calculatedValues, values, properties);\n }\n this.expressionRunner.run(values, properties);\n };\n CalculatedValue.prototype.runDependentExpressions = function (calculatedValues, values, properties) {\n var variables = this.expressionRunner.getVariables();\n if (!variables)\n return;\n for (var i = 0; i < calculatedValues.length; i++) {\n var calcItem = calculatedValues[i];\n if (calcItem === this || variables.indexOf(calcItem.name) < 0)\n continue;\n calcItem.doCalculation(calculatedValues, values, properties);\n values[calcItem.name] = calcItem.value;\n }\n };\n CalculatedValue.prototype.ensureExpression = function (values) {\n var _this = this;\n if (!!this.expressionRunner)\n return;\n this.expressionRunner = new __WEBPACK_IMPORTED_MODULE_3__conditions__[\"a\" /* ExpressionRunner */](this.expression);\n this.expressionRunner.onRunComplete = function (newValue) {\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(newValue, _this.value)) {\n _this.setValue(newValue);\n }\n _this.unlocCalculation();\n };\n };\n return CalculatedValue;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"a\" /* Base */]));\n\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"calculatedvalue\", [\"!name\", \"expression:expression\", \"includeIntoResult:boolean\"], function () {\n return new CalculatedValue();\n}, \"base\");\n\n\n/***/ }),\n/* 141 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__conditions__ = __webpack_require__(12);\n/* unused harmony export ExpressionItem */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return HtmlConditionItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return UrlConditionItem; });\n\n\n\n\nvar ExpressionItem = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(ExpressionItem, _super);\n function ExpressionItem(expression) {\n if (expression === void 0) { expression = null; }\n var _this = _super.call(this) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.expression = expression;\n return _this;\n }\n ExpressionItem.prototype.getType = function () {\n return \"expressionitem\";\n };\n ExpressionItem.prototype.runCondition = function (values, properties) {\n if (!this.expression)\n return false;\n return new __WEBPACK_IMPORTED_MODULE_3__conditions__[\"b\" /* ConditionRunner */](this.expression).run(values, properties);\n };\n Object.defineProperty(ExpressionItem.prototype, \"expression\", {\n /**\n * The expression property. If this expression returns true, then survey will use html property to show on complete page.\n */\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ExpressionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: true,\n configurable: true\n });\n ExpressionItem.prototype.getLocale = function () {\n return !!this.locOwner ? this.locOwner.getLocale() : \"\";\n };\n ExpressionItem.prototype.getMarkdownHtml = function (text) {\n return !!this.locOwner ? this.locOwner.getMarkdownHtml(text) : null;\n };\n ExpressionItem.prototype.getProcessedText = function (text) {\n return this.locOwner ? this.locOwner.getProcessedText(text) : text;\n };\n return ExpressionItem;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"a\" /* Base */]));\n\n/**\n * A class that contains expression and html propeties. It uses in survey.completedHtmlOnCondition array.\n * If the expression returns true then html of this item uses instead of survey.completedHtml property\n * @see SurveyModel.completedHtmlOnCondition\n * @see SurveyModel.completedHtml\n */\nvar HtmlConditionItem = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(HtmlConditionItem, _super);\n function HtmlConditionItem(expression, html) {\n if (expression === void 0) { expression = null; }\n if (html === void 0) { html = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"html\", _this);\n _this.html = html;\n return _this;\n }\n HtmlConditionItem.prototype.getType = function () {\n return \"htmlconditionitem\";\n };\n Object.defineProperty(HtmlConditionItem.prototype, \"html\", {\n /**\n * The html that shows on completed ('Thank you') page. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"html\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"html\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HtmlConditionItem.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: true,\n configurable: true\n });\n return HtmlConditionItem;\n}(ExpressionItem));\n\n/**\n * A class that contains expression and url propeties. It uses in survey.navigateToUrlOnCondition array.\n * If the expression returns true then url of this item uses instead of survey.navigateToUrl property\n * @see SurveyModel.navigateToUrl\n */\nvar UrlConditionItem = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(UrlConditionItem, _super);\n function UrlConditionItem(expression, url) {\n if (expression === void 0) { expression = null; }\n if (url === void 0) { url = null; }\n var _this = _super.call(this, expression) || this;\n _this.createLocalizableString(\"url\", _this);\n _this.url = url;\n return _this;\n }\n UrlConditionItem.prototype.getType = function () {\n return \"urlconditionitem\";\n };\n Object.defineProperty(UrlConditionItem.prototype, \"url\", {\n /**\n * The url that survey navigates to on completing the survey. The expression should return true\n * @see expression\n */\n get: function () {\n return this.getLocalizableStringText(\"url\");\n },\n set: function (value) {\n this.setLocalizableStringText(\"url\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(UrlConditionItem.prototype, \"locUrl\", {\n get: function () {\n return this.getLocalizableString(\"url\");\n },\n enumerable: true,\n configurable: true\n });\n return UrlConditionItem;\n}(ExpressionItem));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"expressionitem\", [\"expression:condition\"], function () {\n return new ExpressionItem();\n}, \"base\");\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"htmlconditionitem\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new HtmlConditionItem();\n}, \"expressionitem\");\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"urlconditionitem\", [{ name: \"url:string\", serializationProperty: \"locUrl\" }], function () {\n return new UrlConditionItem();\n}, \"expressionitem\");\n\n\n/***/ }),\n/* 142 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__expressions__ = __webpack_require__(22);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return SyntaxError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return parse; });\n// tslint:disable:only-arrow-functions\n// tslint:disable:object-literal-shorthand\n// tslint:disable:trailing-comma\n// tslint:disable:object-literal-sort-keys\n// tslint:disable:one-variable-per-declaration\n// tslint:disable:max-line-length\n// tslint:disable:no-consecutive-blank-lines\n// tslint:disable:align\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.2.6 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\n\n\nvar SyntaxError = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SyntaxError, _super);\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n return _this;\n }\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n return SyntaxError;\n}(Error));\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = { Expression: peg$parseExpression };\n var peg$startRuleFunction = peg$parseExpression;\n var peg$c0 = function (head, tail) {\n return buildBinaryOperand(head, tail, true);\n };\n var peg$c1 = \"||\";\n var peg$c2 = peg$literalExpectation(\"||\", false);\n var peg$c3 = \"or\";\n var peg$c4 = peg$literalExpectation(\"or\", true);\n var peg$c5 = function () { return \"or\"; };\n var peg$c6 = \"&&\";\n var peg$c7 = peg$literalExpectation(\"&&\", false);\n var peg$c8 = \"and\";\n var peg$c9 = peg$literalExpectation(\"and\", true);\n var peg$c10 = function () { return \"and\"; };\n var peg$c11 = function (head, tail) {\n return buildBinaryOperand(head, tail);\n };\n var peg$c12 = \"<=\";\n var peg$c13 = peg$literalExpectation(\"<=\", false);\n var peg$c14 = \"lessorequal\";\n var peg$c15 = peg$literalExpectation(\"lessorequal\", true);\n var peg$c16 = function () { return \"lessorequal\"; };\n var peg$c17 = \">=\";\n var peg$c18 = peg$literalExpectation(\">=\", false);\n var peg$c19 = \"greaterorequal\";\n var peg$c20 = peg$literalExpectation(\"greaterorequal\", true);\n var peg$c21 = function () { return \"greaterorequal\"; };\n var peg$c22 = \"=\";\n var peg$c23 = peg$literalExpectation(\"=\", false);\n var peg$c24 = \"equal\";\n var peg$c25 = peg$literalExpectation(\"equal\", true);\n var peg$c26 = function () { return \"equal\"; };\n var peg$c27 = \"!=\";\n var peg$c28 = peg$literalExpectation(\"!=\", false);\n var peg$c29 = \"notequal\";\n var peg$c30 = peg$literalExpectation(\"notequal\", true);\n var peg$c31 = function () { return \"notequal\"; };\n var peg$c32 = \"<\";\n var peg$c33 = peg$literalExpectation(\"<\", false);\n var peg$c34 = \"less\";\n var peg$c35 = peg$literalExpectation(\"less\", true);\n var peg$c36 = function () { return \"less\"; };\n var peg$c37 = \">\";\n var peg$c38 = peg$literalExpectation(\">\", false);\n var peg$c39 = \"greater\";\n var peg$c40 = peg$literalExpectation(\"greater\", true);\n var peg$c41 = function () { return \"greater\"; };\n var peg$c42 = \"+\";\n var peg$c43 = peg$literalExpectation(\"+\", false);\n var peg$c44 = function () { return \"plus\"; };\n var peg$c45 = \"-\";\n var peg$c46 = peg$literalExpectation(\"-\", false);\n var peg$c47 = function () { return \"minus\"; };\n var peg$c48 = \"*\";\n var peg$c49 = peg$literalExpectation(\"*\", false);\n var peg$c50 = function () { return \"mul\"; };\n var peg$c51 = \"/\";\n var peg$c52 = peg$literalExpectation(\"/\", false);\n var peg$c53 = function () { return \"div\"; };\n var peg$c54 = \"%\";\n var peg$c55 = peg$literalExpectation(\"%\", false);\n var peg$c56 = function () { return \"mod\"; };\n var peg$c57 = \"^\";\n var peg$c58 = peg$literalExpectation(\"^\", false);\n var peg$c59 = \"power\";\n var peg$c60 = peg$literalExpectation(\"power\", true);\n var peg$c61 = function () { return \"power\"; };\n var peg$c62 = \"*=\";\n var peg$c63 = peg$literalExpectation(\"*=\", false);\n var peg$c64 = \"contains\";\n var peg$c65 = peg$literalExpectation(\"contains\", true);\n var peg$c66 = \"contain\";\n var peg$c67 = peg$literalExpectation(\"contain\", true);\n var peg$c68 = function () { return \"contains\"; };\n var peg$c69 = \"notcontains\";\n var peg$c70 = peg$literalExpectation(\"notcontains\", true);\n var peg$c71 = \"notcontain\";\n var peg$c72 = peg$literalExpectation(\"notcontain\", true);\n var peg$c73 = function () { return \"notcontains\"; };\n var peg$c74 = \"anyof\";\n var peg$c75 = peg$literalExpectation(\"anyof\", true);\n var peg$c76 = function () { return \"anyof\"; };\n var peg$c77 = \"allof\";\n var peg$c78 = peg$literalExpectation(\"allof\", true);\n var peg$c79 = function () { return \"allof\"; };\n var peg$c80 = \"(\";\n var peg$c81 = peg$literalExpectation(\"(\", false);\n var peg$c82 = \")\";\n var peg$c83 = peg$literalExpectation(\")\", false);\n var peg$c84 = function (expr) { return expr; };\n var peg$c85 = function (name, params) { return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"a\" /* FunctionOperand */](name, params); };\n var peg$c86 = \"!\";\n var peg$c87 = peg$literalExpectation(\"!\", false);\n var peg$c88 = \"negate\";\n var peg$c89 = peg$literalExpectation(\"negate\", true);\n var peg$c90 = function (expr) { return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"b\" /* UnaryOperand */](expr, \"negate\"); };\n var peg$c91 = function (expr, op) { return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"b\" /* UnaryOperand */](expr, op); };\n var peg$c92 = \"empty\";\n var peg$c93 = peg$literalExpectation(\"empty\", true);\n var peg$c94 = function () { return \"empty\"; };\n var peg$c95 = \"notempty\";\n var peg$c96 = peg$literalExpectation(\"notempty\", true);\n var peg$c97 = function () { return \"notempty\"; };\n var peg$c98 = \"undefined\";\n var peg$c99 = peg$literalExpectation(\"undefined\", false);\n var peg$c100 = \"null\";\n var peg$c101 = peg$literalExpectation(\"null\", false);\n var peg$c102 = function () { return null; };\n var peg$c103 = function (value) { return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"c\" /* Const */](value); };\n var peg$c104 = \"{\";\n var peg$c105 = peg$literalExpectation(\"{\", false);\n var peg$c106 = \"}\";\n var peg$c107 = peg$literalExpectation(\"}\", false);\n var peg$c108 = function (value) { return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"d\" /* Variable */](value); };\n var peg$c109 = \"'\";\n var peg$c110 = peg$literalExpectation(\"'\", false);\n var peg$c111 = function (value) { return value; };\n var peg$c112 = \"\\\"\";\n var peg$c113 = peg$literalExpectation(\"\\\"\", false);\n var peg$c114 = \"[\";\n var peg$c115 = peg$literalExpectation(\"[\", false);\n var peg$c116 = \"]\";\n var peg$c117 = peg$literalExpectation(\"]\", false);\n var peg$c118 = function (sequence) { return sequence; };\n var peg$c119 = \",\";\n var peg$c120 = peg$literalExpectation(\",\", false);\n var peg$c121 = function (expr, tail) {\n if (expr == null)\n return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"e\" /* ArrayOperand */]([]);\n var array = [expr];\n if (Array.isArray(tail)) {\n var flatten = flattenArray(tail);\n for (var i = 3; i < flatten.length; i += 4) {\n array.push(flatten[i]);\n }\n }\n return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"e\" /* ArrayOperand */](array);\n };\n var peg$c122 = \"true\";\n var peg$c123 = peg$literalExpectation(\"true\", true);\n var peg$c124 = function () { return true; };\n var peg$c125 = \"false\";\n var peg$c126 = peg$literalExpectation(\"false\", true);\n var peg$c127 = function () { return false; };\n var peg$c128 = \"0x\";\n var peg$c129 = peg$literalExpectation(\"0x\", false);\n var peg$c130 = function () { return parseInt(text(), 16); };\n var peg$c131 = /^[\\-]/;\n var peg$c132 = peg$classExpectation([\"-\"], false, false);\n var peg$c133 = function (sign, num) { return sign == null ? num : -num; };\n var peg$c134 = \".\";\n var peg$c135 = peg$literalExpectation(\".\", false);\n var peg$c136 = function () { return parseFloat(text()); };\n var peg$c137 = function () { return parseInt(text(), 10); };\n var peg$c138 = \"0\";\n var peg$c139 = peg$literalExpectation(\"0\", false);\n var peg$c140 = function () { return 0; };\n var peg$c141 = function (chars) { return chars.join(\"\"); };\n var peg$c142 = \"\\\\'\";\n var peg$c143 = peg$literalExpectation(\"\\\\'\", false);\n var peg$c144 = function () { return \"'\"; };\n var peg$c145 = \"\\\\\\\"\";\n var peg$c146 = peg$literalExpectation(\"\\\\\\\"\", false);\n var peg$c147 = function () { return \"\\\"\"; };\n var peg$c148 = /^[^\"'{}]/;\n var peg$c149 = peg$classExpectation([\"\\\"\", \"'\", \"{\", \"}\"], true, false);\n var peg$c150 = function () { return text(); };\n var peg$c151 = /^[^{}]/;\n var peg$c152 = peg$classExpectation([\"{\", \"}\"], true, false);\n var peg$c153 = /^[0-9]/;\n var peg$c154 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$c155 = /^[1-9]/;\n var peg$c156 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c157 = /^[a-zA-Z]/;\n var peg$c158 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$c159 = peg$otherExpectation(\"whitespace\");\n var peg$c160 = /^[ \\t\\n\\r]/;\n var peg$c161 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$resultsCache = {};\n var peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n }\n else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n }\n else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n var key = peg$currPos * 34 + 0;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLogicOr();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseOrSign();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseLogicOr();\n if (s8 !== peg$FAILED) {\n s5 = [s5, s6, s7, s8];\n s4 = s5;\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s2, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseOrSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 1;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c2);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c3) {\n s1 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c4);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicOr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 2;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLogicAnd();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseAndSign();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseLogicAnd();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAndSign() {\n var s0, s1;\n var key = peg$currPos * 34 + 3;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s1 = peg$c6;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c8) {\n s1 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicAnd() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 4;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseCompOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseComparableOperators();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseCompOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseComparableOperators() {\n var s0, s1;\n var key = peg$currPos * 34 + 5;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c14) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c16();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c18);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 14).toLowerCase() === peg$c19) {\n s1 = input.substr(peg$currPos, 14);\n peg$currPos += 14;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c20);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c22;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c24) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c25);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 60) {\n s1 = peg$c32;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c34) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c37;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c38);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c39) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c40);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c41();\n }\n s0 = s1;\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseCompOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 6;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsePlusMinusOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePlusMinusSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsePlusMinusOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 7;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c42;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c44();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c45;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c46);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePlusMinusOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 8;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseMulDivOps();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMulDivSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseMulDivOps();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 9;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 42) {\n s1 = peg$c48;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c50();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c51;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c52);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s1 = peg$c54;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c55);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseMulDivOps() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 10;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseBinaryFuncOp();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePowerSigns();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBinaryFuncOp();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsePowerSigns() {\n var s0, s1;\n var key = peg$currPos * 34 + 11;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c57;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c58);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c59) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c60);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinaryFuncOp() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 12;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseBinFunctions();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseBinFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 13;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c63);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c64) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7).toLowerCase() === peg$c66) {\n s1 = input.substr(peg$currPos, 7);\n peg$currPos += 7;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c68();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 11).toLowerCase() === peg$c69) {\n s1 = input.substr(peg$currPos, 11);\n peg$currPos += 11;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c70);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 10).toLowerCase() === peg$c71) {\n s1 = input.substr(peg$currPos, 10);\n peg$currPos += 10;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c72);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c73();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c74) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c76();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c77) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c78);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c79();\n }\n s0 = s1;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 34 + 14;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c80;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c82;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c84(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseUnaryFunctionOp();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAtom();\n if (s0 === peg$FAILED) {\n s0 = peg$parseArrayOp();\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseFunctionOp() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 15;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLettersAndDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c80;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseSequence();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s4 = peg$c82;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c85(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnaryFunctionOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 16;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c86;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c87);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6).toLowerCase() === peg$c88) {\n s1 = input.substr(peg$currPos, 6);\n peg$currPos += 6;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c90(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseAtom();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseUnFunctions();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c91(s1, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseUnFunctions() {\n var s0, s1;\n var key = peg$currPos * 34 + 17;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c92) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c94();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8).toLowerCase() === peg$c95) {\n s1 = input.substr(peg$currPos, 8);\n peg$currPos += 8;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c96);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c97();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAtom() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 34 + 18;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c98) {\n s2 = peg$c98;\n peg$currPos += 9;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c99);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c100) {\n s2 = peg$c100;\n peg$currPos += 4;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c101);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c102();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseConstValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c103(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c104;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c105);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseValueInput();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s4 = peg$c106;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c107);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c108(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseConstValue() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 19;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$parseLogicValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseArithmeticValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parseLettersAndDigits();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c109;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c110);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c109;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c110);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c111(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c112;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c113);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseAnyInput();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c112;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c113);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c111(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArrayOp() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 20;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c114;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c115);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseSequence();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c116;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c117);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c118(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseSequence() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 34 + 21;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c119;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c120);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c119;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c120);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c121(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLogicValue() {\n var s0, s1;\n var key = peg$currPos * 34 + 22;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4).toLowerCase() === peg$c122) {\n s1 = input.substr(peg$currPos, 4);\n peg$currPos += 4;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c123);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c124();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c125) {\n s1 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c126);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c127();\n }\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseArithmeticValue() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 23;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c128) {\n s1 = peg$c128;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c129);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c130();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c131.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c132);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c133(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNumber() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 34 + 24;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseDigits();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c134;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c135);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDigits();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c136();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNonZeroDigits();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDigits();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c137();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c138;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c139);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c140();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 25;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseValueCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseValueCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c141(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyInput() {\n var s0, s1, s2;\n var key = peg$currPos * 34 + 26;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseAnyCharacters();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseAnyCharacters();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c141(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseAnyCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 27;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c142) {\n s1 = peg$c142;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c143);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c144();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c145) {\n s1 = peg$c145;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c146);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c147();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (peg$c148.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c149);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n }\n s0 = s1;\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseValueCharacters() {\n var s0, s1;\n var key = peg$currPos * 34 + 28;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (peg$c151.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c152);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLettersAndDigits() {\n var s0, s1, s2, s3, s4, s5, s6;\n var key = peg$currPos * 34 + 29;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseLetters();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parseDigits();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseLetters();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseLetters();\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c150();\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 30;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c153.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c154);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c153.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c154);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseNonZeroDigits() {\n var s0, s1;\n var key = peg$currPos * 34 + 31;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c155.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c156);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c155.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c156);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseLetters() {\n var s0, s1;\n var key = peg$currPos * 34 + 32;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = [];\n if (peg$c157.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c158);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c157.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c158);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n var key = peg$currPos * 34 + 33;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = [];\n if (peg$c160.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c161);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c160.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c161);\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c159);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function buildBinaryOperand(head, tail, isArithmeticOp) {\n if (isArithmeticOp === void 0) { isArithmeticOp = false; }\n return tail.reduce(function (result, elements) {\n return new __WEBPACK_IMPORTED_MODULE_1__expressions__[\"f\" /* BinaryOperand */](elements[1], result, elements[3], isArithmeticOp);\n }, head);\n }\n function flattenArray(array) {\n return [].concat.apply([], array);\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n }\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nvar parse = peg$parse;\n\n\n/***/ }),\n/* 143 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__panel__ = __webpack_require__(20);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return FlowPanelModel; });\n\n\n\n/**\n * The flow panel object. It is a container with flow layout where you can mix questions with mardown text.\n *\n */\nvar FlowPanelModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(FlowPanelModel, _super);\n function FlowPanelModel(name) {\n if (name === void 0) { name = \"\"; }\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"content\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"content\", function () {\n self.onContentChanged();\n });\n return _this;\n }\n FlowPanelModel.prototype.getType = function () {\n return \"flowpanel\";\n };\n FlowPanelModel.prototype.getChildrenLayoutType = function () {\n return \"flow\";\n };\n FlowPanelModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.onContentChanged();\n };\n Object.defineProperty(FlowPanelModel.prototype, \"content\", {\n get: function () {\n return this.getLocalizableStringText(\"content\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"content\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"locContent\", {\n get: function () {\n return this.getLocalizableString(\"content\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FlowPanelModel.prototype, \"html\", {\n get: function () {\n return this.getPropertyValue(\"html\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"html\", val);\n },\n enumerable: true,\n configurable: true\n });\n FlowPanelModel.prototype.onContentChanged = function () {\n var html = \"\";\n if (!!this.onCustomHtmlProducing) {\n html = this.onCustomHtmlProducing();\n }\n else {\n html = this.produceHtml();\n }\n this.html = html;\n if (!!this.contentChangedCallback)\n this.contentChangedCallback();\n };\n FlowPanelModel.prototype.produceHtml = function () {\n var html = [];\n //contentElementNamePrefix\n var regEx = /{(.*?(element:)[^$].*?)}/g;\n var str = this.content;\n var startIndex = 0;\n var res = null;\n while ((res = regEx.exec(str)) !== null) {\n if (res.index > startIndex) {\n html.push(str.substr(startIndex, res.index - startIndex));\n startIndex = res.index;\n }\n var question = this.getQuestionFromText(res[0]);\n if (!!question) {\n html.push(this.getHtmlForQuestion(question));\n }\n else {\n html.push(str.substr(startIndex, res.index + res[0].length - startIndex));\n }\n startIndex = res.index + res[0].length;\n }\n if (startIndex < str.length) {\n html.push(str.substr(startIndex, str.length - startIndex));\n }\n return html.join(\"\").replace(new RegExp(\"
\", \"g\"), \"
\");\n };\n FlowPanelModel.prototype.getQuestionFromText = function (str) {\n str = str.substr(1, str.length - 2);\n str = str.replace(FlowPanelModel.contentElementNamePrefix, \"\").trim();\n return this.getQuestionByName(str);\n };\n FlowPanelModel.prototype.getHtmlForQuestion = function (question) {\n if (!!this.onGetHtmlForQuestion)\n return this.onGetHtmlForQuestion(question);\n return \"\";\n };\n FlowPanelModel.prototype.getQuestionHtmlId = function (question) {\n return this.name + \"_\" + question.id;\n };\n FlowPanelModel.prototype.onAddElement = function (element, index) {\n _super.prototype.onAddElement.call(this, element, index);\n this.addElementToContent(element);\n element.renderWidth = \"\";\n };\n FlowPanelModel.prototype.onRemoveElement = function (element) {\n var searchStr = this.getElementContentText(element);\n this.content = this.content.replace(searchStr, \"\");\n _super.prototype.onRemoveElement.call(this, element);\n };\n FlowPanelModel.prototype.dragDropMoveElement = function (src, target, targetIndex) { };\n FlowPanelModel.prototype.addElementToContent = function (element) {\n if (this.isLoadingFromJson)\n return;\n var text = this.getElementContentText(element);\n if (!this.insertTextAtCursor(text)) {\n this.content = this.content + text;\n }\n };\n FlowPanelModel.prototype.insertTextAtCursor = function (text, prevName) {\n if (prevName === void 0) { prevName = null; }\n if (!this.isDesignMode || (!window && !window.getSelection))\n return false;\n var sel = window.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n var range = sel.getRangeAt(0);\n range.deleteContents();\n range.insertNode(document.createTextNode(text));\n var self = this;\n if (self.getContent) {\n var str = self.getContent(prevName);\n this.content = str;\n }\n return true;\n }\n return false;\n };\n FlowPanelModel.prototype.getElementContentText = function (element) {\n return \"{\" + FlowPanelModel.contentElementNamePrefix + element.name + \"}\";\n };\n FlowPanelModel.contentElementNamePrefix = \"element:\";\n return FlowPanelModel;\n}(__WEBPACK_IMPORTED_MODULE_2__panel__[\"c\" /* PanelModel */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"flowpanel\", [{ name: \"content:html\", serializationProperty: \"locContent\" }], function () {\n return new FlowPanelModel();\n}, \"panel\");\n\n\n/***/ }),\n/* 144 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export arabicSurveyStrings */\n\nvar arabicSurveyStrings = {\n pagePrevText: \"السابق\",\n pageNextText: \"التالي\",\n completeText: \"انهاء- تم\",\n progressText: \"{1} صفحة {0} من\",\n otherItemText: \"نص آخر\",\n emptySurvey: \"لا توجد صفحة مرئية أو سؤال في المسح\",\n completingSurvey: \"شكرا لك لاستكمال الاستبيان!\",\n loadingSurvey: \"...يتم تحميل الاستبيان\",\n optionsCaption: \"...اختر\",\n requiredError: \".يرجى الإجابة على السؤال\",\n requiredInAllRowsError: \"يرجى الإجابة على الأسئلة في جميع الصفوف\",\n numericError: \"يجب أن تكون القيمة الرقمية.\",\n textMinLength: \"الرجاء إدخال ما لا يقل عن {0} حرف\",\n textMaxLength: \"الرجاء إدخال أقل من {0} حرف\",\n textMinMaxLength: \"يرجى إدخال أكثر من {0} وأقل من {1} حرف\",\n minRowCountError: \"يرجى ملء ما لا يقل عن {0} الصفوف\",\n minSelectError: \"يرجى تحديد ما لا يقل عن {0} المتغيرات\",\n maxSelectError: \"يرجى تحديد ما لا يزيد عن {0} المتغيرات\",\n numericMinMax: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1} ويساوي أو أقل من {2}ا\",\n numericMin: \"و'{0}' يجب أن تكون مساوية أو أكثر من {1}ا\",\n numericMax: \"و'{0}' يجب أن تكون مساوية أو أقل من {1}ا\",\n invalidEmail: \"رجاء قم بإدخال بريد الكتروني صحيح\",\n urlRequestError: \"طلب إرجاع خطأ '{0}'. {1}ا\",\n urlGetChoicesError: \"عاد طلب بيانات فارغة أو 'المسار' ممتلكات غير صحيحة \",\n exceedMaxSize: \"وينبغي ألا يتجاوز حجم الملف {0}ا\",\n otherRequiredError: \"الرجاء إدخال قيمة أخرى\",\n uploadingFile: \"الملف الخاص بك تحميل. يرجى الانتظار عدة ثوان وحاول مرة أخرى\",\n addRow: \"اضافة صف\",\n removeRow: \"إزالة صف\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ar\"] = arabicSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ar\"] = \"العربية\";\n\n\n/***/ }),\n/* 145 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export bulgarianStrings */\n//Uncomment this line on creating a translation file\n\nvar bulgarianStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Напред\",\n completeText: \"Край\",\n startSurveyText: \"Начало\",\n otherItemText: \"Друго (опишете)\",\n noneItemText: \"Нито един\",\n selectAllItemText: \"Всички\",\n progressText: \"стр. {0}, общо стр. {1}\",\n emptySurvey: \"Анкетата не съдържа видими страници или въпроси.\",\n completingSurvey: \"Благодарим ви за участието в анкетата!\",\n completingSurveyBefore: \"Изглежда, че вие вече сте попълнили анкетата.\",\n loadingSurvey: \"Зареждане на анкетата...\",\n optionsCaption: \"Изберете...\",\n value: \"value\",\n requiredError: \"Моля, отговорете на следния въпрос.\",\n requiredErrorInPanel: \"Моля, отговорете поне на един от въпросите.\",\n requiredInAllRowsError: \"Моля, отговорете на въпросите на всички редове.\",\n numericError: \"Стойността следва да бъде число.\",\n textMinLength: \"Моля, използвайте поне {0} символа.\",\n textMaxLength: \"Моля, използвайте не повече от {0} символа.\",\n textMinMaxLength: \"Моля, използвайте повече от {0} и по-малко от {1} символа.\",\n minRowCountError: \"Моля, попълнете поне {0} реда.\",\n minSelectError: \"Моля, изберете поне {0} варианта.\",\n maxSelectError: \"Моля, изберете не повече от {0} варианта.\",\n numericMinMax: \"Стойността '{0}' следва да бъде равна или по-голяма от {1} и равна или по-малка от {2}\",\n numericMin: \"Стойността '{0}' следва да бъде равна или по-голяма от {1}\",\n numericMax: \"Стойността '{0}' следва да бъде равна или по-малка от {1}\",\n invalidEmail: \"Моля, въведете валиден адрес на електронна поща.\",\n invalidExpression: \"Изразът: {0} трябва да дава резултат 'true' (истина).\",\n urlRequestError: \"Заявката води до грешка '{0}'. {1}\",\n urlGetChoicesError: \"Заявката не връща данни или частта 'path' (път до търсения ресурс на сървъра) е неправилно зададена\",\n exceedMaxSize: \"Размерът на файла следва да не превишава {0}.\",\n otherRequiredError: \"Моля, въведете другата стойност.\",\n uploadingFile: \"Вашит файл се зарежда на сървъра. Моля, изчакайте няколко секунди и тогава опитвайте отново.\",\n loadingFile: \"Зареждане...\",\n chooseFile: \"Изберете файл(ове)...\",\n confirmDelete: \"Желаете ли да изтриете записа?\",\n keyDuplicationError: \"Стойността следва да бъде уникална.\",\n addColumn: \"Добавяне на колона\",\n addRow: \"Добавяне на ред\",\n removeRow: \"Премахване на ред\",\n addPanel: \"Добавяне на панел\",\n removePanel: \"Премахване на панел\",\n choices_Item: \"елемент\",\n matrix_column: \"Колона\",\n matrix_row: \"Ред\",\n savingData: \"Резултатите се запазват на сървъра...\",\n savingDataError: \"Поради възникнала грешка резултатите не можаха да бъдат запазени.\",\n savingDataSuccess: \"Резултатите бяха запазени успешно!\",\n saveAgainButton: \"Нов опит\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вие използвахте {0} на тази страница и общо {1}.\",\n timerSpentPage: \"Вие използвахте {0} на тази страница.\",\n timerSpentSurvey: \"Вие използвахте общо {0}.\",\n timerLimitAll: \"Вие изпозвахте {0} от {1} на тази страница и общо {2} от {3}.\",\n timerLimitPage: \"Вие използвахте {0} от {1} на тази страница.\",\n timerLimitSurvey: \"Вие използвахте общо {0} от {1}.\",\n cleanCaption: \"Изчистване\",\n clearCaption: \"Начално състояние\",\n removeFileCaption: \"Премахване на файла\"\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"bg\"] = bulgarianStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"bg\"] = \"Bulgarian\";\n\n\n/***/ }),\n/* 146 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export catalanSurveyStrings */\n\nvar catalanSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Següent\",\n completeText: \"Complet\",\n otherItemText: \"Un altre (descrigui)\",\n progressText: \"Pàgina {0} de {1}\",\n emptySurvey: \"No hi ha cap pàgina visible o pregunta a l'enquesta.\",\n completingSurvey: \"Gràcies per completar l'enquesta!\",\n loadingSurvey: \"L'enquesta s'està carregant ...\",\n optionsCaption: \"Selecciona ...\",\n requiredError: \"Si us plau contesti la pregunta.\",\n requiredInAllRowsError: \"Si us plau contesti les preguntes de cada filera.\",\n numericError: \"L'estimació ha de ser numèrica.\",\n textMinLength: \"Si us plau entre almenys {0} símbols.\",\n textMaxLength: \"Si us plau entre menys de {0} símbols.\",\n textMinMaxLength: \"Si us plau entre més de {0} i menys de {1} símbols.\",\n minRowCountError: \"Si us plau ompli almenys {0} fileres.\",\n minSelectError: \"Si us plau seleccioni almenys {0} variants.\",\n maxSelectError: \"Si us plau seleccioni no més de {0} variants.\",\n numericMinMax: \"El '{0}' deu ser igual o més de {1} i igual o menys de {2}\",\n numericMin: \"El '{0}' ha de ser igual o més de {1}\",\n numericMax: \"El '{0}' ha de ser igual o menys de {1}\",\n invalidEmail: \"Si us plau afegiu un correu electrònic vàlid.\",\n urlRequestError: \"La sol·licitud va tornar error '{0}'. {1}\",\n urlGetChoicesError: \"La sol·licitud va tornar buida de dates o la propietat 'trajectòria' no és correcta\",\n exceedMaxSize: \"La mida de l'arxiu no pot excedir {0}.\",\n otherRequiredError: \"Si us plau afegiu l'altra estimació.\",\n uploadingFile: \"El seu arxiu s'està pujant. Si us plau esperi uns segons i intenteu-ho de nou.\",\n addRow: \"Afegiu una filera\",\n removeRow: \"Eliminar una filera\",\n choices_firstItem: \"primer article\",\n choices_secondItem: \"segon article\",\n choices_thirdItem: \"tercer article\",\n matrix_column: \"Columna\",\n matrix_row: \"Filera\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ca\"] = catalanSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ca\"] = \"català\";\n\n\n/***/ }),\n/* 147 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export czechSurveyStrings */\n\nvar czechSurveyStrings = {\n pagePrevText: \"Předchozí\",\n pageNextText: \"Další\",\n completeText: \"Hotovo\",\n otherItemText: \"Jiná odpověď (napište)\",\n progressText: \"Strana {0} z {1}\",\n emptySurvey: \"Průzkumu neobsahuje žádné otázky.\",\n completingSurvey: \"Děkujeme za vyplnění průzkumu!\",\n loadingSurvey: \"Probíhá načítání průzkumu...\",\n optionsCaption: \"Vyber...\",\n requiredError: \"Odpovězte prosím na otázku.\",\n requiredInAllRowsError: \"Odpovězte prosím na všechny otázky.\",\n numericError: \"V tomto poli lze zadat pouze čísla.\",\n textMinLength: \"Zadejte prosím alespoň {0} znaků.\",\n textMaxLength: \"Zadejte prosím méně než {0} znaků.\",\n textMinMaxLength: \"Zadejte prosím více než {0} a méně než {1} znaků.\",\n minRowCountError: \"Vyplňte prosím alespoň {0} řádků.\",\n minSelectError: \"Vyberte prosím alespoň {0} varianty.\",\n maxSelectError: \"Nevybírejte prosím více než {0} variant.\",\n numericMinMax: \"Odpověď '{0}' by mělo být větší nebo rovno {1} a menší nebo rovno {2}\",\n numericMin: \"Odpověď '{0}' by mělo být větší nebo rovno {1}\",\n numericMax: \"Odpověď '{0}' by mělo být menší nebo rovno {1}\",\n invalidEmail: \"Zadejte prosím platnou e-mailovou adresu.\",\n urlRequestError: \"Požadavek vrátil chybu '{0}'. {1}\",\n urlGetChoicesError: \"Požadavek nevrátil data nebo cesta je neplatná\",\n exceedMaxSize: \"Velikost souboru by neměla být větší než {0}.\",\n otherRequiredError: \"Zadejte prosím jinou hodnotu.\",\n uploadingFile: \"Váš soubor se nahrává. Zkuste to prosím za několik sekund.\",\n addRow: \"Přidat řádek\",\n removeRow: \"Odstranit\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"cs\"] = czechSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"cs\"] = \"čeština\";\n\n\n/***/ }),\n/* 148 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export danishSurveyStrings */\n\nvar danishSurveyStrings = {\n pagePrevText: \"Tilbage\",\n pageNextText: \"Videre\",\n completeText: \"Færdig\",\n startSurveyText: \"Start\",\n otherItemText: \"Valgfrit svar...\",\n noneItemText: \"Ingen\",\n selectAllItemText: \"Vælg alle\",\n progressText: \"Side {0} af {1}\",\n emptySurvey: \"Der er ingen synlige spørgsmål.\",\n completingSurvey: \"Mange tak for din besvarelse!\",\n completingSurveyBefore: \"Vores data viser at du allerede har gennemført dette spørgeskema.\",\n loadingSurvey: \"Spørgeskemaet hentes fra serveren...\",\n optionsCaption: \"Vælg...\",\n value: \"værdi\",\n requiredError: \"Besvar venligst spørgsmålet.\",\n requiredErrorInPanel: \"Besvar venligst mindst ét spørgsmål.\",\n requiredInAllRowsError: \"Besvar venligst spørgsmål i alle rækker.\",\n numericError: \"Angiv et tal.\",\n textMinLength: \"Angiv mindst {0} tegn.\",\n textMaxLength: \"Please enter less than {0} characters.\",\n textMinMaxLength: \"Angiv mere end {0} og mindre end {1} tegn.\",\n minRowCountError: \"Udfyld mindst {0} rækker.\",\n minSelectError: \"Vælg venligst mindst {0} svarmulighed(er).\",\n maxSelectError: \"Vælg venligst færre {0} svarmuligheder(er).\",\n numericMinMax: \"'{0}' skal være lig med eller større end {1} og lig med eller mindre end {2}\",\n numericMin: \"'{0}' skal være lig med eller større end {1}\",\n numericMax: \"'{0}' skal være lig med eller mindre end {1}\",\n invalidEmail: \"Angiv venligst en gyldig e-mail adresse.\",\n invalidExpression: \"Udtrykket: {0} skal returnere 'true'.\",\n urlRequestError: \"Forespørgslen returnerede fejlen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørgslen returnerede ingen data eller 'path' parameteren er forkert\",\n exceedMaxSize: \"Filstørrelsen må ikke overstige {0}.\",\n otherRequiredError: \"Angiv en værdi for dit valgfrie svar.\",\n uploadingFile: \"Din fil bliver uploadet. Vent nogle sekunder og prøv eventuelt igen.\",\n loadingFile: \"Indlæser...\",\n chooseFile: \"Vælg fil(er)...\",\n confirmDelete: \"Vil du fjerne den?\",\n keyDuplicationError: \"Denne værdi skal være unik.\",\n addColumn: \"Tilføj kolonne\",\n addRow: \"Tilføj række\",\n removeRow: \"Fjern\",\n addPanel: \"Tilføj ny\",\n removePanel: \"Fjern\",\n choices_Item: \"valg\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Række\",\n savingData: \"Resultaterne bliver gemt på serveren...\",\n savingDataError: \"Der opstod en fejl og vi kunne ikke gemme resultatet.\",\n savingDataSuccess: \"Resultatet blev gemt!\",\n saveAgainButton: \"Prøv igen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har brugt {0} på denne side og {1} i alt.\",\n timerSpentPage: \"Du har brugt {0} på denne side.\",\n timerSpentSurvey: \"Du har brugt {0} i alt.\",\n timerLimitAll: \"Du har brugt {0} af {1} på denne side og {2} af {3} i alt.\",\n timerLimitPage: \"Du har brugt {0} af {1} på denne side.\",\n timerLimitSurvey: \"Du har brugt {0} af {1} i alt.\",\n cleanCaption: \"Rens\",\n clearCaption: \"Fjern\",\n removeFileCaption: \"Fjern denne fil\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"da\"] = danishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"da\"] = \"dansk\";\n\n\n/***/ }),\n/* 149 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export dutchSurveyStrings */\n//Created on behalf https://github.com/Frank13\n//Modified on behalf Roeland Verbakel\n\nvar dutchSurveyStrings = {\n pagePrevText: \"Vorige\",\n pageNextText: \"Volgende\",\n completeText: \"Verzenden\",\n startSurveyText: \"Start\",\n otherItemText: \"Anders, nl.\",\n noneItemText: \"Geen\",\n selectAllItemText: \"Selecteer Alles\",\n progressText: \"Pagina {0} van {1}\",\n panelDynamicProgressText: \"Record {0} of {1}\",\n questionsProgressText: \"Geantwoord {0}/{1} vragen\",\n emptySurvey: \"Er is geen zichtbare pagina of vraag in deze vragenlijst\",\n completingSurvey: \"Bedankt voor het invullen van de vragenlijst\",\n completingSurveyBefore: \"Onze gegevens tonen aan dat je deze vragenlijst reeds beantwoord hebt.\",\n loadingSurvey: \"De vragenlijst is aan het laden...\",\n optionsCaption: \"Kies...\",\n value: \"waarde\",\n requiredError: \"Dit is een vereiste vraag\",\n requiredErrorInPanel: \"Gelieve ten minste een vraag te beantwoorden.\",\n numericError: \"Het antwoord moet een getal zijn\",\n textMinLength: \"Vul minstens {0} karakters in\",\n minSelectError: \"Selecteer minimum {0} antwoorden\",\n maxSelectError: \"Selecteer niet meer dan {0} antwoorden\",\n textMaxLength: \"Gelieve minder dan {0} karakters in te vullen.\",\n textMinMaxLength: \"Gelieve meer dan {0} en minder dan {1} karakters in te vullen.\",\n minRowCountError: \"Gelieve ten minste {0} rijen in te vullen.\",\n numericMinMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1} en kleiner of gelijk aan {2}\",\n numericMin: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n numericMax: \"Uw antwoord '{0}' moet groter of gelijk zijn aan {1}\",\n invalidEmail: \"Vul een geldig e-mailadres in\",\n invalidExpression: \"De uitdrukking: {0} moet 'waar' teruggeven.\",\n urlRequestError: \"De vraag keerde een fout terug '{0}'. {1}\",\n urlGetChoicesError: \"De vraag gaf een leeg antwoord terug of de 'pad' eigenschap is niet correct\",\n exceedMaxSize: \"De grootte van het bestand mag niet groter zijn dan {0}\",\n otherRequiredError: \"Vul het veld 'Anders, nl.' in\",\n requiredInAllRowsError: \"Deze vraag vereist één antwoord per rij\",\n uploadingFile: \"Uw bestand wordt opgeladen. Gelieve enkele seconden te wachten en opnieuw te proberen.\",\n loadingFile: \"Opladen...\",\n chooseFile: \"Kies uw bestand(en)...\",\n noFileChosen: \"Geen bestand gekozen\",\n confirmDelete: \"Wil je deze gegevens verwijderen?\",\n keyDuplicationError: \"Deze waarde moet uniek zijn.\",\n addColumn: \"Voeg kolom toe\",\n addRow: \"Voeg rij toe\",\n removeRow: \"Verwijder\",\n addPanel: \"Nieuwe toevoegen\",\n removePanel: \"Verwijder\",\n choices_Item: \"onderwerp\",\n matrix_column: \"Kolom\",\n matrix_row: \"Rij\",\n savingData: \"De resultaten worden bewaard op de server...\",\n savingDataError: \"Er was een probleem en we konden de resultaten niet bewaren.\",\n savingDataSuccess: \"De resultaten werden succesvol bewaard!\",\n saveAgainButton: \"Probeer opnieuw\",\n timerMin: \"minimum\",\n timerSec: \"sec\",\n timerSpentAll: \"U heeft {0} gespendeerd op deze pagina en {1} in totaal.\",\n timerSpentPage: \"U heeft {0} op deze pagina gespendeerd.\",\n timerSpentSurvey: \"U heeft in totaal {0} gespendeerd.\",\n timerLimitAll: \"U heeft {0} van {1} op deze pagina gespendeerd en {2} van {3} in totaal.\",\n timerLimitPage: \"U heeft {0} van {1} gespendeerd op deze pagina.\",\n timerLimitSurvey: \"U heeft {0} van {1} in het totaal.\",\n cleanCaption: \"Kuis op\",\n clearCaption: \"Kuis op\",\n chooseFileCaption: \"Gekozen bestand\",\n removeFileCaption: \"Verwijder deze file\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Neen\",\n confirmRemoveFile: \"Bent u zeker dat u deze file wilt verwijderen: {0}?\",\n confirmRemoveAllFiles: \"Bent u zeker dat u al deze files wilt verwijderen?\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"nl\"] = dutchSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"nl\"] = \"nederlands\";\n\n\n/***/ }),\n/* 150 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export estonianSurveyStrings */\n\nvar estonianSurveyStrings = {\n pagePrevText: \"Tagasi\",\n pageNextText: \"Edasi\",\n completeText: \"Lõpeta\",\n startSurveyText: \"Alusta\",\n otherItemText: \"Muu (täpsusta)\",\n noneItemText: \"Mitte midagi\",\n selectAllItemText: \"Vali kõik\",\n progressText: \"Lehekülg {0}/{1}\",\n panelDynamicProgressText: \"Kirje {0}/{1}\",\n questionsProgressText: \"Vastatud {0} küsimust {1}-st\",\n emptySurvey: \"Selles uuringus ei ole ühtki nähtavat lehekülge või küsimust.\",\n completingSurvey: \"Aitäh, et vastasid ankeedile!\",\n completingSurveyBefore: \"Meie andmetel oled sa sellele ankeedile juba vastanud.\",\n loadingSurvey: \"Laen ankeeti...\",\n optionsCaption: \"Vali...\",\n value: \"väärtus\",\n requiredError: \"Palun vasta küsimusele.\",\n requiredErrorInPanel: \"Palun vasta vähemalt ühele küsimusele.\",\n requiredInAllRowsError: \"Palun anna vastus igal real.\",\n numericError: \"See peaks olema numbriline väärtus.\",\n textMinLength: \"Palun sisesta vähemalt {0} tähemärki.\",\n textMaxLength: \"Palun ära sisesta rohkem kui {0} tähemärki.\",\n textMinMaxLength: \"Sisesta palun {0} - {1} tähemärki.\",\n minRowCountError: \"Sisesta plaun vähemalt {0} rida.\",\n minSelectError: \"Palun vali vähemalt {0} varianti.\",\n maxSelectError: \"Palun vali kõige rohkem {0} varianti.\",\n numericMinMax: \"'{0}' peaks olema võrdne või suurem kui {1} ja võrdne või väiksem kui {2}\",\n numericMin: \"'{0}' peaks olema võrdne või suurem kui {1}\",\n numericMax: \"'{0}' peaks olema võrnde või väiksem kui {1}\",\n invalidEmail: \"Sisesta palun korrektne e-posti aadress.\",\n exceedMaxSize: \"Faili suurus ei tohi ületada {0}.\",\n otherRequiredError: \"Sisesta palun muu vastus.\",\n uploadingFile: \"Sinu fail laeb üles. Palun oota mõned sekundid ning proovi seejärel uuesti.\",\n loadingFile: \"Laen...\",\n chooseFile: \"Vali fail(id)...\",\n noFileChosen: \"Faili pole valitud\",\n confirmDelete: \"Kas tahad kirje kustutada?\",\n keyDuplicationError: \"See väärtus peab olema unikaalne.\",\n addColumn: \"Lisa veerg\",\n addRow: \"Lisa rida\",\n removeRow: \"Eemalda\",\n addPanel: \"Lisa uus\",\n removePanel: \"Eemalda\",\n matrix_column: \"Veerg\",\n matrix_row: \"Rida\",\n savingData: \"Salvestan andmed serveris...\",\n savingDataError: \"Tekkis viga ning me ei saanud vastuseid salvestada.\",\n savingDataSuccess: \"Vastuste salvestamine õnnestus!\",\n saveAgainButton: \"Proovi uuesti\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Oled veetnud {0} sellel lehel ning kokku {1}.\",\n timerSpentPage: \"Oled veetnud {0} sellel lehel.\",\n timerSpentSurvey: \"Oled veetnud {0} kokku.\",\n timerLimitAll: \"Oled kulutanud {0} võimalikust {1} sellel lehel ning {2} võimalikust {3} kokku.\",\n timerLimitPage: \"Oled kulutanud {0} võimalikust {1} sellel lehel.\",\n timerLimitSurvey: \"Oled kulutanud {0} võimalikust {1} koguajast.\",\n cleanCaption: \"Puhasta\",\n clearCaption: \"Puhasta\",\n chooseFileCaption: \"Vali fail\",\n removeFileCaption: \"Eemalda see fail\",\n booleanCheckedLabel: \"Jah\",\n booleanUncheckedLabel: \"Ei\",\n confirmRemoveFile: \"Oled sa kindel, et soovid selle faili eemaldada: {0}?\",\n confirmRemoveAllFiles: \"Oled sa kindel, et soovid eemaldada kõik failid?\",\n questionTitlePatternText: \"Küsimuse pealkiri\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"et\"] = estonianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"et\"] = \"eesti keel\";\n\n\n/***/ }),\n/* 151 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export finnishSurveyStrings */\n\nvar finnishSurveyStrings = {\n pagePrevText: \"Edellinen\",\n pageNextText: \"Seuraava\",\n completeText: \"Valmis\",\n otherItemText: \"Muu (kuvaile)\",\n progressText: \"Sivu {0}/{1}\",\n emptySurvey: \"Tässä kyselyssä ei ole yhtäkään näkyvillä olevaa sivua tai kysymystä.\",\n completingSurvey: \"Kiitos kyselyyn vastaamisesta!\",\n loadingSurvey: \"Kyselyä ladataan palvelimelta...\",\n optionsCaption: \"Valitse...\",\n requiredError: \"Vastaa kysymykseen, kiitos.\",\n numericError: \"Arvon tulee olla numeerinen.\",\n textMinLength: \"Ole hyvä ja syötä vähintään {0} merkkiä.\",\n minSelectError: \"Ole hyvä ja valitse vähintään {0} vaihtoehtoa.\",\n maxSelectError: \"Ole hyvä ja valitse enintään {0} vaihtoehtoa.\",\n numericMinMax: \"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1} ja vähemmän tai yhtä suuri kuin {2}\",\n numericMin: \"'{0}' täytyy olla enemmän tai yhtä suuri kuin {1}\",\n numericMax: \"'{0}' täytyy olla vähemmän tai yhtä suuri kuin {1}\",\n invalidEmail: \"Syötä validi sähköpostiosoite.\",\n otherRequiredError: 'Ole hyvä ja syötä \"Muu (kuvaile)\"'\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"fi\"] = finnishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"fi\"] = \"suomalainen\";\n\n\n/***/ }),\n/* 152 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export frenchSurveyStrings */\n\nvar frenchSurveyStrings = {\n pagePrevText: \"Précédent\",\n pageNextText: \"Suivant\",\n completeText: \"Terminer\",\n startSurveyText: \"Commencer\",\n otherItemText: \"Autre (préciser)\",\n noneItemText: \"Aucun\",\n selectAllItemText: \"Tout sélectionner\",\n progressText: \"Page {0} sur {1}\",\n panelDynamicProgressText: \"Enregistrement {0} sur {1}\",\n questionsProgressText: \"{0}/{1} question(s) répondue(s)\",\n emptySurvey: \"Il n'y a ni page visible ni question visible dans ce questionnaire\",\n completingSurvey: \"Merci d'avoir répondu au questionnaire !\",\n completingSurveyBefore: \"Nos données indiquent que vous avez déjà rempli ce questionnaire.\",\n loadingSurvey: \"Le questionnaire est en cours de chargement...\",\n optionsCaption: \"Choisissez...\",\n value: \"valeur\",\n requiredError: \"La réponse à cette question est obligatoire.\",\n requiredErrorInPanel: \"Merci de répondre au moins à une question.\",\n requiredInAllRowsError: \"Toutes les lignes sont obligatoires\",\n numericError: \"La réponse doit être un nombre.\",\n textMinLength: \"Merci de saisir au moins {0} caractères.\",\n textMaxLength: \"Merci de saisir moins de {0} caractères.\",\n textMinMaxLength: \"Merci de saisir entre {0} et {1} caractères.\",\n minRowCountError: \"Merci de compléter au moins {0} lignes.\",\n minSelectError: \"Merci de sélectionner au minimum {0} réponses.\",\n maxSelectError: \"Merci de sélectionner au maximum {0} réponses.\",\n numericMinMax: \"Votre réponse '{0}' doit être supérieure ou égale à {1} et inférieure ou égale à {2}\",\n numericMin: \"Votre réponse '{0}' doit être supérieure ou égale à {1}\",\n numericMax: \"Votre réponse '{0}' doit être inférieure ou égale à {1}\",\n invalidEmail: \"Merci d'entrer une adresse mail valide.\",\n invalidExpression: \"L'expression: {0} doit retourner 'true'.\",\n urlRequestError: \"La requête a renvoyé une erreur '{0}'. {1}\",\n urlGetChoicesError: \"La requête a renvoyé des données vides ou la propriété 'path' est incorrecte\",\n exceedMaxSize: \"La taille du fichier ne doit pas excéder {0}.\",\n otherRequiredError: \"Merci de préciser le champ 'Autre'.\",\n uploadingFile: \"Votre fichier est en cours de chargement. Merci d'attendre quelques secondes et de réessayer.\",\n loadingFile: \"Chargement...\",\n chooseFile: \"Ajouter des fichiers...\",\n noFileChosen: \"Aucun fichier ajouté\",\n confirmDelete: \"Voulez-vous supprimer cet enregistrement ?\",\n keyDuplicationError: \"Cette valeur doit être unique.\",\n addColumn: \"Ajouter une colonne\",\n addRow: \"Ajouter une ligne\",\n removeRow: \"Supprimer\",\n addPanel: \"Ajouter\",\n removePanel: \"Supprimer\",\n choices_Item: \"item\",\n matrix_column: \"Colonne\",\n matrix_row: \"Ligne\",\n savingData: \"Les résultats sont en cours de sauvegarde sur le serveur...\",\n savingDataError: \"Une erreur est survenue et a empêché la sauvegarde des résultats.\",\n savingDataSuccess: \"Les résultats ont bien été enregistrés !\",\n saveAgainButton: \"Réessayer\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Vous avez passé {0} sur cette page et {1} au total.\",\n timerSpentPage: \"Vous avez passé {0} sur cette page.\",\n timerSpentSurvey: \"Vous avez passé {0} au total.\",\n timerLimitAll: \"Vous avez passé {0} sur {1} sur cette page et {2} sur {3} au total.\",\n timerLimitPage: \"Vous avez passé {0} sur {1} sur cette page.\",\n timerLimitSurvey: \"Vous avez passé {0} sur {1} au total.\",\n cleanCaption: \"Nettoyer\",\n clearCaption: \"Vider\",\n chooseFileCaption: \"Ajouter un fichier\",\n removeFileCaption: \"Enlever ce fichier\",\n booleanCheckedLabel: \"Oui\",\n booleanUncheckedLabel: \"Non\",\n confirmRemoveFile: \"Êtes-vous certains de vouloir supprimer ce fichier : {0}?\",\n confirmRemoveAllFiles: \"Êtes-vous certains de vouloir supprimer tous les fichiers?\",\n questionTitlePatternText: \"Titre de la question\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"fr\"] = frenchSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"fr\"] = \"français\";\n\n\n/***/ }),\n/* 153 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export georgianSurveyStrings */\n\nvar georgianSurveyStrings = {\n pagePrevText: \"უკან\",\n pageNextText: \"შემდეგ\",\n completeText: \"დასრულება\",\n progressText: \"გვერდი {0} / {1}\",\n emptySurvey: \"არცერთი კითხვა არ არის.\",\n completingSurvey: \"გმადლობთ კითხვარის შევსებისთვის!\",\n loadingSurvey: \"ჩატვირთვა სერვერიდან...\",\n otherItemText: \"სხვა (გთხოვთ მიუთითეთ)\",\n optionsCaption: \"არჩევა...\",\n requiredError: \"გთხოვთ უპასუხეთ კითხვას.\",\n numericError: \"პასუხი უნდა იყოს რიცხვი.\",\n textMinLength: \"გთხოვთ შეიყვანეთ არანაკლებ {0} სიმბოლო.\",\n minSelectError: \"გთხოვთ აირჩიეთ არანაკლებ {0} ვარიანტი.\",\n maxSelectError: \"გთხოვთ აირჩიეთ არაუმეტეს {0} ვარიანტი.\",\n numericMinMax: \"'{0}' უნდა იყოს მეტი ან ტოლი, ვიდრე {1}, და ნაკლები ან ტოლი ვიდრე {2}\",\n numericMin: \"'{0}' უნდა იყოს მეტი ან ტოლი ვიდრე {1}\",\n numericMax: \"'{0}' უნდა იყოს ნაკლები ან ტოლი ვიდრე {1}\",\n invalidEmail: \"გთხოვთ შეიყვანოთ ელ. ფოსტის რეალური მისამართი.\",\n otherRequiredEror: \"გთხოვთ შეავსეთ ველი 'სხვა'\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ka\"] = georgianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ka\"] = \"ქართული\";\n\n\n/***/ }),\n/* 154 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export germanSurveyStrings */\n\nvar germanSurveyStrings = {\n pagePrevText: \"Zurück\",\n pageNextText: \"Weiter\",\n completeText: \"Abschließen\",\n startSurveyText: \"Start\",\n otherItemText: \"Sonstiges (Beschreibung)\",\n noneItemText: \"Nichts\",\n selectAllItemText: \"Alle auswählen\",\n progressText: \"Seite {0} von {1}\",\n emptySurvey: \"Es ist keine Frage vorhanden.\",\n completingSurvey: \"Danke, dass Sie die Umfrage abgeschlossen haben!\",\n completingSurveyBefore: \"Wir haben festgestellt, dass Sie diese Umfrage bereits abgeschlossen haben.\",\n loadingSurvey: \"Fragebogen wird geladen...\",\n optionsCaption: \"Bitte auswählen...\",\n value: \"Wert\",\n requiredError: \"Bitte beantworten Sie diese Frage.\",\n requiredErrorInPanel: \"Bitte beantworten Sie mindestens eine Frage.\",\n requiredInAllRowsError: \"Bitte beantworten Sie alle Fragen.\",\n numericError: \"Der Wert muss eine Zahl sein.\",\n textMinLength: \"Bitte geben sie mindestens {0} Zeichen ein.\",\n textMaxLength: \"Bitte geben Sie nicht mehr als {0} Zeichen ein.\",\n textMinMaxLength: \"Bitte geben sie mindestens {0} und maximal {1} Zeichen ein.\",\n minRowCountError: \"Bitte machen Sie in mindestens {0} Zeilen eine Eingabe.\",\n minSelectError: \"Bitte wählen Sie mindestens {0} Variante(n) aus.\",\n maxSelectError: \"Bitte wählen Sie nicht mehr als {0} Variante(n) aus.\",\n numericMinMax: \"'{0}' muss größer oder gleich {1} und kleiner oder gleich {2} sein\",\n numericMin: \"'{0}' muss größer oder gleich {1} sein\",\n numericMax: \"'{0}' muss kleiner oder gleich {1} sein\",\n invalidEmail: \"Bitte geben Sie eine gültige E-Mail-Adresse ein.\",\n invalidExpression: \"Der Ausdruck: {0} muss den Wert 'wahr'(true) zurückliefern.\",\n urlRequestError: \"Die Anfrage lieferte den folgenden Fehler zurück '{0}'. {1}\",\n urlGetChoicesError: \"Die Anfrage lieferte leere Daten zurück oder der Wert der Variable 'path' ist falsch\",\n exceedMaxSize: \"Die Dateigröße darf {0} nicht überschreiten.\",\n otherRequiredError: \"Bitte geben Sie den anderen Wert ein.\",\n uploadingFile: \"Ihre Datei wird hochgeladen. Bitte warten Sie ein paar Sekunden und versuchen Sie es dann erneut.\",\n loadingFile: \"Wird geladen...\",\n chooseFile: \"Datei(en) auswählen...\",\n confirmDelete: \"Wollen Sie den Eintrag löschen?\",\n keyDuplicationError: \"Dieser Wert muss eindeutig sein.\",\n addColumn: \"Spalte hinzufügen\",\n addRow: \"Zeile hinzufügen\",\n removeRow: \"Entfernen\",\n addPanel: \"Neu hinzufügen\",\n removePanel: \"Entfernen\",\n choices_Item: \"Element\",\n matrix_column: \"Spalte\",\n matrix_row: \"Zeile\",\n savingData: \"Die Ergebnisse werden auf dem Server gespeichert...\",\n savingDataError: \"Es ist ein Fehler aufgetreten. Die Ergebnisse konnten nicht gespeichert werden.\",\n savingDataSuccess: \"Die Ergebnisse wurden gespeichert!\",\n saveAgainButton: \"Bitte versuchen Sie es erneut\",\n timerMin: \"Min.\",\n timerSec: \"Sek.\",\n timerSpentAll: \"Sie waren {0} auf dieser Seite und insgesamt {1}.\",\n timerSpentPage: \"Sie waren {0} auf dieser Seite.\",\n timerSpentSurvey: \"Sie haben insgesamt {0} benötigt.\",\n timerLimitAll: \"Sie waren {0} von {1} auf dieser Seite und insgesamt {2} von {3}.\",\n timerLimitPage: \"Sie waren {0} von {1} auf dieser Seite.\",\n timerLimitSurvey: \"Sie haben insgesamt {0} von {1} benötigt.\",\n cleanCaption: \"Sauber\",\n clearCaption: \"Leeren\",\n removeFileCaption: \"Datei löschen\",\n booleanCheckedLabel: \"Ja\",\n booleanUncheckedLabel: \"Nein\",\n chooseFileCaption: \"Datei wählen\",\n confirmRemoveAllFiles: \"Sind sie sicher, dass sie alle Dateien löschen möchten?\",\n confirmRemoveFile: \"Sind sie sicher, dass sie diese Datei löschen möchten: {0}?\",\n noFileChosen: \"Keine Datei ausgewählt\",\n panelDynamicProgressText: \"Eintrag {0} von {1}\",\n questionTitlePatternText: \"Fragetitel\",\n questionsProgressText: \"{0} von {1} Fragen beantwortet\",\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"de\"] = germanSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"de\"] = \"deutsch\";\n\n\n/***/ }),\n/* 155 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export greekSurveyStrings */\n//Created by https://github.com/agelospanagiotakis\n\nvar greekSurveyStrings = {\n pagePrevText: \"Προηγούμενο\",\n pageNextText: \"Επόμενο\",\n completeText: \"Ολοκλήρωση\",\n otherItemText: \"Άλλο (παρακαλώ διευκρινίστε)\",\n progressText: \"Σελίδα {0} από {1}\",\n emptySurvey: \"Δεν υπάρχει καμία ορατή σελίδα ή ορατή ερώτηση σε αυτό το ερωτηματολόγιο.\",\n completingSurvey: \"Ευχαριστούμε για την συμπλήρωση αυτού του ερωτηματολογίου!\",\n loadingSurvey: \"Το ερωτηματολόγιο φορτώνεται απο το διακομιστή...\",\n optionsCaption: \"Επιλέξτε...\",\n requiredError: \"Παρακαλώ απαντήστε στην ερώτηση.\",\n requiredInAllRowsError: \"Παρακαλώ απαντήστε στις ερωτήσεις σε όλες τις γραμμές.\",\n numericError: \"Η τιμή πρέπει να είναι αριθμητική.\",\n textMinLength: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} σύμβολα.\",\n minRowCountError: \"Παρακαλώ συμπληρώστε τουλάχιστον {0} γραμμές.\",\n minSelectError: \"Παρακαλώ επιλέξτε τουλάχιστον {0} παραλλαγές.\",\n maxSelectError: \"Παρακαλώ επιλέξτε όχι παραπάνω απο {0} παραλλαγές.\",\n numericMinMax: \"Το '{0}' θα πρέπει να είναι ίσο ή μεγαλύτερο απο το {1} και ίσο ή μικρότερο απο το {2}\",\n numericMin: \"Το '{0}' πρέπει να είναι μεγαλύτερο ή ισο με το {1}\",\n numericMax: \"Το '{0}' πρέπει να είναι μικρότερο ή ίσο απο το {1}\",\n invalidEmail: \"Παρακαλώ δώστε μια αποδεκτή διεύθυνση e-mail.\",\n urlRequestError: \"Η αίτηση επέστρεψε σφάλμα '{0}'. {1}\",\n urlGetChoicesError: \"Η αίτηση επέστρεψε κενά δεδομένα ή η ιδιότητα 'μονοπάτι/path' είναι εσφαλμένη\",\n exceedMaxSize: \"Το μέγεθος δεν μπορεί να υπερβαίνει τα {0}.\",\n otherRequiredError: \"Παρακαλώ συμπληρώστε την τιμή για το πεδίο 'άλλο'.\",\n uploadingFile: \"Το αρχείο σας ανεβαίνει. Παρακαλώ περιμένετε καποια δευτερόλεπτα και δοκιμάστε ξανά.\",\n addRow: \"Προσθήκη γραμμής\",\n removeRow: \"Αφαίρεση\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"gr\"] = greekSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"gr\"] = \"ελληνικά\";\n\n\n/***/ }),\n/* 156 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export hebrewSurveyStrings */\n\nvar hebrewSurveyStrings = {\n pagePrevText: \"אחורה\",\n pageNextText: \"קדימה\",\n completeText: \"סיום\",\n progressText: \"דף {1} מתוך {0}\",\n emptySurvey: \"אין שאלות\",\n completingSurvey: \"תודה על מילוי השאלון!\",\n loadingSurvey: \"טעינה מהשרת...\",\n otherItemText: \"אחר (נא לתאר)\",\n optionsCaption: \"בחר...\",\n requiredError: \"אנא השב על השאלה\",\n numericError: \"התשובה צריכה להיות מספר.\",\n textMinLength: \"הזן לפחות {0} תווים.\",\n minSelectError: \"בחר לפחות {0} אפשרויות.\",\n maxSelectError: \"בחר עד {0} אפשרויות.\",\n numericMinMax: \"'{0}' חייב להיות שווה או גדול מ {1}, ושווה ל- {2} או פחות מ- {}}\",\n numericMin: \"'{0}' חייב להיות שווה או גדול מ {1}\",\n numericMax: \"'{0}' חייב להיות שווה או קטן מ {1}\",\n invalidEmail: 'הזן כתובת דוא\"ל חוקית.',\n otherRequiredError: 'נא להזין נתונים בשדה \"אחר\"'\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"he\"] = hebrewSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"he\"] = \"עברית\";\n\n\n/***/ }),\n/* 157 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export hungarianSurveyStrings */\n\nvar hungarianSurveyStrings = {\n pagePrevText: \"Vissza\",\n pageNextText: \"Tovább\",\n completeText: \"Kész\",\n otherItemText: \"Egyéb (adja meg)\",\n progressText: \"{0}./{1} oldal\",\n emptySurvey: \"There is no visible page or question in the survey.\",\n completingSurvey: \"Köszönjük, hogy kitöltötte felmérésünket!\",\n completingSurveyBefore: \"Már kitöltötte a felmérést.\",\n loadingSurvey: \"Felmérés betöltése...\",\n optionsCaption: \"Válasszon...\",\n value: \"érték\",\n requiredError: \"Kérjük, válaszolja meg ezt a kérdést!\",\n requiredInAllRowsError: \"Kérjük adjon választ minden sorban!\",\n numericError: \"Az érték szám kell, hogy legyen!\",\n textMinLength: \"Adjon meg legalább {0} karaktert!\",\n textMaxLength: \"Legfeljebb {0} karaktert adjon meg!\",\n textMinMaxLength: \"Adjon meg legalább {0}, de legfeljebb {1} karaktert!\",\n minRowCountError: \"Töltsön ki minimum {0} sort!\",\n minSelectError: \"Válasszon ki legalább {0} lehetőséget!\",\n maxSelectError: \"Ne válasszon többet, mint {0} lehetőség!\",\n numericMinMax: \"'{0}' legyen nagyobb, vagy egyenlő, mint {1} és kisebb, vagy egyenlő, mint {2}!\",\n numericMin: \"'{0}' legyen legalább {1}!\",\n numericMax: \"The '{0}' ne legyen nagyobb, mint {1}!\",\n invalidEmail: \"Adjon meg egy valós email címet!\",\n urlRequestError: \"A lekérdezés hibával tért vissza: '{0}'. {1}\",\n urlGetChoicesError: \"A lekérdezés üres adattal tért vissza, vagy a 'path' paraméter helytelen.\",\n exceedMaxSize: \"A méret nem lehet nagyobb, mint {0}.\",\n otherRequiredError: \"Adja meg az egyéb értéket!\",\n uploadingFile: \"Feltöltés folyamatban. Várjon pár másodpercet, majd próbálja újra.\",\n confirmDelete: \"Törli ezt a rekordot?\",\n keyDuplicationError: \"Az értéknek egyedinek kell lennie.\",\n addRow: \"Sor hozzáadása\",\n removeRow: \"Eltávolítás\",\n addPanel: \"Új hozzáadása\",\n removePanel: \"Eltávolítás\",\n choices_Item: \"elem\",\n matrix_column: \"Oszlop\",\n matrix_row: \"Sor\",\n savingData: \"Eredmény mentése a szerverre...\",\n savingDataError: \"Egy hiba folytán nem tudtuk elmenteni az eredményt.\",\n savingDataSuccess: \"Eredmény sikeresen mentve!\",\n saveAgainButton: \"Próbálja újra\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"hu\"] = hungarianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"hu\"] = \"magyar\";\n\n\n/***/ }),\n/* 158 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export icelandicSurveyStrings */\n\nvar icelandicSurveyStrings = {\n pagePrevText: \"Tilbaka\",\n pageNextText: \"Áfram\",\n completeText: \"Lokið\",\n otherItemText: \"Hinn (skýring)\",\n progressText: \"Síða {0} of {1}\",\n emptySurvey: \"Það er enginn síða eða spurningar í þessari könnun.\",\n completingSurvey: \"Takk fyrir að fyllja út þessa könnun!\",\n loadingSurvey: \"Könnunin er að hlaða...\",\n optionsCaption: \"Veldu...\",\n requiredError: \"Vinsamlegast svarið spurningunni.\",\n requiredInAllRowsError: \"Vinsamlegast svarið spurningum í öllum röðum.\",\n numericError: \"Þetta gildi verður að vera tala.\",\n textMinLength: \"Það ætti að vera minnst {0} tákn.\",\n textMaxLength: \"Það ætti að vera mest {0} tákn.\",\n textMinMaxLength: \"Það ætti að vera fleiri en {0} og færri en {1} tákn.\",\n minRowCountError: \"Vinsamlegast fyllið úr að minnsta kosti {0} raðir.\",\n minSelectError: \"Vinsamlegast veljið að minnsta kosti {0} möguleika.\",\n maxSelectError: \"Vinsamlegast veljið ekki fleiri en {0} möguleika.\",\n numericMinMax: \"'{0}' ætti að vera meira en eða jafnt og {1} minna en eða jafnt og {2}\",\n numericMin: \"{0}' ætti að vera meira en eða jafnt og {1}\",\n numericMax: \"'{0}' ætti að vera minna en eða jafnt og {1}\",\n invalidEmail: \"Vinsamlegast sláið inn gilt netfang.\",\n urlRequestError: \"Beiðninn skilaði eftirfaranadi villu '{0}'. {1}\",\n urlGetChoicesError: \"Beiðninng skilaði engum gögnum eða slóðinn var röng\",\n exceedMaxSize: \"Skráinn skal ekki vera stærri en {0}.\",\n otherRequiredError: \"Vinamlegast fyllið út hitt gildið.\",\n uploadingFile: \"Skráinn þín var send. Vinsamlegast bíðið í nokkrar sekúndur og reynið aftur.\",\n addRow: \"Bæta við röð\",\n removeRow: \"Fjarlægja\",\n choices_firstItem: \"fyrsti hlutur\",\n choices_secondItem: \"annar hlutur\",\n choices_thirdItem: \"þriðji hlutur\",\n matrix_column: \"Dálkur\",\n matrix_row: \"Röð\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"is\"] = icelandicSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"is\"] = \"íslenska\";\n\n\n/***/ }),\n/* 159 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export indonesianStrings */\n\nvar indonesianStrings = {\n pagePrevText: \"Sebelumnya\",\n pageNextText: \"Selanjutnya\",\n completeText: \"Selesai\",\n startSurveyText: \"Mulai\",\n otherItemText: \"Lainnya (jelaskan)\",\n noneItemText: \"Tidak Ada\",\n selectAllItemText: \"Pilih Semua\",\n progressText: \"Halaman {0} dari {1}\",\n emptySurvey: \"Tidak ada halaman atau pertanyaan dalam survei.\",\n completingSurvey: \"Terima kasih telah menyelesaikan survei!\",\n completingSurveyBefore: \"Catatan kami menunjukkan bahwa Anda telah menyelesaikan survei ini.\",\n loadingSurvey: \"Memuat survei...\",\n optionsCaption: \"Pilih...\",\n value: \"nilai\",\n requiredError: \"Silahkan jawab pertanyaan berikut.\",\n requiredErrorInPanel: \"Silahkan jawab setidaknya satu petanyaan.\",\n requiredInAllRowsError: \"Silahkan jawab pertanyaan pada semua baris.\",\n numericError: \"Nilai harus berupa angka.\",\n textMinLength: \"Silahkan masukkan setidaknya {0} karakter.\",\n textMaxLength: \"Silahkan masukkan kurang {0} karakter.\",\n textMinMaxLength: \"PSilahkan masukkan lebih dari {0} dan kurang dari {1} karakter.\",\n minRowCountError: \"Silahkan isi setidaknya {0} baris.\",\n minSelectError: \"Silahkan pilih setidaknya {0} varian.\",\n maxSelectError: \"Silahkan pilih tidak lebih dari {0} varian.\",\n numericMinMax: \"'{0}' harus sama dengan atau lebih dari {1} dan harus sama dengan atau kurang dari {2}\",\n numericMin: \"'{0}' harus sama dengan atau lebih dari {1}\",\n numericMax: \"'{0}' harus sama dengan atau kurang dari {1}\",\n invalidEmail: \"Silahkan masukkan e-mail yang benar.\",\n invalidExpression: \"Ekspresi: {0} harus mengembalikan 'benar'.\",\n urlRequestError: \"Permintaan mengembalikan kesalahan '{0}'. {1}\",\n urlGetChoicesError: \"Permintaan mengembalikan data kosong atau properti 'path' salah.\",\n exceedMaxSize: \"Ukuran berkas tidak boleh melebihi {0}.\",\n otherRequiredError: \"Silahkan masukkan nilai lainnnya.\",\n uploadingFile: \"Berkas Anda sedang diunggah. Silahkan tunggu beberapa saat atau coba lagi.\",\n loadingFile: \"Memuat...\",\n chooseFile: \"Pilih berkas...\",\n confirmDelete: \"Apakah Anda ingin menghapus catatan?\",\n keyDuplicationError: \"Nilai harus unik.\",\n addColumn: \"Tambah kolom\",\n addRow: \"Tambah baris\",\n removeRow: \"Hapus\",\n addPanel: \"Tambah baru\",\n removePanel: \"Hapus\",\n choices_Item: \"item\",\n matrix_column: \"Kolom\",\n matrix_row: \"Baris\",\n savingData: \"Hasil sedang disimpan pada server...\",\n savingDataError: \"Kesalahan terjadi dan kami tidak dapat menyimpan hasil.\",\n savingDataSuccess: \"Hasil telah sukses disimpan!\",\n saveAgainButton: \"Coba lagi\",\n timerMin: \"menit\",\n timerSec: \"detik\",\n timerSpentAll: \"Anda telah menghabiskan {0} pada halaman ini dan {1} secara keseluruhan.\",\n timerSpentPage: \"YAnda telah menghabiskan {0} pada halaman ini.\",\n timerSpentSurvey: \"Anda telah menghabiskan {0} secara keseluruhan.\",\n timerLimitAll: \"Anda telah menghabiskan {0} dari {1} pada halaman ini dan {2} dari {3} secara keseluruhan.\",\n timerLimitPage: \"Anda telah menghabiskan {0} dari {1} pada halaman ini.\",\n timerLimitSurvey: \"Anda telah menghabiskan {0} dari {1} secara keseluruhan.\",\n cleanCaption: \"Bersihkan\",\n clearCaption: \"Bersihkan\",\n removeFileCaption: \"Hapus berkas ini\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"id\"] = indonesianStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"id\"] = \"Bahasa Indonesia\";\n\n\n/***/ }),\n/* 160 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export italianSurveyStrings */\n\nvar italianSurveyStrings = {\n pagePrevText: \"Precedente\",\n pageNextText: \"Successivo\",\n completeText: \"Salva\",\n startSurveyText: \"Inizio\",\n otherItemText: \"Altro (descrivi)\",\n progressText: \"Pagina {0} di {1}\",\n emptySurvey: \"Non ci sono pagine o domande visibili nel questionario.\",\n completingSurvey: \"Grazie per aver completato il questionario!\",\n completingSurveyBefore: \"I nostri records mostrano che hai già completato questo questionario.\",\n loadingSurvey: \"Caricamento del questionario in corso...\",\n optionsCaption: \"Scegli...\",\n value: \"valore\",\n requiredError: \"Campo obbligatorio\",\n requiredErrorInPanel: \"Per Favore, rispondi ad almeno una domanda.\",\n requiredInAllRowsError: \"Completare tutte le righe\",\n numericError: \"Il valore deve essere numerico\",\n textMinLength: \"Inserire almeno {0} caratteri\",\n textMaxLength: \"Lunghezza massima consentita {0} caratteri\",\n textMinMaxLength: \"Inserire una stringa con minimo {0} e massimo {1} caratteri\",\n minRowCountError: \"Completare almeno {0} righe.\",\n minSelectError: \"Selezionare almeno {0} varianti.\",\n maxSelectError: \"Selezionare massimo {0} varianti.\",\n numericMinMax: \"'{0}' deve essere uguale o superiore a {1} e uguale o inferiore a {2}\",\n numericMin: \"'{0}' deve essere uguale o superiore a {1}\",\n numericMax: \"'{0}' deve essere uguale o inferiore a {1}\",\n invalidEmail: \"Inserire indirizzo mail valido\",\n urlRequestError: \"La richiesta ha risposto con un errore '{0}'. {1}\",\n urlGetChoicesError: \"La richiesta ha risposto null oppure il percorso non è corretto\",\n exceedMaxSize: \"Il file non può eccedere {0}\",\n otherRequiredError: \"Inserire il valore 'altro'\",\n uploadingFile: \"File in caricamento. Attendi alcuni secondi e riprova\",\n loadingFile: \"Caricamento...\",\n chooseFile: \"Selezionare file(s)...\",\n noFileChosen: \"Nessun file selezionato\",\n confirmDelete: \"Sei sicuro di voler elminare il record?\",\n keyDuplicationError: \"Questo valore deve essere univoco.\",\n addRow: \"Aggiungi riga\",\n removeRow: \"Rimuovi riga\",\n addPanel: \"Aggiungi riga\",\n removePanel: \"Elimina\",\n choices_Item: \"Elemento\",\n matrix_column: \"Colonna\",\n matrix_row: \"Riga\",\n savingData: \"Salvataggio dati sul server...\",\n savingDataError: \"Si è verificato un errore e non è stato possibile salvare i risultati.\",\n savingDataSuccess: \"I risultati sono stati salvati con successo!\",\n saveAgainButton: \"Riprova\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Hai impiegato {0} su questa pagina e {1} in totale.\",\n timerSpentPage: \"Hai impiegato {0} su questa pagina.\",\n timerSpentSurvey: \"Hai impiegato {0} in totale.\",\n timerLimitAll: \"Hai impiegato {0} di {1} su questa pagina e {2} di {3} in totale.\",\n timerLimitPage: \"Hai impiegato {0} di {1} su questa pagina.\",\n timerLimitSurvey: \"Hai impiegato {0} di {1} in totale.\",\n cleanCaption: \"Pulisci\",\n confirmRemoveFile: \"Sei sicuro di voler elminare questo file: {0}?\",\n confirmRemoveAllFiles: \"Sei sicuro di voler elminare tutti i files?\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"it\"] = italianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"it\"] = \"italiano\";\n\n\n/***/ }),\n/* 161 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export japaneseSurveyStrings */\n// Uncomment this line on creating a translation file\n\nvar japaneseSurveyStrings = {\n pagePrevText: \"前の\",\n pageNextText: \"次へ\",\n completeText: \"完了\",\n startSurveyText: \"スタート\",\n otherItemText: \"その他(説明)\",\n noneItemText: \"なし\",\n selectAllItemText: \"すべて選択\",\n progressText: \"{0}/{1}頁\",\n emptySurvey: \"この調査に表示できるページや質問はありません\",\n completingSurvey: \"調査を完了してくれてありがとうございました\",\n loadingSurvey: \"調査をダウンロード中\",\n optionsCaption: \"選択\",\n requiredError: \"質問にお答え下さい\",\n numericError: \"数字でご記入下さい\",\n textMinLength: \"{0} 文字以上で入力して下さい\",\n minRowCountError: \"{0}行以上で入力して下さい\",\n minSelectError: \"{0}種類以上を選択して下さい\",\n numericMin: \"'{0}' は同等か{1}より大きくなければなりません\",\n numericMax: \"'{0}' は同等か{1}より小さくなければなりません\",\n invalidEmail: \"有効なメールアドレスをご記入下さい\",\n exceedMaxSize: \"ファイルのサイズは{0}を超えてはいけません\",\n uploadingFile: \"ファイルをアップロード中です。しばらくしてから再度お試し下さい\",\n loadingFile: \"読み込み中\",\n chooseFile: \"ファイルを選択\",\n cleanCaption: \"削除\",\n clearCaption: \"空白\",\n removeFileCaption: \"このファイルを削除\"\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ja\"] = japaneseSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ja\"] = \"日本語\";\n\n\n/***/ }),\n/* 162 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export koreanStrings */\n\nvar koreanStrings = {\n pagePrevText: \"이전\",\n pageNextText: \"다음\",\n completeText: \"완료\",\n startSurveyText: \"시작\",\n otherItemText: \"기타(설명)\",\n progressText: \"페이지 {1} 중 {0}\",\n emptySurvey: \"설문지에 보여지는 페이지나 질문이 없습니다\",\n completingSurvey: \"설문 조사를 완료해 주셔서 감사합니다!\",\n completingSurveyBefore: \"기록에 따르면 이미 설문 조사를 마치셨습니다.\",\n loadingSurvey: \"설문조사가 로드중입니다...\",\n optionsCaption: \"선택하십시오...\",\n value: \"값\",\n requiredError: \"질문에 답하시오.\",\n requiredErrorInPanel: \"하나 이상의 질문에 답하십시오.\",\n requiredInAllRowsError: \"모든 행에 있는 질문에 답하십시오.\",\n numericError: \"값은 숫자여야 합니다.\",\n textMinLength: \"답변의 길이는 최소 {0}자여야 입니다.\",\n textMaxLength: \"답변의 길이는 {0}자를 초과 할 수 없습니다.\",\n textMinMaxLength: \"답변의 길이는 {0} - {1}자 사이여야 합니다.\",\n minRowCountError: \"최소 {0}개의 행을 채우십시오\",\n minSelectError: \"최소 {0}개의 변수를 선택하십시오.\",\n maxSelectError: \"최대 {0}개의 변수를 선택하십시오.\",\n numericMinMax: \"'{0}'은 {1}보다 크거나 같고 {2}보다 작거나 같아야합니다.\",\n numericMin: \"'{0}'은 {1}보다 크거나 같아야합니다.\",\n numericMax: \"'{0}'은 {1}보다 작거나 같아야합니다.\",\n invalidEmail: \"올바른 이메일 주소를 입력하십시오.\",\n invalidExpression: \"표현식: {0}은 '참'이어야 합니다.\",\n urlRequestError: \"'{0}'으로 잘못된 요청입니다. {1}\",\n urlGetChoicesError: \"비어있는 데이터를 요청했거나 잘못된 속성의 경로입니다.\",\n exceedMaxSize: \"파일 크기가 {0}을 초과 할 수 없습니다.\",\n otherRequiredError: \"다른 질문을 작성하십시오.\",\n uploadingFile: \"파일 업로드 중입니다. 잠시 후 다시 시도하십시오.\",\n loadingFile: \"로드 중...\",\n chooseFile: \"파일 선택...\",\n confirmDelete: \"기록을 삭제하시겠습니까?\",\n keyDuplicationError: \" 이 값은 고유해야합니다.\",\n addColumn: \"열 추가\",\n addRow: \"행 추가\",\n removeRow: \"제거\",\n addPanel: \"새롭게 추가\",\n removePanel: \"제거\",\n choices_Item: \"항목\",\n matrix_column: \"열\",\n matrix_row: \"행\",\n savingData: \"결과가 서버에 저장 중입니다...\",\n savingDataError: \"오류가 발생하여 결과를 저장할 수 없습니다.\",\n savingDataSuccess: \"결과가 성공적으로 저장되었습니다!\",\n saveAgainButton: \"다시 시도하십시오\",\n timerMin: \"분\",\n timerSec: \"초\",\n timerSpentAll: \"현재 페이지에서 {0}을 소요해 총 {1}이 걸렸습니다.\",\n timerSpentPage: \"현재 페이지에서 {0]이 걸렸습니다\",\n timerSpentSurvey: \"총 {0}이 걸렸습니다.\",\n timerLimitAll: \"현재 페이지에서 {0}/{1}을 소요해 총 {2}/{3}이 걸렸습니다.\",\n timerLimitPage: \"현재 페이지에서 {0}/{1}이 걸렸습니다.\",\n timerLimitSurvey: \"총 {0}/{1}이 걸렸습니다.\",\n cleanCaption: \"닦기\",\n clearCaption: \"지우기\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ko\"] = koreanStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ko\"] = \"한국어\";\n\n\n/***/ }),\n/* 163 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export latvianSurveyStrings */\n\nvar latvianSurveyStrings = {\n pagePrevText: \"Atpakaļ\",\n pageNextText: \"Tālāk\",\n completeText: \"Pabeigt\",\n progressText: \"Lappuse {0} no {1}\",\n emptySurvey: \"Nav neviena jautājuma.\",\n completingSurvey: \"Pateicamies Jums par anketas aizpildīšanu!\",\n loadingSurvey: \"Ielāde no servera...\",\n otherItemText: \"Cits (lūdzu, aprakstiet!)\",\n optionsCaption: \"Izvēlēties...\",\n requiredError: \"Lūdzu, atbildiet uz jautājumu!\",\n numericError: \"Atbildei ir jābūt skaitlim.\",\n textMinLength: \"Lūdzu, ievadiet vismaz {0} simbolus.\",\n minSelectError: \"Lūdzu, izvēlieties vismaz {0} variantu.\",\n maxSelectError: \"Lūdzu, izvēlieties ne vairak par {0} variantiem.\",\n numericMinMax: \"'{0}' jābūt vienādam vai lielākam nekā {1}, un vienādam vai mazākam, nekā {2}\",\n numericMin: \"'{0}' jābūt vienādam vai lielākam {1}\",\n numericMax: \"'{0}' jābūt vienādam vai lielākam {1}\",\n invalidEmail: \"Lūdzu, ievadiet patiesu e-pasta adresi!\",\n otherRequiredError: 'Lūdzu, ievadiet datus laukā \"Cits\"'\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"lv\"] = latvianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"lv\"] = \"latviešu\";\n\n\n/***/ }),\n/* 164 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export lithuaniaSurveyStrings */\n//Uncomment this line on creating a translation file\n\nvar lithuaniaSurveyStrings = {\n pagePrevText: \"Atgal\",\n pageNextText: \"Toliau\",\n completeText: \"Baigti\",\n startSurveyText: \"Pradėti\",\n otherItemText: \"Kita (įvesti)\",\n noneItemText: \"Nėra\",\n selectAllItemText: \"Pasirinkti visus\",\n progressText: \"Puslapis {0} iš {1}\",\n emptySurvey: \"Apklausoje nėra matomo puslapio ar klausimo.\",\n completingSurvey: \"Dėkojame už dalyvavimą apklausoje!\",\n completingSurveyBefore: \"Mūsų įrašai rodo, kad jau atlikote šią apklausą.\",\n loadingSurvey: \"Prašome palaukti...\",\n optionsCaption: \"Pasirinkti...\",\n value: \"reikšmė\",\n requiredError: \"Būtina atsakyti į šį klausimą.\",\n requiredErrorInPanel: \"Būtina atsakyti bent į vieną klausimą.\",\n requiredInAllRowsError: \"Prašome atsakyti į klausimus visose eilutėse.\",\n numericError: \"Turi būti skaičiai.\",\n textMinLength: \"Prašome suvesti bent {0} simbolius.\",\n textMaxLength: \"Prašome suvesti mažiau nei {0} simbolių.\",\n textMinMaxLength: \"Prašome suvesti daugiau nei {0} ir mažiau nei {1} simbolių.\",\n minRowCountError: \"Prašome suvesti ne mažiau nei {0} eilučių.\",\n minSelectError: \"Prašome pasirinkti bent {0} variantų.\",\n maxSelectError: \"Pasirinkite ne daugiau kaip {0} variantus.\",\n numericMinMax: \"'{0}' turi būti lygus arba didesnis nei {1} ir lygus arba mažesnis nei {2}\",\n numericMin: \"'{0}' turėtų būti lygus arba didesnis nei {1}\",\n numericMax: \"'{0}' turėtų būti lygus ar mažesnis už {1}\",\n invalidEmail: \"Prašome įvesti galiojantį elektroninio pašto adresą.\",\n invalidExpression: \"Reikšmė: {0} turi grąžinti 'true'.\",\n urlRequestError: \"Užklausa grąžino klaidą'{0}'. {1}\",\n urlGetChoicesError: \"Užklausa grąžino tuščius duomenis arba 'path' savybė yra neteisinga\",\n exceedMaxSize: \"Failo dydis neturi viršyti {0}.\",\n otherRequiredError: \"Įveskite kitą reikšmę.\",\n uploadingFile: \"Jūsų failas yra keliamas. Palaukite keletą sekundžių ir bandykite dar kartą.\",\n loadingFile: \"Prašome palaukti...\",\n chooseFile: \"Pasirinkti failą(us)...\",\n confirmDelete: \"Ar norite ištrinti įrašą?\",\n keyDuplicationError: \"Ši reikšmė turėtų būti unikali.\",\n addColumn: \"Pridėti stulpelį\",\n addRow: \"Pridėti eilutę\",\n removeRow: \"Ištrinti\",\n addPanel: \"Pridėti naują\",\n removePanel: \"Ištrinti\",\n choices_Item: \"elementas\",\n matrix_column: \"Stulpelis\",\n matrix_row: \"Eilutė\",\n savingData: \"Rezultatai saugomi serveryje...\",\n savingDataError: \"Įvyko klaida ir mes negalėjome išsaugoti rezultatų.\",\n savingDataSuccess: \"Rezultatai buvo išsaugoti sėkmingai!\",\n saveAgainButton: \"Bandyti dar kartą\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Praleidote {0} šiame puslapyje ir {1} iš viso.\",\n timerSpentPage: \"Praleidote {0} šiame puslapyje.\",\n timerSpentSurvey: \"Praleidote {0} iš viso.\",\n timerLimitAll: \"Praleidote {0} iš {1} šiame puslapyje ir {2} iš {3} iš viso.\",\n timerLimitPage: \"Praleidote {0} iš {1} šiame puslapyje.\",\n timerLimitSurvey: \"Praleidote {0} iš {1} iš viso.\",\n cleanCaption: \"Išvalyti\",\n clearCaption: \"Valyti\",\n removeFileCaption: \"Ištrinti šį failą\"\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"lt\"] = lithuaniaSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"lt\"] = \"Lietuvių\";\n\n\n/***/ }),\n/* 165 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export norwegianSurveyStrings */\n\nvar norwegianSurveyStrings = {\n pagePrevText: \"Forrige\",\n pageNextText: \"Neste\",\n completeText: \"Fullfør\",\n startSurveyText: \"Start\",\n otherItemText: \"Annet (beskriv)\",\n progressText: \"Side {0} av {1}\",\n emptySurvey: \"Det er ingen synlig side eller spørsmål i undersøkelsen.\",\n completingSurvey: \"Takk for at du fullførte undersøkelsen!\",\n completingSurveyBefore: \"Våre data viser at du allerede har gjennomført denne undersøkelsen.\",\n loadingSurvey: \"Undersøkelsen laster...\",\n optionsCaption: \"Velg...\",\n value: \"verdi\",\n requiredError: \"Vennligst svar på spørsmålet.\",\n requiredErrorInPanel: \"Vennligst svar på minst ett spørsmål.\",\n requiredInAllRowsError: \"Vennligst svar på spørsmål i alle rader.\",\n numericError: \"Verdien skal være numerisk.\",\n textMinLength: \"Vennligst skriv inn minst {0} tegn.\",\n textMaxLength: \"Vennligst skriv inn mindre enn {0} tegn.\",\n textMinMaxLength: \"Vennligst skriv inn mer enn {0} og mindre enn {1} tegn.\",\n minRowCountError: \"Vennligst fyll inn minst {0} rader.\",\n minSelectError: \"Vennligst velg minst {0} varianter.\",\n maxSelectError: \"Vennligst ikke velg mer enn {0} varianter.\",\n numericMinMax: \"'{0}' bør være lik eller mer enn {1} og lik eller mindre enn {2}\",\n numericMin: \"'{0}' bør være lik eller mer enn {1}\",\n numericMax: \"'{0}' bør være lik eller mindre enn {1}\",\n invalidEmail: \"Vennligst skriv inn en gyldig e-post adresse.\",\n urlRequestError: \"Forespørselen returnerte feilen '{0}'. {1}\",\n urlGetChoicesError: \"Forespørselen returnerte tomme data, eller 'sti' -egenskapen er feil\",\n exceedMaxSize: \"Filstørrelsen bør ikke overstige {0}.\",\n otherRequiredError: \"Vennligst skriv inn den andre verdien.\",\n uploadingFile: \"Filen din lastes opp. Vennligst vent noen sekunder og prøv igjen.\",\n confirmDelete: \"Ønsker du å slette posten?\",\n keyDuplicationError: \"Denne verdien skal være unik.\",\n addRow: \"Legg til rad\",\n removeRow: \"Fjern\",\n addPanel: \"Legg til ny\",\n removePanel: \"Fjerne\",\n choices_Item: \"element\",\n matrix_column: \"Kolonne\",\n matrix_row: \"Rad\",\n savingData: \"Resultatene lagres på serveren ...\",\n savingDataError: \"Det oppsto en feil, og vi kunne ikke lagre resultatene.\",\n savingDataSuccess: \"Resultatene ble lagret!\",\n saveAgainButton: \"Prøv igjen\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Du har tilbrakt {0} på denne siden og {1} totalt.\",\n timerSpentPage: \"Du har tilbrakt {0} på denne siden.\",\n timerSpentSurvey: \"Du har tilbrakt {0} totalt.\",\n timerLimitAll: \"Du har tilbrakt {0} av {1} på denne siden og totalt {2} av {3}.\",\n timerLimitPage: \"Du har tilbrakt {0} av {1} på denne siden.\",\n timerLimitSurvey: \"Du har tilbrakt {0} av {1} totalt.\",\n cleanCaption: \"Rens\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"no\"] = norwegianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"no\"] = \"norsk\";\n\n\n/***/ }),\n/* 166 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export persianSurveyStrings */\n\nvar persianSurveyStrings = {\n pagePrevText: \"قبلی\",\n pageNextText: \"بعدی\",\n completeText: \"تکمیل\",\n previewText: \"پیش نمایش\",\n editText: \"ویرایش\",\n startSurveyText: \"شروع\",\n otherItemText: \"دیگر(توضیح)\",\n noneItemText: \"هیچ\",\n selectAllItemText: \"انتخاب همه\",\n progressText: \"صفحه {0} از {1}\",\n panelDynamicProgressText: \"مورد {0} از {1}\",\n questionsProgressText: \"تعداد پاسخ {0}/{1} سوال\",\n emptySurvey: \"صفحه ای یا گزینه ای برای این پرسشنامه موجود نیست.\",\n completingSurvey: \"از شما بابت تکمیل این پرسشنامه متشکریم\",\n completingSurveyBefore: \"به نظر می رسد هم هم اکنون پرسشنامه را تکمیل کرده اید.\",\n loadingSurvey: \"درحال ایجاد پرسشنامه\",\n optionsCaption: \"انتخاب کنید...\",\n value: \"مقدار\",\n requiredError: \"لطفا به سوال پاسخ دهید\",\n requiredInAllRowsError: \"لطفا سوالات تمام سطرها را پاسخ دهید.\",\n numericError: \"مقدار باید عددی باشد\",\n textMinLength: \"لطفا حداقل {0} حرف وارد کنید\",\n textMaxLength: \"لطفا کمتر از {0} حرف وارد کنید.\",\n textMinMaxLength: \"لطفا بیشتر از {0} حرف و کمتر از {1} حرف وارد کنید.\",\n minRowCountError: \"لطفا حداقل {0} سطر وارد کنید.\",\n minSelectError: \"حداقل {0} انتخاب کنید.\",\n maxSelectError: \"لطفا بیشتر از {0} انتخاب کنید.\",\n numericMinMax: \"'{0}' باید بین {1} و {2} باشد\",\n numericMin: \"'{0}' بزرگتر مساوی {1} باشد\",\n numericMax: \"'{0}' باید کوچکتر یا مساوی {1} باشد\",\n invalidEmail: \"لطفا ایمیل صحیح درج کنید\",\n invalidExpression: \"عبارت: {0} پاسخ باید 'true' باشد.\",\n urlRequestError: \"درخواست با خطا روبرو شد: '{0}'. {1}\",\n urlGetChoicesError: \"درخواست مسیری خالی بازگشت داده یا مسیر درست تنظیم نشده\",\n exceedMaxSize: \"بیشترین حجم مجاز فایل: {0}\",\n otherRequiredError: \"مقدار 'دیگر' را وارد کنید\",\n uploadingFile: \"فایل در حال آیلود است. لطفا صبر کنید.\",\n loadingFile: \"بارگیری...\",\n chooseFile: \"انتخاب فایل(ها)...\",\n noFileChosen: \"هیچ فایلی انتخاب نشده\",\n confirmDelete: \"آیا مایل به حذف این ردیف هستید؟\",\n keyDuplicationError: \"این مقدار باید غیر تکراری باشد\",\n addColumn: \"ستون جدید\",\n addRow: \"سطر جدید\",\n removeRow: \"حذف\",\n addPanel: \"جدید\",\n removePanel: \"حذف\",\n choices_Item: \"آیتم\",\n matrix_column: \"ستون\",\n matrix_row: \"سطر\",\n savingData: \"نتایج در حال ذخیره سازی در سرور است\",\n savingDataError: \"خطایی در ذخیره سازی نتایج رخ داده است\",\n savingDataSuccess: \"نتایج با موفقیت ذخیره شد\",\n saveAgainButton: \"مجدد تلاش کنید\",\n timerMin: \"دقیقه\",\n timerSec: \"ثانیه\",\n timerSpentAll: \"شما مدت {0} در این صفحه و مدت {1} را در مجموع سپری کرده اید.\",\n timerSpentPage: \"شما مدت {0} را در این صفحه سپری کرده اید.\",\n timerSpentSurvey: \"شما مدت {0} را در مجموع سپری کرده اید.\",\n timerLimitAll: \"شما مدت {0} از {1} در این صفحه و مدت {2} از {3} را در مجموع سپری کرده اید.\",\n timerLimitPage: \"شما مدت {0} از {1} را در این صفحه سپری کرده اید.\",\n timerLimitSurvey: \"شما مدت {0} از {1} را در مجموع سپری کرده اید.\",\n cleanCaption: \"پاکسازی\",\n clearCaption: \"خالی کردن\",\n chooseFileCaption: \"انتخاب فایل\",\n removeFileCaption: \"حذف این فایل\",\n booleanCheckedLabel: \"بله\",\n booleanUncheckedLabel: \"خیر\",\n confirmRemoveFile: \"آیا میخواهید این فایل را پاک کنید: {0}?\",\n confirmRemoveAllFiles: \"آیا میخواهید تمام فایل ها را پاک کنید?\",\n questionTitlePatternText: \"عنوان سوال\",\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"fa\"] = persianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"fa\"] = \"فارْسِى\";\n\n\n/***/ }),\n/* 167 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export polishSurveyStrings */\n\nvar polishSurveyStrings = {\n pagePrevText: \"Wstecz\",\n pageNextText: \"Dalej\",\n completeText: \"Gotowe\",\n otherItemText: \"Inna odpowiedź (wpisz)\",\n progressText: \"Strona {0} z {1}\",\n emptySurvey: \"Nie ma widocznych pytań.\",\n completingSurvey: \"Dziękujemy za wypełnienie ankiety!\",\n loadingSurvey: \"Trwa wczytywanie ankiety...\",\n optionsCaption: \"Wybierz...\",\n requiredError: \"Proszę odpowiedzieć na to pytanie.\",\n requiredInAllRowsError: \"Proszę odpowiedzieć na wszystkie pytania.\",\n numericError: \"W tym polu można wpisać tylko liczby.\",\n textMinLength: \"Proszę wpisać co najmniej {0} znaków.\",\n textMaxLength: \"Proszę wpisać mniej niż {0} znaków.\",\n textMinMaxLength: \"Proszę wpisać więcej niż {0} i mniej niż {1} znaków.\",\n minRowCountError: \"Proszę uzupełnić przynajmniej {0} wierszy.\",\n minSelectError: \"Proszę wybrać co najmniej {0} pozycji.\",\n maxSelectError: \"Proszę wybrać nie więcej niż {0} pozycji.\",\n numericMinMax: \"Odpowiedź '{0}' powinna być większa lub równa {1} oraz mniejsza lub równa {2}\",\n numericMin: \"Odpowiedź '{0}' powinna być większa lub równa {1}\",\n numericMax: \"Odpowiedź '{0}' powinna być mniejsza lub równa {1}\",\n invalidEmail: \"Proszę podać prawidłowy adres email.\",\n urlRequestError: \"Żądanie zwróciło błąd '{0}'. {1}\",\n urlGetChoicesError: \"Żądanie nie zwróciło danych albo ścieżka jest nieprawidłowa\",\n exceedMaxSize: \"Rozmiar przesłanego pliku nie może przekraczać {0}.\",\n otherRequiredError: \"Proszę podać inną odpowiedź.\",\n uploadingFile: \"Trwa przenoszenie Twojego pliku, proszę spróbować ponownie za kilka sekund.\",\n addRow: \"Dodaj wiersz\",\n removeRow: \"Usuń\",\n addPanel: \"Dodaj panel\",\n removePanel: \"Usuń\",\n choices_Item: \"element\",\n matrix_column: \"Kolumna\",\n matrix_row: \"Wiersz\",\n savingData: \"Zapisuję wyniki ankiety na serwerze...\",\n savingDataError: \"Wystąpił błąd i wyniki nie mogły zostać zapisane.\",\n savingDataSuccess: \"Wyniki zostały poprawnie zapisane!\",\n saveAgainButton: \"Spróbuj ponownie\",\n timerMin: \"min\",\n timerSec: \"sek\",\n timerSpentAll: \"Spędziłeś {0} na tej stronie a w sumie {1}.\",\n timerSpentPage: \"Spędziłeś {0} na tej stronie.\",\n timerSpentSurvey: \"Spędziłeś w smumie {0}.\",\n timerLimitAll: \"Spędziłeś {0} z {1} na tej stronie a w sumie {2} z {3}.\",\n timerLimitPage: \"Spędziłeś {0} z {1} na tej stronie\",\n timerLimitSurvey: \"Spędziłeś {0} z {1}.\",\n cleanCaption: \"Wyczyść\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"pl\"] = polishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"pl\"] = \"polski\";\n\n\n/***/ }),\n/* 168 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export portugueseSurveyStrings */\n\nvar portugueseSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Próximo\",\n completeText: \"Finalizar\",\n startSurveyText: \"Começar\",\n otherItemText: \"Outros (descrever)\",\n noneItemText: \"Nenhum\",\n selectAllItemText: \"Selecionar Todos\",\n progressText: \"Página {0} de {1}\",\n emptySurvey: \"Não há página visível ou pergunta na pesquisa.\",\n completingSurvey: \"Obrigado por finalizar a pesquisa!\",\n completingSurveyBefore: \"Nossos registros mostram que você já finalizou a pesquisa.\",\n loadingSurvey: \"A pesquisa está carregando...\",\n optionsCaption: \"Selecione...\",\n value: \"valor\",\n requiredError: \"Por favor, responda a pergunta.\",\n requiredErrorInPanel: \"Por favor, responda pelo menos uma pergunta.\",\n requiredInAllRowsError: \"Por favor, responda as perguntas em todas as linhas.\",\n numericError: \"O valor deve ser numérico.\",\n textMinLength: \"Por favor, insira pelo menos {0} caracteres.\",\n textMaxLength: \"Por favor, insira menos de {0} caracteres.\",\n textMinMaxLength: \"Por favor, insira mais de {0} e menos de {1} caracteres.\",\n minRowCountError: \"Preencha pelo menos {0} linhas.\",\n minSelectError: \"Selecione pelo menos {0} opções.\",\n maxSelectError: \"Por favor, selecione não mais do que {0} opções.\",\n numericMinMax: \"O '{0}' deve ser igual ou superior a {1} e igual ou menor que {2}\",\n numericMin: \"O '{0}' deve ser igual ou superior a {1}\",\n numericMax: \"O '{0}' deve ser igual ou inferior a {1}\",\n invalidEmail: \"Por favor, informe um e-mail válido.\",\n invalidExpression: \"A expressão: {0} deve retornar 'verdadeiro'.\",\n urlRequestError: \"A requisição retornou o erro '{0}'. {1}\",\n urlGetChoicesError: \"A requisição não retornou dados ou o 'caminho' da requisição não está correto\",\n exceedMaxSize: \"O tamanho do arquivo não deve exceder {0}.\",\n otherRequiredError: \"Por favor, informe o outro valor.\",\n uploadingFile: \"Seu arquivo está sendo carregado. Por favor, aguarde alguns segundos e tente novamente.\",\n loadingFile: \"Carregando...\",\n chooseFile: \"Selecione o(s) arquivo(s)...\",\n confirmDelete: \"Tem certeza que deseja deletar?\",\n keyDuplicationError: \"Esse valor deve ser único.\",\n addColumn: \"Adicionar coluna\",\n addRow: \"Adicionar linha\",\n removeRow: \"Remover linha\",\n addPanel: \"Adicionar novo\",\n removePanel: \"Remover\",\n choices_Item: \"item\",\n matrix_column: \"Coluna\",\n matrix_row: \"Linha\",\n savingData: \"Os resultados esto sendo salvos no servidor...\",\n savingDataError: \"Ocorreu um erro e não foi possível salvar os resultados.\",\n savingDataSuccess: \"Os resultados foram salvos com sucesso!\",\n saveAgainButton: \"Tente novamente\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"Você gastou {0} nesta página e {1} no total.\",\n timerSpentPage: \"Você gastou {0} nesta página.\",\n timerSpentSurvey: \"Você gastou {0} no total.\",\n timerLimitAll: \"Você gastou {0} de {1} nesta página e {2} de {3} no total.\",\n timerLimitPage: \"Você gastou {0} de {1} nesta página.\",\n timerLimitSurvey: \"Você gastou {0} de {1} no total.\",\n cleanCaption: \"Limpar\",\n clearCaption: \"Limpar\",\n removeFileCaption: \"Remover este arquivo\",\n booleanCheckedLabel: \"Sim\",\n booleanUncheckedLabel: \"Não\",\n confirmRemoveFile: \"Tem certeza que deseja remover este arquivo: {0}?\",\n confirmRemoveAllFiles: \"Tem certeza que deseja remover todos os arquivos?\",\n questionTitlePatternText: \"Título da questão\",\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"pt\"] = portugueseSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"pt\"] = \"português\";\n\n\n/***/ }),\n/* 169 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export romanianSurveyStrings */\n\nvar romanianSurveyStrings = {\n pagePrevText: \"Precedent\",\n pageNextText: \"Următor\",\n completeText: \"Finalizare\",\n otherItemText: \"Altul(precizaţi)\",\n progressText: \"Pagina {0} din {1}\",\n emptySurvey: \"Nu sunt întrebări pentru acest chestionar\",\n completingSurvey: \"Vă mulţumim pentru timpul acordat!\",\n loadingSurvey: \"Chestionarul se încarcă...\",\n optionsCaption: \"Alegeţi...\",\n requiredError: \"Răspunsul la această întrebare este obligatoriu.\",\n requiredInAllRowsError: \"Toate răspunsurile sunt obligatorii\",\n numericError: \"Răspunsul trebuie să fie numeric.\",\n textMinLength: \"Trebuie să introduceți minim {0} caractere.\",\n minSelectError: \"Trebuie să selectați minim {0} opţiuni.\",\n maxSelectError: \"Trebuie să selectați maxim {0} opţiuni.\",\n numericMinMax: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1} şî mai mic sau egal cu {2}\",\n numericMin: \"Răspunsul '{0}' trebuie să fie mai mare sau egal ca {1}\",\n numericMax: \"Răspunsul '{0}' trebuie să fie mai mic sau egal ca {1}\",\n invalidEmail: \"Trebuie să introduceţi o adresa de email validă.\",\n exceedMaxSize: \"Dimensiunea fişierului nu trebuie să depăşească {0}.\",\n otherRequiredError: \"Trebuie să completați câmpul 'Altul'.\",\n completingSurveyBefore: \"Din înregistrările noastre reiese că ați completat deja acest chestionar.\",\n value: \"valoare\",\n requiredErrorInPanel: \"Vă rugăm să răspundeți la cel puțin o întrebare.\",\n textMaxLength: \"Trebuie să introduceți maxim {0} caractere.\",\n textMinMaxLength: \"Trebuie să introduceți mai mult de {0} și mai puțin de {1} caractere.\",\n minRowCountError: \"Trebuie să completați minim {0} rânduri.\",\n urlRequestError: \"Request-ul a returnat eroarea '{0}'. {1}\",\n urlGetChoicesError: \"Request-ul nu a returnat date sau proprietatea 'path' este incorectă\",\n uploadingFile: \"Fișierul dumneavoastră este în curs de încărcare. Vă rugăm așteptați câteva secunde și reveniți apoi.\",\n confirmDelete: \"Sunteți sigur că doriți să ștergeți înregistrarea?\",\n keyDuplicationError: \"Valoarea trebuie să fie unică.\",\n addRow: \"Adăugare rând\",\n removeRow: \"Ștergere\",\n addPanel: \"Adăugare\",\n removePanel: \"Ștergere\",\n choices_Item: \"opțiune\",\n matrix_column: \"Coloană\",\n matrix_row: \"Rând\",\n savingData: \"Rezultatele sunt în curs de salvare...\",\n savingDataError: \"A intervenit o eroare, rezultatele nu au putut fi salvate.\",\n savingDataSuccess: \"Rezultatele au fost salvate cu succes!\",\n saveAgainButton: \"Încercați din nou\",\n timerMin: \"min\",\n timerSec: \"sec\",\n timerSpentAll: \"Ați petrecut {0} pe această pagină și {1} în total.\",\n timerSpentPage: \"Ați petrecut {0} pe această pagină.\",\n timerSpentSurvey: \"Ați petrecut {0} în total.\",\n timerLimitAll: \"Ați petrecut {0} din {1} pe această pagină și {2} din {3} în total.\",\n timerLimitPage: \"Ați petrecut {0} din {1} pe această pagină.\",\n timerLimitSurvey: \"Ați petrecut {0} din {1} în total.\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ro\"] = romanianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ro\"] = \"română\";\n\n\n/***/ }),\n/* 170 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export russianSurveyStrings */\n\nvar russianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далее\",\n completeText: \"Готово\",\n startSurveyText: \"Начать\",\n otherItemText: \"Другое (пожалуйста, опишите)\",\n noneItemText: \"Нет\",\n selectAllItemText: \"Выбрать всё\",\n progressText: \"Страница {0} из {1}\",\n emptySurvey: \"Нет ни одного вопроса.\",\n completingSurvey: \"Благодарим Вас за заполнение анкеты!\",\n completingSurveyBefore: \"Вы уже проходили этот опрос.\",\n loadingSurvey: \"Загрузка с сервера...\",\n optionsCaption: \"Выбрать...\",\n value: \"значение\",\n requiredError: \"Пожалуйста, ответьте на вопрос.\",\n requiredErrorInPanel: \"Пожалуйста, ответьте по крайней мере на один вопрос.\",\n requiredInAllRowsError: \"Пожалуйста, ответьте на вопросы в каждой строке.\",\n numericError: \"Ответ должен быть числом.\",\n textMinLength: \"Пожалуйста введите больше {0} символов.\",\n textMaxLength: \"Пожалуйста введите меньше {0} символов.\",\n textMinMaxLength: \"Пожалуйста введите больше {0} и меньше {1} символов.\",\n minRowCountError: \"Пожалуйста, заполните не меньше {0} строк.\",\n minSelectError: \"Пожалуйста, выберите хотя бы {0} вариантов.\",\n maxSelectError: \"Пожалуйста, выберите не более {0} вариантов.\",\n numericMinMax: \"'{0}' должно быть не меньше чем {1}, и не больше чем {2}\",\n numericMin: \"'{0}' должно быть не меньше чем {1}\",\n numericMax: \"'{0}' должно быть не больше чем {1}\",\n invalidEmail: \"Пожалуйста, введите действительный адрес электронной почты.\",\n invalidExpression: \"Выражение {0} должно возвращать 'true'.\",\n urlRequestError: \"Запрос вернул ошибку '{0}'. {1}\",\n urlGetChoicesError: \"Ответ на запрос пришел пустой или свойство 'path' указано неверно\",\n exceedMaxSize: \"Размер файла не должен превышать {0}.\",\n otherRequiredError: \"Пожалуйста, введите данные в поле 'Другое'\",\n uploadingFile: \"Ваш файл загружается. Подождите несколько секунд и попробуйте снова.\",\n loadingFile: \"Загрузка...\",\n chooseFile: \"Выберите файл(ы)...\",\n confirmDelete: \"Вы точно хотите удалить запись?\",\n keyDuplicationError: \"Это значение должно быть уникальным.\",\n addColumn: \"Добавить колонку\",\n addRow: \"Добавить строку\",\n removeRow: \"Удалить\",\n addPanel: \"Добавить новую\",\n removePanel: \"Удалить\",\n choices_Item: \"Вариант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Строка\",\n savingData: \"Результаты сохраняются на сервер...\",\n savingDataError: \"Произошла ошибка, результат не был сохранён.\",\n savingDataSuccess: \"Результат успешно сохранён!\",\n saveAgainButton: \"Попробовать снова\",\n timerMin: \"мин\",\n timerSec: \"сек\",\n timerSpentAll: \"Вы потратили {0} на этой странице и {1} всего.\",\n timerSpentPage: \"Вы потратили {0} на этой странице.\",\n timerSpentSurvey: \"Вы потратили {0} в течение теста.\",\n timerLimitAll: \"Вы потратили {0} из {1} на этой странице и {2} из {3} для всего теста.\",\n timerLimitPage: \"Вы потратили {0} из {1} на этой странице.\",\n timerLimitSurvey: \"Вы потратили {0} из {1} для всего теста.\",\n cleanCaption: \"Очистить\",\n clearCaption: \"Очистить\",\n removeFileCaption: \"Удалить файл\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ru\"] = russianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ru\"] = \"русский\";\n\n\n/***/ }),\n/* 171 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export simplifiedChineseSurveyStrings */\n\nvar simplifiedChineseSurveyStrings = {\n pagePrevText: \"上一页\",\n pageNextText: \"下一页\",\n completeText: \"提交问卷\",\n startSurveyText: \"开始问卷\",\n otherItemText: \"填写其他答案\",\n noneItemText: \"无\",\n selectAllItemText: \"选择全部\",\n progressText: \"第 {0} 页, 共 {1} 页\",\n questionsProgressText: \"第 {0}/{1} 题\",\n emptySurvey: \"问卷中没有问题或页面\",\n completingSurveyBefore: \"你已完成问卷.\",\n completingSurvey: \"感谢您的参与!\",\n loadingSurvey: \"问卷正在加载中...\",\n optionsCaption: \"请选择...\",\n value: \"值\",\n requiredError: \"请填写此问题\",\n requiredErrorInPanel: \"至少回答一题.\",\n requiredInAllRowsError: \"请填写所有行中问题\",\n numericError: \"答案必须是个数字\",\n textMinLength: \"答案长度至少 {0} 个字符\",\n textMaxLength: \"答案长度不能超过 {0} 个字符\",\n textMinMaxLength: \"答案长度必须在 {0} - {1} 个字符之间\",\n minRowCountError: \"最少需要填写 {0} 行答案\",\n minSelectError: \"最少需要选择 {0} 项答案\",\n maxSelectError: \"最多只能选择 {0} 项答案\",\n numericMinMax: \"答案 '{0}' 必须大于等于 {1} 且小于等于 {2}\",\n numericMin: \"答案 '{0}' 必须大于等于 {1}\",\n numericMax: \"答案 '{0}' 必须小于等于 {1}\",\n invalidEmail: \"请输入有效的 Email 地址\",\n invalidExpression: \"公式: {0} 无效.\",\n urlRequestError: \"载入选项时发生错误 '{0}': {1}\",\n urlGetChoicesError: \"未能载入有效的选项或请求参数路径有误\",\n exceedMaxSize: \"文件大小不能超过 {0}\",\n otherRequiredError: \"请完成其他问题\",\n uploadingFile: \"文件上传中... 请耐心等待几秒后重试\",\n loadingFile: \"加载...\",\n chooseFile: \"选择文件...\",\n noFileChosen: \"未选择文件\",\n confirmDelete: \"删除记录?\",\n keyDuplicationError: \"主键不能重复\",\n addColumn: \"添加列\",\n addRow: \"添加行\",\n removeRow: \"删除答案\",\n addPanel: \"新添\",\n removePanel: \"删除\",\n choices_Item: \"选项\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n savingData: \"正在将结果保存到服务器...\",\n savingDataError: \"在保存结果过程中发生了错误,结果未能保存\",\n savingDataSuccess: \"结果保存成功!\",\n saveAgainButton: \"请重试\",\n timerMin: \"分\",\n timerSec: \"秒\",\n timerSpentAll: \"本页用时 {0} 总计用时{1} .\",\n timerSpentPage: \"本页用时{0} .\",\n timerSpentSurvey: \"总计用时 {0} .\",\n timerLimitAll: \"本页用时 {0} 共 {1}, 总计用时 {2} 共 {3} .\",\n timerLimitPage: \"本页用时 {0} 共 {1} .\",\n timerLimitSurvey: \"总计用时 {0} 共 {1}.\",\n cleanCaption: \"清理\",\n clearCaption: \"清除\",\n removeFileCaption: \"移除文件\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"zh-cn\"] = simplifiedChineseSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"zh-cn\"] = \"简体中文\";\n\n\n/***/ }),\n/* 172 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export spanishSurveyStrings */\n\nvar spanishSurveyStrings = {\n pagePrevText: \"Anterior\",\n pageNextText: \"Siguiente\",\n completeText: \"Completar\",\n otherItemText: \"Otro (describa)\",\n progressText: \"Página {0} de {1}\",\n emptySurvey: \"No hay página visible o pregunta en la encuesta.\",\n completingSurvey: \"Gracias por completar la encuesta!\",\n loadingSurvey: \"La encuesta está cargando...\",\n optionsCaption: \"Seleccione...\",\n requiredError: \"Por favor conteste la pregunta.\",\n requiredInAllRowsError: \"Por favor conteste las preguntas en cada hilera.\",\n numericError: \"La estimación debe ser numérica.\",\n textMinLength: \"Por favor entre por lo menos {0} símbolos.\",\n textMaxLength: \"Por favor entre menos de {0} símbolos.\",\n textMinMaxLength: \"Por favor entre más de {0} y menos de {1} símbolos.\",\n minRowCountError: \"Por favor llene por lo menos {0} hileras.\",\n minSelectError: \"Por favor seleccione por lo menos {0} variantes.\",\n maxSelectError: \"Por favor seleccione no más de {0} variantes.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"El '{0}' debe ser igual o más de {1}\",\n numericMax: \"El '{0}' debe ser igual o menos de {1}\",\n invalidEmail: \"Por favor agregue un correo electrónico válido.\",\n urlRequestError: \"La solicitud regresó error '{0}'. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"El tamaño del archivo no debe de exceder {0}.\",\n otherRequiredError: \"Por favor agregue la otra estimación.\",\n uploadingFile: \"Su archivo se está subiendo. Por favor espere unos segundos e intente de nuevo.\",\n addRow: \"Agregue una hilera\",\n removeRow: \"Eliminar una hilera\",\n choices_firstItem: \"primer artículo\",\n choices_secondItem: \"segundo artículo\",\n choices_thirdItem: \"tercera artículo\",\n matrix_column: \"Columna\",\n matrix_row: \"Hilera\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"es\"] = spanishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"es\"] = \"español\";\n\n\n/***/ }),\n/* 173 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export swahiliStrings */\n\nvar swahiliStrings = {\n pagePrevText: \"Iliyotangulia\",\n pageNextText: \"Ifuatayo\",\n completeText: \"Kamili\",\n previewText: \"Hakiki\",\n editText: \"Hariri\",\n startSurveyText: \"Anza\",\n otherItemText: \"Nyingine (eleza)\",\n noneItemText: \"Hakuna\",\n selectAllItemText: \"Chagua Zote\",\n progressText: \"Ukurasa {0} wa {1}\",\n panelDynamicProgressText: \"Rekodi {0} ya {1}\",\n questionsProgressText: \"Yaliyojibiwa {0}/{1} maswali\",\n emptySurvey: \"Hakuna ukurasa unaoonekana au swali katika utafiti.\",\n completingSurvey: \"Asanti kwa kukamilisha utafiti!\",\n completingSurveyBefore: \"Recodi zetu zinatuonyesha tayari umekamilisha utafiti.\",\n loadingSurvey: \"Tunaandaa utafiti...\",\n optionsCaption: \"Chagua...\",\n value: \"thamani\",\n requiredError: \"Tafadhali jibu hili swali.\",\n requiredErrorInPanel: \"Tafadhali jibu swali angalau moja.\",\n requiredInAllRowsError: \"Tafadhali jibu maswali katika safu zote.\",\n numericError: \"Thamani inapaswa kuwa ya nambari.\",\n textMinLength: \"Tafadhali ingiza angalau{0} husika.\",\n textMaxLength: \"Tafadhali ingiza isiozidi {0} husika.\",\n textMinMaxLength: \"Tafadhali ingiza kiwango zaidi ya {0} na kisichopungua {1} husika.\",\n minRowCountError: \"Tafadhali jaza isiopungua {0} safu.\",\n minSelectError: \"Tafadhali chagua angalau {0} lahaja.\",\n maxSelectError: \"Tafadhali changua isiozidi {0} lahaja.\",\n numericMinMax: \" '{0}' inapaswa kuwa sawa au zaidi ya {1} na sawa au chini ya {2}\",\n numericMin: \" '{0}'inapaswa kuwa sawa au zaidi ya {1}\",\n numericMax: \" '{0}'inapaswa kuwa sawa au chini ya {1}\",\n invalidEmail: \"Tafadhali ingiza anwani halali ya barua-pepe.\",\n invalidExpression: \"Usemi:{0} inapaswa kurudi 'kweli'.\",\n urlRequestError: \"Ombi lina kosa '{0}'. {1}\",\n urlGetChoicesError: \"Ombi lilirudisha data tupu au the 'path' mali ya njia sio sahihi\",\n exceedMaxSize: \"Saizi ya faili haipaswi kuzidi {0}.\",\n otherRequiredError: \"Tafadhali ingiza thamani nyingine.\",\n uploadingFile: \"Faili yako inapakia.Tafadhali subiri sekunde kadhaa na ujaribu tena.\",\n loadingFile: \"Inapakia...\",\n chooseFile: \"Chagua faili...\",\n noFileChosen: \"Hujachagua faili\",\n confirmDelete: \"Je! Unataka kufuta rekodi?\",\n keyDuplicationError: \"Thamani hii inapaswa kuwa ya kipekee.\",\n addColumn: \"Ongeza Kolamu\",\n addRow: \"Ongeza safu\",\n removeRow: \"Toa\",\n addPanel: \"Ongeza mpya\",\n removePanel: \"Toa\",\n choices_Item: \"kitu\",\n matrix_column: \"Kolamu\",\n matrix_row: \"Safu\",\n savingData: \"Matokeo yamehifadhiwa kwa seva...\",\n savingDataError: \"Kosa limetokea na hatukuweza kuhifadhi matokeo.\",\n savingDataSuccess: \"Matokeo yamehifadhiwa!\",\n saveAgainButton: \"Jaribu tena\",\n timerMin: \"dakika\",\n timerSec: \"sekunde\",\n timerSpentAll: \"Umetumia {0} kwenye ukurasa huu na {1} kwa jumla.\",\n timerSpentPage: \"Umetumia {0} kwenye ukurasa huu.\",\n timerSpentSurvey: \"Umetumia {0} kwa jumla.\",\n timerLimitAll: \"Umetumia {0} ya {1} kwenye ukurasa huu {2} wa {3} kwa jumla.\",\n timerLimitPage: \"Umetumia {0} ya {1} kwenye ukurasa huu.\",\n timerLimitSurvey: \"Umetumia {0} ya {1} kwa jumla.\",\n cleanCaption: \"Safisha\",\n clearCaption: \"Ondoa\",\n chooseFileCaption: \"Chagua faili\",\n removeFileCaption: \"Ondoa faili\",\n booleanCheckedLabel: \"Ndio\",\n booleanUncheckedLabel: \"Hapana\",\n confirmRemoveFile: \"Je! Una uhakika kuwa unataka kuondoa faili hii: {0}?\",\n confirmRemoveAllFiles: \"Je! Una uhakika kuwa unataka kuondoa faili zote?\",\n questionTitlePatternText: \"Kichwa cha Swali\",\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"sw\"] = swahiliStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"sw\"] = \"Swahili\";\n\n\n/***/ }),\n/* 174 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export swedishSurveyStrings */\n//Create by Mattias Asplund\n\nvar swedishSurveyStrings = {\n pagePrevText: \"Föregående\",\n pageNextText: \"Nästa\",\n completeText: \"Färdig\",\n otherItemText: \"Annat (beskriv)\",\n progressText: \"Sida {0} av {1}\",\n emptySurvey: \"Det finns ingen synlig sida eller fråga i enkäten.\",\n completingSurvey: \"Tack för att du genomfört enkäten!!\",\n loadingSurvey: \"Enkäten laddas...\",\n optionsCaption: \"Välj...\",\n requiredError: \"Var vänlig besvara frågan.\",\n requiredInAllRowsError: \"Var vänlig besvara frågorna på alla rader.\",\n numericError: \"Värdet ska vara numeriskt.\",\n textMinLength: \"Var vänlig ange minst {0} tecken.\",\n minRowCountError: \"Var vänlig fyll i minst {0} rader.\",\n minSelectError: \"Var vänlig välj åtminstone {0} varianter.\",\n maxSelectError: \"Var vänlig välj inte fler än {0} varianter.\",\n numericMinMax: \"'{0}' ska vara lika med eller mer än {1} samt lika med eller mindre än {2}\",\n numericMin: \"'{0}' ska vara lika med eller mer än {1}\",\n numericMax: \"'{0}' ska vara lika med eller mindre än {1}\",\n invalidEmail: \"Var vänlig ange en korrekt e-postadress.\",\n urlRequestError: \"Förfrågan returnerade felet '{0}'. {1}\",\n urlGetChoicesError: \"Antingen returnerade förfrågan ingen data eller så är egenskapen 'path' inte korrekt\",\n exceedMaxSize: \"Filstorleken får ej överstiga {0}.\",\n otherRequiredError: \"Var vänlig ange det andra värdet.\",\n uploadingFile: \"Din fil laddas upp. Var vänlig vänta några sekunder och försök sedan igen.\",\n addRow: \"Lägg till rad\",\n removeRow: \"Ta bort\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"sv\"] = swedishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"sv\"] = \"svenska\";\n\n\n/***/ }),\n/* 175 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export tajikSurveyStrings */\n\nvar tajikSurveyStrings = {\n pagePrevText: \"Бозгашт\",\n pageNextText: \"Оянда\",\n completeText: \"Иҷро шуд\",\n startSurveyText: \"Оғоз\",\n otherItemText: \"Дигар (лутфан тавсиф кунед)\",\n noneItemText: \"Не\",\n selectAllItemText: \"Ҳамаро интихоб кардан\",\n progressText: \"Саҳифаи {0} аз {1}\",\n emptySurvey: \"Ягон савол вуҷуд надорад.\",\n completingSurvey: \"Ташаккур барои пур кардани саволнома!\",\n completingSurveyBefore: \"Шумо аллакай ин пурсишро анҷом додаед.\",\n loadingSurvey: \"Боргирӣ аз сервер...\",\n optionsCaption: \"Интихоб кардан...\",\n value: \"қиммат\",\n requiredError: \"Илтимос, ба савол ҷавоб диҳед.\",\n requiredErrorInPanel: \"Илтимос, ақалан ба як савол ҷавоб диҳед.\",\n requiredInAllRowsError: \"Илтимос, ба ҳамаи саволҳо дар ҳамаи сатрҳо ҷавоб диҳед.\",\n numericError: \"Ҷавоб бояд рақам бошад.\",\n textMinLength: \"Илтимос, аз {0} зиёдтар рамз ворид кунед.\",\n textMaxLength: \"Илтимос, аз {0} камтар рамз ворид кунед.\",\n textMinMaxLength: \"Илтимос, аз {0} зиёдтар ва аз {1} камтар рамз ворид кунед.\",\n minRowCountError: \"Илтимос, на камтар аз {0} сатр пур кунед.\",\n minSelectError: \"Илтимос, ақалан {0} вариант интихоб кунед.\",\n maxSelectError: \"Илтимос, на зиёдтар аз {0} вариант интихоб кунед.\",\n numericMinMax: \"'{0}' бояд на кам аз {1} ва на бисёр аз {2} бошад\",\n numericMin: \"'{0}' бояд на кам аз {1} бошад\",\n numericMax: \"'{0}' бояд на зиёд аз {1} бошад\",\n invalidEmail: \"Илтимос, почтаи электронии воқеиро ворид кунед.\",\n invalidExpression: \"Ифодаи {0} бояд 'true' баргардонад.\",\n urlRequestError: \"Дархост хатогӣ бозгардонд '{0}'. {1}\",\n urlGetChoicesError: \"Ҷавоб ба дархост холӣ омад ё хосияти 'path' нодуруст муайян карда шудааст\",\n exceedMaxSize: \"Андозаи файл бояд на калон аз {0} бошад.\",\n otherRequiredError: \"Илтимос, ба майдони 'Дигар' додаҳоро ворид кунед\",\n uploadingFile: \"Файли шумо бор шуда истодааст. Якчанд сония интизор шавед ва бори дигар кӯшиш кунед.\",\n loadingFile: \"Боркунӣ...\",\n chooseFile: \"Файл(ҳо)-ро интихоб кунед...\",\n confirmDelete: \"Шумо мутмаин ҳастед, ки мехоҳед воридро тоза кунед?\",\n keyDuplicationError: \"Ин арзиш бояд беназир бошад.\",\n addColumn: \"Иловаи сутун\",\n addRow: \"Иловаи сатр\",\n removeRow: \"Нест кардан\",\n addPanel: \"Илова кардан\",\n removePanel: \"Нест кардан\",\n choices_Item: \"Вариант\",\n matrix_column: \"Сутун\",\n matrix_row: \"Сатр\",\n savingData: \"Натиҷа ба сервер сабт шуда истодаанд...\",\n savingDataError: \"Хатогӣ ба амал омад, натиҷа сабт нашуд.\",\n savingDataSuccess: \"Натиҷа бомуваффакият сабт шуд!\",\n saveAgainButton: \"Бори дигар кӯшиш карданд\",\n timerMin: \"дақ\",\n timerSec: \"сон\",\n timerSpentAll: \"Шумо {0} дар ин саҳифа ва {1} дар умум сарф кардед.\",\n timerSpentPage: \"Шумо {0} дар ин саҳифа сарф кардед.\",\n timerSpentSurvey: \"Шумо {0} дар ин тест сарф намудед.\",\n timerLimitAll: \"Шумо {0} аз {1} дар ин саҳифа ва {2} аз {3} дар умум сарф кардед дар дохили ин тест.\",\n timerLimitPage: \"Шумо {0} аз {1} дар ин саҳифа сарф кардед.\",\n timerLimitSurvey: \"Шумо {0} аз {1} дар ҳамаи тест сарф кардед.\",\n cleanCaption: \"Тоза кардан\",\n clearCaption: \"Тоза кардан\",\n removeFileCaption: \"Файлро нест кардан\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"tg\"] = tajikSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"tg\"] = \"тоҷикӣ\";\n\n\n/***/ }),\n/* 176 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export thaiStrings */\n//Created by Padet Taweekunkan\n\nvar thaiStrings = {\n pagePrevText: \"ก่อนหน้า\",\n pageNextText: \"ถัดไป\",\n completeText: \"สำเร็จ\",\n startSurveyText: \"เริ่ม\",\n otherItemText: \"อื่นๆ (โปรดระบุ)\",\n noneItemText: \"ไม่มี\",\n selectAllItemText: \"เลือกทั้งหมด\",\n progressText: \"หน้าที่ {0} จาก {1}\",\n panelDynamicProgressText: \"รายการที่ {0} จาก {1}\",\n questionsProgressText: \"คำตอบที่ {0}/{1} จำนวนคำถาม\",\n emptySurvey: \"ไม่มีหน้าเพจที่มองเห็น หรือ คำถามใน survey นี้\",\n completingSurvey: \"ขอบคุณที่ทำ survey จนเสร็จ\",\n completingSurveyBefore: \"รายการของเราแสดงว่าคุณได้ทำ survey เสร็จเรียบร้อยแล้ว\",\n loadingSurvey: \"กำลังโหลด Survey...\",\n optionsCaption: \"เลือก...\",\n value: \"ข้อมูล\",\n requiredError: \"กรุณาตอบคำถาม\",\n requiredErrorInPanel: \"กรุณาตอบขั้นต่ำหนึ่งคำถาม\",\n requiredInAllRowsError: \"กรุณาตอบคำถามในทุกๆแถว\",\n numericError: \"ข้อมูลที่ใส่ต้องเป็นตัวเลข\",\n textMinLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} ตัวอักษร\",\n textMaxLength: \"กรุณาใส่ไม่เกินจำนวน {0} ตัวอักษร\",\n textMinMaxLength: \"กรุณาใส่ขั้นต่ำจำนวน {0} และไม่เกินจำนวน {1} ตัวอักษร\",\n minRowCountError: \"กรุณาใส่ขั้นต่ำจำนวน {0} แถว\",\n minSelectError: \"กรุณาเลือกอย่างน้อย {0} รายการ\",\n maxSelectError: \"กรุณาเลือกไม่เกิน {0} รายการ\",\n numericMinMax: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1} และน้อยกว่าหรือเท่ากับ {2}\",\n numericMin: \"'{0}' ต้องมากกว่าหรือเท่ากับ {1}\",\n numericMax: \"'{0}' น้อยกว่าหรือเท่ากับ {1}\",\n invalidEmail: \"กรุณาใส่อีเมล์แอดเดรสที่ถูกต้อง\",\n invalidExpression: \"The expression: {0} ต้องรีเทิร์น 'true'.\",\n urlRequestError: \"รีเควสรีเทิร์น error '{0}'. {1}\",\n urlGetChoicesError: \"รีเควสรีเทิร์นข้อมูลว่างเปล่า หรือ 'path' property ไม่ถูกต้อง\",\n exceedMaxSize: \"ขนาดไฟล์ต้องไม่เกิน {0}.\",\n otherRequiredError: \"กรุณาใส่ค่าอื่น\",\n uploadingFile: \"ไฟล์ของคุณกำลังอัพโหลดอยู่. กรุณารอสักครู่แล้วทำการลองอีกครั้ง\",\n loadingFile: \"กำลังโหลด...\",\n chooseFile: \"เลือกไฟล์...\",\n noFileChosen: \"ไม่ไฟล์ที่เลือก\",\n confirmDelete: \"คุณต้องการลบรายการนี้จริงหรือไม่?\",\n keyDuplicationError: \"ข้อมูลนี้ต้องเป็น unique.\",\n addColumn: \"เพิ่มคอลัมน์\",\n addRow: \"เพิ่มแถว\",\n removeRow: \"ลบ\",\n addPanel: \"เพิ่ม\",\n removePanel: \"ลบ\",\n choices_Item: \"ชิ้น\",\n matrix_column: \"คอลัมน์\",\n matrix_row: \"แถว\",\n savingData: \"ผลลัพท์กำลังบันทึกลงที่เซิร์ฟเวอร์...\",\n savingDataError: \"มีความผิดพลาดเกิดขึ้นส่งผลให้ไม่สามารถบันทึกผลได้\",\n savingDataSuccess: \"บันทึกสำเร็จแล้ว\",\n saveAgainButton: \"รบกวนลองอีกครั้ง\",\n timerMin: \"นาที\",\n timerSec: \"วินาที\",\n timerSpentAll: \"คุณใช้เวลา {0} บนหน้านี้และ {1} รวมทั้งหมด\",\n timerSpentPage: \"คุณใช้เวลา {0} บนหน้านี้\",\n timerSpentSurvey: \"คุณใช้เวลา {0} รวมทั้งหมด\",\n timerLimitAll: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้และ {2} ของ {3} รวมทั้งหมด\",\n timerLimitPage: \"คุณใช้เวลา {0} ของ {1} บนหน้านี้\",\n timerLimitSurvey: \"คุณใช้เวลา {0} ของ {1} รวมทั้งหมด\",\n cleanCaption: \"คลีน\",\n clearCaption: \"เคลียร์\",\n chooseFileCaption: \"เลือกไฟล์\",\n removeFileCaption: \"นำไฟล์นี้ออก\",\n booleanCheckedLabel: \"ใช่\",\n booleanUncheckedLabel: \"ไม่ใช่\",\n confirmRemoveFile: \"คุณแน่ใจที่จะนำไฟล์นี้ออกใช่หรือไม่: {0}?\",\n confirmRemoveAllFiles: \"คุณแน่ใจที่จะนำไฟล์ทั้งหมดออกใช่หรือไม่\",\n questionTitlePatternText: \"ชื่อคำถาม\",\n};\n//Uncomment these two lines on creating a translation file. You should replace \"en\" and enStrings with your locale (\"fr\", \"de\" and so on) and your variable.\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"th\"] = thaiStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"th\"] = \"ไทย\";\n\n\n/***/ }),\n/* 177 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export traditionalChineseSurveyStrings */\n\nvar traditionalChineseSurveyStrings = {\n pagePrevText: \"上一頁\",\n pageNextText: \"下一頁\",\n completeText: \"提交問卷\",\n otherItemText: \"填寫其他答案\",\n progressText: \"第 {0} 頁, 共 {1} 頁\",\n emptySurvey: \"問卷中沒有問題或頁面\",\n completingSurvey: \"感謝您的參與!\",\n loadingSurvey: \"問卷載入中...\",\n optionsCaption: \"請選擇...\",\n requiredError: \"請填寫此問題\",\n requiredInAllRowsError: \"請填寫所有行中問題\",\n numericError: \"答案必須是個數字\",\n textMinLength: \"答案長度至少 {0} 個字元\",\n textMaxLength: \"答案長度不能超過 {0} 個字元\",\n textMinMaxLength: \"答案長度必須在 {0} - {1} 個字元之間\",\n minRowCountError: \"最少需要填寫 {0} 行答案\",\n minSelectError: \"最少需要選擇 {0} 項答案\",\n maxSelectError: \"最多只能選擇 {0} 項答案\",\n numericMinMax: \"答案 '{0}' 必須大於等於 {1} 且小於等於 {2}\",\n numericMin: \"答案 '{0}' 必須大於等於 {1}\",\n numericMax: \"答案 '{0}' 必須小於等於 {1}\",\n invalidEmail: \"請輸入有效的 Email 地址\",\n urlRequestError: \"載入選項時發生錯誤 '{0}': {1}\",\n urlGetChoicesError: \"未能載入有效的選項或請求參數路徑有誤\",\n exceedMaxSize: \"文件大小不能超過 {0}\",\n otherRequiredError: \"請完成其他問題\",\n uploadingFile: \"文件上傳中... 請耐心等待幾秒後重試\",\n addRow: \"添加答案\",\n removeRow: \"刪除答案\",\n choices_Item: \"選項\",\n matrix_column: \"列\",\n matrix_row: \"行\",\n savingData: \"正在將結果保存到服務器...\",\n savingDataError: \"在保存結果過程中發生了錯誤,結果未能保存\",\n savingDataSuccess: \"結果保存成功!\",\n saveAgainButton: \"請重試\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"zh-tw\"] = traditionalChineseSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"zh-tw\"] = \"繁體中文\";\n\n\n/***/ }),\n/* 178 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export turkishSurveyStrings */\n\nvar turkishSurveyStrings = {\n pagePrevText: \"Geri\",\n pageNextText: \"İleri\",\n completeText: \"Anketi Tamamla\",\n otherItemText: \"Diğer (açıklayınız)\",\n progressText: \"Sayfa {0} / {1}\",\n emptySurvey: \"Ankette görüntülenecek sayfa ya da soru mevcut değil.\",\n completingSurvey: \"Anketimizi tamamladığınız için teşekkür ederiz.\",\n loadingSurvey: \"Anket sunucudan yükleniyor ...\",\n optionsCaption: \"Seçiniz ...\",\n requiredError: \"Lütfen soruya cevap veriniz\",\n numericError: \"Girilen değer numerik olmalıdır\",\n textMinLength: \"En az {0} sembol giriniz.\",\n minRowCountError: \"Lütfen en az {0} satırı doldurun.\",\n minSelectError: \"Lütfen en az {0} seçeneği seçiniz.\",\n maxSelectError: \"Lütfen {0} adetten fazla seçmeyiniz.\",\n numericMinMax: \"The '{0}' should be equal or more than {1} and equal or less than {2}\",\n numericMin: \"'{0}' değeri {1} değerine eşit veya büyük olmalıdır\",\n numericMax: \"'{0}' değeri {1} değerine eşit ya da küçük olmalıdır.\",\n invalidEmail: \"Lütfen geçerli bir eposta adresi giriniz.\",\n urlRequestError: \"Talebi şu hatayı döndü '{0}'. {1}\",\n urlGetChoicesError: \"Talep herhangi bir veri dönmedi ya da 'path' özelliği hatalı.\",\n exceedMaxSize: \"Dosya boyutu {0} değerini geçemez.\",\n otherRequiredError: \"Lütfen diğer değerleri giriniz.\",\n uploadingFile: \"Dosyanız yükleniyor. LÜtfen birkaç saniye bekleyin ve tekrar deneyin.\",\n addRow: \"Satır Ekle\",\n removeRow: \"Kaldır\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"tr\"] = turkishSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"tr\"] = \"türkçe\";\n\n\n/***/ }),\n/* 179 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__surveyStrings__ = __webpack_require__(1);\n/* unused harmony export ukrainianSurveyStrings */\n\nvar ukrainianSurveyStrings = {\n pagePrevText: \"Назад\",\n pageNextText: \"Далі\",\n completeText: \"Завершити\",\n startSurveyText: \"Почати\",\n otherItemText: \"Інше (будь ласка, опишіть)\",\n noneItemText: \"Жоден\",\n selectAllItemText: \"Вибрати все\",\n progressText: \"Сторінка {0} з {1}\",\n questionsProgressText: \"Відповіли на {0}/{1} питань\",\n emptySurvey: \"Немає жодного питання.\",\n completingSurvey: \"Дякуємо Вам за заповнення анкети!\",\n completingSurveyBefore: \"Ви вже проходили це опитування.\",\n loadingSurvey: \"Завантаження опитування...\",\n optionsCaption: \"Вибрати...\",\n value: \"значення\",\n requiredError: \"Будь ласка, дайте відповідь.\",\n requiredErrorInPanel: \"Будь ласка, дайте відповідь хоча б на одне питання.\",\n requiredInAllRowsError: \"Будь ласка, дайте відповідь на питання в кожному рядку.\",\n numericError: \"Відповідь повинна бути числом.\",\n textMinLength: \"Будь ласка введіть більше {0} символів.\",\n textMaxLength: \"Будь ласка введіть менше {0} символів.\",\n textMinMaxLength: \"Будь ласка введіть більше {0} и менше {1} символів.\",\n minRowCountError: \"Будь ласка, заповніть не менше {0} рядків.\",\n minSelectError: \"Будь ласка, виберіть хоча б {0} варіантів.\",\n maxSelectError: \"Будь ласка, виберіть не більше {0} варіантів.\",\n numericMinMax: \"'{0}' повинно бути не менше ніж {1}, і не більше ніж {2}\",\n numericMin: \"'{0}' повинно бути не менше ніж {1}\",\n numericMax: \"'{0}' повинно бути не більше ніж {1}\",\n invalidEmail: \"Будь ласка, введіть дійсну адресу електронної пошти.\",\n invalidExpression: \"Вираз {0} повинен повертати 'true'.\",\n urlRequestError: \"Запит повернув помилку '{0}'. {1}\",\n urlGetChoicesError: \"Відповідь на запит повернулась порожньою або властивіть 'path' вказано невірно\",\n exceedMaxSize: \"Розмір файлу не повинен перевищувати {0}.\",\n otherRequiredError: \"Будь ласка, введіть дані в поле 'Інше'\",\n uploadingFile: \"Ваш файл завантажується. Зачекайте декілька секунд і спробуйте знову.\",\n loadingFile: \"Завантаження...\",\n chooseFile: \"Виберіть файл(и)...\",\n noFileChosen: \"Файл не вибрано\",\n confirmDelete: \"Ви хочете видалити запис?\",\n keyDuplicationError: \"Це значення повинно бути унікальним.\",\n addColumn: \"Додати колонку\",\n addRow: \"Додати рядок\",\n removeRow: \"Видалити\",\n addPanel: \"Додати нову\",\n removePanel: \"Видалити\",\n choices_Item: \"Варіант\",\n matrix_column: \"Колонка\",\n matrix_row: \"Рядок\",\n savingData: \"Результати зберігаються на сервер...\",\n savingDataError: \"Відбулася помилка, результат не був збережений.\",\n savingDataSuccess: \"Резвультат успішно збережений!\",\n saveAgainButton: \"Спробувати знову\",\n timerMin: \"хв\",\n timerSec: \"сек\",\n timerSpentAll: \"Ви витратили {0} на цій сторінці і {1} загалом.\",\n timerSpentPage: \"Ви витратили {0} на цій сторінці.\",\n timerSpentSurvey: \"Ви витратили {0} протягом тесту.\",\n timerLimitAll: \"Ви витратили {0} з {1} на цій сторінці і {2} з {3} для всього тесту.\",\n timerLimitPage: \"Ви витратили {0} з {1} на цій сторінці.\",\n timerLimitSurvey: \"Ви витратили {0} з {1} для всього тесту.\",\n cleanCaption: \"Очистити\",\n clearCaption: \"Очистити\",\n removeFileCaption: \"Видалити файл\"\n};\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].locales[\"ua\"] = ukrainianSurveyStrings;\n__WEBPACK_IMPORTED_MODULE_0__surveyStrings__[\"a\" /* surveyLocalization */].localeNames[\"ua\"] = \"українська\";\n\n\n/***/ }),\n/* 180 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionBooleanModel; });\n\n\n\n\n\n/**\n * A Model for a boolean question.\n */\nvar QuestionBooleanModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionBooleanModel, _super);\n function QuestionBooleanModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createLocalizableString(\"label\", _this, true);\n _this.createLocalizableString(\"labelFalse\", _this, true);\n _this.createLocalizableString(\"labelTrue\", _this, true);\n _this.locLabelFalse.onGetTextCallback = function (text) {\n return !!text\n ? text\n : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"booleanUncheckedLabel\");\n };\n _this.locLabelTrue.onGetTextCallback = function (text) {\n return !!text\n ? text\n : __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"booleanCheckedLabel\");\n };\n return _this;\n }\n QuestionBooleanModel.prototype.getType = function () {\n return \"boolean\";\n };\n QuestionBooleanModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"isIndeterminate\", {\n /**\n * Returns true if the question check will be rendered in indeterminate mode. value is empty.\n */\n get: function () {\n return this.isEmpty();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"hasTitle\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"checkedValue\", {\n /**\n * Get/set question value in 3 modes: indeterminate (value is empty), true (check is set) and false (check is unset).\n * @see valueTrue\n * @see valueFalse\n */\n get: function () {\n if (this.isEmpty())\n return null;\n return this.value == this.getValueTrue();\n },\n set: function (val) {\n if (this.isReadOnly) {\n return;\n }\n if (this.isValueEmpty(val)) {\n this.value = null;\n }\n else {\n this.value = val == true ? this.getValueTrue() : this.getValueFalse();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"defaultValue\", {\n /**\n * Set the default state of the check: \"indeterminate\" - default (value is empty/null), \"true\" - value equals valueTrue or true, \"false\" - value equals valueFalse or false.\n */\n get: function () {\n return this.getPropertyValue(\"defaultValue\");\n },\n set: function (val) {\n if (val === true)\n val = \"true\";\n if (val === false)\n val = \"false\";\n this.setPropertyValue(\"defaultValue\", val);\n this.updateValueWithDefaults();\n },\n enumerable: true,\n configurable: true\n });\n QuestionBooleanModel.prototype.getDefaultValue = function () {\n if (this.defaultValue == \"indeterminate\")\n return null;\n return this.defaultValue == \"true\"\n ? this.getValueTrue()\n : this.getValueFalse();\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"locTitle\", {\n get: function () {\n return this.showTitle || this.isValueEmpty(this.locLabel.text)\n ? this.getLocalizableString(\"title\")\n : this.locLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"label\", {\n /**\n * The checkbox label. If it is empty and showTitle is false then title is rendered\n * @see showTitle\n * @see title\n */\n get: function () {\n return this.getLocalizableStringText(\"label\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"label\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabel\", {\n get: function () {\n return this.getLocalizableString(\"label\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locDisplayLabel\", {\n get: function () {\n if (this.locLabel.text)\n return this.locLabel;\n return this.showTitle ? this.locLabel : this.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelTrue\", {\n /**\n * Set this property, if you want to have a different label for state when check is set.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelTrue\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelTrue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelTrue\", {\n get: function () {\n return this.getLocalizableString(\"labelTrue\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"labelFalse\", {\n /**\n * Set this property, if you want to have a different label for state when check is unset.\n */\n get: function () {\n return this.getLocalizableStringText(\"labelFalse\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"labelFalse\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"locLabelFalse\", {\n get: function () {\n return this.getLocalizableString(\"labelFalse\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"showTitle\", {\n /**\n * Set this property to true to show the question title. It is hidden by default.\n */\n get: function () {\n return this.getPropertyValue(\"showTitle\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTitle\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"valueTrue\", {\n /**\n * Set this property, if you want to have a different value from true when check is set.\n */\n get: function () {\n return this.getPropertyValue(\"valueTrue\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueTrue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionBooleanModel.prototype, \"valueFalse\", {\n /**\n * Set this property, if you want to have a different value from false when check is unset.\n */\n get: function () {\n return this.getPropertyValue(\"valueFalse\");\n },\n set: function (val) {\n this.setPropertyValue(\"valueFalse\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionBooleanModel.prototype.getValueTrue = function () {\n return this.valueTrue ? this.valueTrue : true;\n };\n QuestionBooleanModel.prototype.getValueFalse = function () {\n return this.valueFalse ? this.valueFalse : false;\n };\n QuestionBooleanModel.prototype.setDefaultValue = function () {\n if (this.defaultValue == \"true\")\n this.checkedValue = true;\n if (this.defaultValue == \"false\")\n this.checkedValue = false;\n if (this.defaultValue == \"indeterminate\")\n this.value = null;\n };\n return QuestionBooleanModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"boolean\", [\n {\n name: \"defaultValue:dropdown\",\n alternativeName: \"booleanDefaultValue\",\n default: \"indeterminate\",\n choices: [\"indeterminate\", \"false\", \"true\"],\n },\n { name: \"label:text\", serializationProperty: \"locLabel\" },\n {\n name: \"labelTrue:text\",\n serializationProperty: \"locLabelTrue\",\n },\n {\n name: \"labelFalse:text\",\n serializationProperty: \"locLabelFalse\",\n },\n \"showTitle:boolean\",\n \"valueTrue\",\n \"valueFalse\",\n], function () {\n return new QuestionBooleanModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_1__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"boolean\", function (name) {\n return new QuestionBooleanModel(name);\n});\n\n\n/***/ }),\n/* 181 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__surveyStrings__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionCheckboxModel; });\n\n\n\n\n\n\n\n/**\n * A Model for a checkbox question\n */\nvar QuestionCheckboxModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCheckboxModel, _super);\n function QuestionCheckboxModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.noneItemValue = new __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */](\"none\");\n _this.selectAllItemValue = new __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */](\"selectall\");\n _this.invisibleOldValues = {};\n _this.isChangingValueOnClearIncorrect = false;\n var noneItemText = _this.createLocalizableString(\"noneText\", _this, true);\n noneItemText.onGetTextCallback = function (text) {\n return !!text ? text : __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"noneItemText\");\n };\n _this.noneItemValue.locOwner = _this;\n _this.noneItemValue.setLocText(noneItemText);\n var selectAllItemText = _this.createLocalizableString(\"selectAllText\", _this, true);\n selectAllItemText.onGetTextCallback = function (text) {\n return !!text ? text : __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"selectAllItemText\");\n };\n _this.selectAllItem.locOwner = _this;\n _this.selectAllItem.setLocText(selectAllItemText);\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"hasNone\", \"noneText\", \"hasSelectAll\", \"selectAllText\"], function () {\n self.onVisibleChoicesChanged();\n });\n return _this;\n }\n Object.defineProperty(QuestionCheckboxModel.prototype, \"ariaRole\", {\n get: function () {\n return \"group\";\n },\n enumerable: true,\n configurable: true\n });\n QuestionCheckboxModel.prototype.getType = function () {\n return \"checkbox\";\n };\n QuestionCheckboxModel.prototype.onCreating = function () {\n _super.prototype.onCreating.call(this);\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n };\n QuestionCheckboxModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllItem\", {\n /**\n * Returns the select all item. By using this property, you may change programmatically it's value and text.\n * @see hasSelectAll\n */\n get: function () {\n return this.selectAllItemValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"noneItem\", {\n /**\n * Returns the none item. By using this property, you may change programmatically it's value and text.\n * @see hasNone\n */\n get: function () {\n return this.noneItemValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"noneText\", {\n /**\n * Use this property to set the different text for none item.\n */\n get: function () {\n return this.getLocalizableStringText(\"noneText\", __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"noneItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"noneText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"locNoneText\", {\n get: function () {\n return this.getLocalizableString(\"noneText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"selectAllText\", {\n /**\n * Use this property to set the different text for Select All item.\n */\n get: function () {\n return this.getLocalizableStringText(\"selectAllText\", __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"selectAllItemText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"selectAllText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"locSelectAllText\", {\n get: function () {\n return this.getLocalizableString(\"selectAllText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"hasSelectAll\", {\n /**\n * Set this property to true, to show the \"Select All\" item on the top. If end-user checks this item, then all items are checked.\n */\n get: function () {\n return this.getPropertyValue(\"hasSelectAll\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasSelectAll\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCheckboxModel.prototype, \"isAllSelected\", {\n /**\n * Returns true if all items are selected\n * @see toggleSelectAll\n */\n get: function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return false;\n if (this.isItemSelected(this.noneItem))\n return false;\n var allItemCount = this.visibleChoices.length;\n if (this.hasOther)\n allItemCount--;\n if (this.hasNone)\n allItemCount--;\n if (this.hasSelectAll)\n allItemCount--;\n var selectedCount = val.length;\n if (this.isItemSelected(this.otherItem))\n selectedCount--;\n return selectedCount === allItemCount;\n },\n set: function (val) {\n if (val) {\n this.selectAll();\n }\n else {\n this.clearValue();\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * It will select all items, except other and none. If all items have been already selected then it will clear the value\n * @see isAllSelected\n * @see selectAll\n */\n QuestionCheckboxModel.prototype.toggleSelectAll = function () {\n this.isAllSelected = !this.isAllSelected;\n };\n /**\n * Select all items, except other and none.\n */\n QuestionCheckboxModel.prototype.selectAll = function () {\n var val = [];\n for (var i = 0; i < this.visibleChoices.length; i++) {\n var item = this.visibleChoices[i];\n if (item === this.noneItem ||\n item === this.otherItem ||\n item === this.selectAllItem)\n continue;\n val.push(item.value);\n }\n this.value = val;\n };\n Object.defineProperty(QuestionCheckboxModel.prototype, \"hasNone\", {\n /**\n * Set this property to true, to show the \"None\" item on the bottom. If end-user checks this item, all other items would be unchecked.\n */\n get: function () {\n return this.getPropertyValue(\"hasNone\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hasNone\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns true if item is checked\n * @param item checkbox item value\n */\n QuestionCheckboxModel.prototype.isItemSelected = function (item) {\n if (item === this.selectAllItem)\n return this.isAllSelected;\n var val = this.renderedValue;\n if (!val || !Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n QuestionCheckboxModel.prototype.setNewValue = function (newValue) {\n if (!this.isChangingValueOnClearIncorrect) {\n this.invisibleOldValues = [];\n }\n newValue = this.valueFromData(newValue);\n var value = this.value;\n if (!newValue)\n newValue = [];\n if (!value)\n value = [];\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(value, newValue))\n return;\n if (this.hasNone) {\n var prevNoneIndex = this.noneIndexInArray(value);\n var newNoneIndex = this.noneIndexInArray(newValue);\n if (prevNoneIndex > -1) {\n if (newNoneIndex > -1 && newValue.length > 1) {\n newValue.splice(newNoneIndex, 1);\n }\n }\n else {\n if (newNoneIndex > -1) {\n newValue.splice(0, newValue.length);\n newValue.push(this.noneItem.value);\n }\n }\n }\n _super.prototype.setNewValue.call(this, this.rendredValueToData(newValue));\n };\n QuestionCheckboxModel.prototype.noneIndexInArray = function (val) {\n if (!val || !Array.isArray(val))\n return -1;\n var noneValue = this.noneItem.value;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == noneValue)\n return i;\n }\n return -1;\n };\n QuestionCheckboxModel.prototype.canUseFilteredChoices = function () {\n return !this.hasNone && !this.hasSelectAll && _super.prototype.canUseFilteredChoices.call(this);\n };\n QuestionCheckboxModel.prototype.addToVisibleChoices = function (items) {\n if (this.hasSelectAll) {\n items.unshift(this.selectAllItem);\n }\n _super.prototype.addToVisibleChoices.call(this, items);\n if (this.hasNone) {\n items.push(this.noneItem);\n }\n };\n QuestionCheckboxModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n if (!Array.isArray(value))\n return _super.prototype.getDisplayValueCore.call(this, keysAsText, value);\n var items = this.visibleChoices;\n var str = \"\";\n for (var i = 0; i < value.length; i++) {\n var valStr = this.getChoicesDisplayValue(items, value[i]);\n if (valStr) {\n if (str)\n str += \", \";\n str += valStr;\n }\n }\n return str;\n };\n QuestionCheckboxModel.prototype.clearIncorrectValuesCore = function () {\n this.clearIncorrectAndDisabledValues(false);\n };\n QuestionCheckboxModel.prototype.clearDisabledValuesCore = function () {\n this.clearIncorrectAndDisabledValues(true);\n };\n QuestionCheckboxModel.prototype.clearIncorrectAndDisabledValues = function (clearDisabled) {\n var val = this.value;\n var hasChanged = false;\n var restoredValues = this.restoreValuesFromInvisible();\n if (!val && restoredValues.length == 0)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.isChangingValueOnClearIncorrect = true;\n if (!clearDisabled) {\n if (this.hasComment) {\n this.value = null;\n }\n else {\n this.clearValue();\n }\n }\n this.isChangingValueOnClearIncorrect = false;\n if (restoredValues.length == 0)\n return;\n val = [];\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n var isUnkown = this.canClearValueAnUnknow(val[i]);\n if ((!clearDisabled && !isUnkown) ||\n (clearDisabled && !this.isValueDisabled(val[i]))) {\n newValue.push(val[i]);\n }\n else {\n hasChanged = true;\n if (isUnkown) {\n this.invisibleOldValues[val[i]] = true;\n }\n }\n }\n for (var i = 0; i < restoredValues.length; i++) {\n newValue.push(restoredValues[i]);\n hasChanged = true;\n }\n if (!hasChanged)\n return;\n this.isChangingValueOnClearIncorrect = true;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n this.isChangingValueOnClearIncorrect = false;\n };\n QuestionCheckboxModel.prototype.restoreValuesFromInvisible = function () {\n var res = [];\n var visItems = this.visibleChoices;\n for (var i = 0; i < visItems.length; i++) {\n var val = visItems[i].value;\n if (this.invisibleOldValues[val]) {\n res.push(val);\n delete this.invisibleOldValues[val];\n }\n }\n return res;\n };\n QuestionCheckboxModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n var json = _super.prototype.getConditionJson.call(this);\n if (operator == \"contains\" || operator == \"notcontains\") {\n json[\"type\"] = \"radiogroup\";\n }\n return json;\n };\n QuestionCheckboxModel.prototype.isAnswerCorrect = function () {\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isArrayContainsEqual(this.value, this.correctAnswer);\n };\n QuestionCheckboxModel.prototype.setDefaultValueWithOthers = function () {\n this.value = this.renderedValueFromDataCore(this.defaultValue);\n };\n QuestionCheckboxModel.prototype.getHasOther = function (val) {\n if (!val || !Array.isArray(val))\n return false;\n return val.indexOf(this.otherItem.value) >= 0;\n };\n QuestionCheckboxModel.prototype.valueFromData = function (val) {\n if (!val)\n return val;\n if (!Array.isArray(val))\n return [_super.prototype.valueFromData.call(this, val)];\n var value = [];\n for (var i = 0; i < val.length; i++) {\n var choiceitem = __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.activeChoices, val[i]);\n if (!!choiceitem) {\n value.push(choiceitem.value);\n }\n else {\n value.push(val[i]);\n }\n }\n return value;\n };\n QuestionCheckboxModel.prototype.renderedValueFromDataCore = function (val) {\n if (!val || !Array.isArray(val))\n val = [];\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value)\n return val;\n if (this.hasUnknownValue(val[i])) {\n this.comment = val[i];\n var newVal = val.slice();\n newVal[i] = this.otherItem.value;\n return newVal;\n }\n }\n return val;\n };\n QuestionCheckboxModel.prototype.rendredValueToDataCore = function (val) {\n if (!val || !val.length)\n return val;\n for (var i = 0; i < val.length; i++) {\n if (val[i] == this.otherItem.value) {\n if (this.getQuestionComment()) {\n var newVal = val.slice();\n newVal[i] = this.getQuestionComment();\n return newVal;\n }\n }\n }\n return val;\n };\n QuestionCheckboxModel.prototype.hasUnknownValue = function (val, includeOther) {\n if (includeOther === void 0) { includeOther = false; }\n if (this.hasNone && val == this.noneItemValue.value)\n return false;\n return _super.prototype.hasUnknownValue.call(this, val, includeOther);\n };\n QuestionCheckboxModel.prototype.addSupportedValidators = function (supportedValidators) {\n _super.prototype.addSupportedValidators.call(this, supportedValidators);\n supportedValidators.push(\"answercount\");\n };\n return QuestionCheckboxModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__[\"a\" /* QuestionCheckboxBase */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"checkbox\", [\n \"hasSelectAll:boolean\",\n \"hasNone:boolean\",\n { name: \"noneText\", serializationProperty: \"locNoneText\" },\n { name: \"selectAllText\", serializationProperty: \"locSelectAllText\" },\n], function () {\n return new QuestionCheckboxModel(\"\");\n}, \"checkboxbase\");\n__WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"checkbox\", function (name) {\n var q = new QuestionCheckboxModel(name);\n q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n/* 182 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionCommentModel; });\n\n\n\n\n\n/**\n * A Model for a comment question\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCommentModel, _super);\n function QuestionCommentModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionCommentModel.prototype.isTextValue = function () {\n return true;\n };\n Object.defineProperty(QuestionCommentModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.getPropertyValue(\"maxLength\");\n },\n set: function (val) {\n this.setPropertyValue(\"maxLength\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionCommentModel.prototype.getMaxLength = function () {\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionCommentModel.prototype, \"placeHolder\", {\n /**\n * Use this property to set the input place holder.\n */\n get: function () {\n return this.getLocalizableStringText(\"placeHolder\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"placeHolder\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"rows\", {\n /**\n * The html rows attribute.\n */\n get: function () {\n return this.getPropertyValue(\"rows\");\n },\n set: function (val) {\n this.setPropertyValue(\"rows\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"cols\", {\n /**\n * The html cols attribute.\n */\n get: function () {\n return this.getPropertyValue(\"cols\");\n },\n set: function (val) {\n this.setPropertyValue(\"cols\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionCommentModel.prototype.getType = function () {\n return \"comment\";\n };\n QuestionCommentModel.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n QuestionCommentModel.prototype.addSupportedValidators = function (supportedValidators) {\n _super.prototype.addSupportedValidators.call(this, supportedValidators);\n supportedValidators.push(\"text\", \"regex\");\n };\n return QuestionCommentModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"comment\", [\n { name: \"maxLength:number\", default: -1 },\n { name: \"cols:number\", default: 50 },\n { name: \"rows:number\", default: 4 },\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n], function () {\n return new QuestionCommentModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_3__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"comment\", function (name) {\n return new QuestionCommentModel(name);\n});\n\n\n/***/ }),\n/* 183 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return ComponentQuestionJSON; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return ComponentCollection; });\n/* unused harmony export QuestionCustomModelBase */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionCustomModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionCompositeModel; });\n\n\n\n\n\nvar ComponentQuestionJSON = /** @class */ (function () {\n function ComponentQuestionJSON(name, json) {\n this.name = name;\n this.json = json;\n var self = this;\n __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(name, [], function (json) {\n return ComponentCollection.Instance.createQuestion(!!json ? json.name : \"\", self);\n }, \"question\");\n this.onInit();\n }\n ComponentQuestionJSON.prototype.onInit = function () {\n if (!this.json.onInit)\n return;\n this.json.onInit();\n };\n ComponentQuestionJSON.prototype.onCreated = function (question) {\n if (!this.json.onCreated)\n return;\n this.json.onCreated(question);\n };\n ComponentQuestionJSON.prototype.onLoaded = function (question) {\n if (!this.json.onLoaded)\n return;\n this.json.onLoaded(question);\n };\n ComponentQuestionJSON.prototype.onAfterRender = function (question, htmlElement) {\n if (!this.json.onAfterRender)\n return;\n this.json.onAfterRender(question, htmlElement);\n };\n ComponentQuestionJSON.prototype.onAfterRenderContentElement = function (question, element, htmlElement) {\n if (!this.json.onAfterRenderContentElement)\n return;\n this.json.onAfterRenderContentElement(question, element, htmlElement);\n };\n ComponentQuestionJSON.prototype.onPropertyChanged = function (question, propertyName, newValue) {\n if (!this.json.onPropertyChanged)\n return;\n this.json.onPropertyChanged(question, propertyName, newValue);\n };\n ComponentQuestionJSON.prototype.onItemValuePropertyChanged = function (question, item, propertyName, name, newValue) {\n if (!this.json.onItemValuePropertyChanged)\n return;\n this.json.onItemValuePropertyChanged(question, {\n obj: item,\n propertyName: propertyName,\n name: name,\n newValue: newValue,\n });\n };\n Object.defineProperty(ComponentQuestionJSON.prototype, \"isComposite\", {\n get: function () {\n return !!this.json.elementsJSON || !!this.json.createElements;\n },\n enumerable: true,\n configurable: true\n });\n return ComponentQuestionJSON;\n}());\n\nvar ComponentCollection = /** @class */ (function () {\n function ComponentCollection() {\n this.customQuestionValues = [];\n }\n ComponentCollection.prototype.add = function (json) {\n if (!json)\n return;\n var name = json.name;\n if (!name) {\n throw \"Attribute name is missed\";\n }\n name = name.toLowerCase();\n if (!!this.getCustomQuestionByName(name)) {\n throw (\"There is already registered custom question with name '\" + name + \"'\");\n }\n if (!!__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].findClass(name)) {\n throw \"There is already class with name '\" + name + \"'\";\n }\n var customQuestion = new ComponentQuestionJSON(name, json);\n if (!!this.onAddingJson)\n this.onAddingJson(name, customQuestion.isComposite);\n this.customQuestionValues.push(customQuestion);\n };\n Object.defineProperty(ComponentCollection.prototype, \"items\", {\n get: function () {\n return this.customQuestionValues;\n },\n enumerable: true,\n configurable: true\n });\n ComponentCollection.prototype.getCustomQuestionByName = function (name) {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n if (this.customQuestionValues[i].name == name)\n return this.customQuestionValues[i];\n }\n return null;\n };\n ComponentCollection.prototype.clear = function () {\n for (var i = 0; i < this.customQuestionValues.length; i++) {\n __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].removeClass(this.customQuestionValues[i].name);\n }\n this.customQuestionValues = [];\n };\n ComponentCollection.prototype.createQuestion = function (name, questionJSON) {\n if (!!questionJSON.isComposite)\n return this.createCompositeModel(name, questionJSON);\n return this.createCustomModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCompositeModel = function (name, questionJSON) {\n if (!!this.onCreateComposite)\n return this.onCreateComposite(name, questionJSON);\n return new QuestionCompositeModel(name, questionJSON);\n };\n ComponentCollection.prototype.createCustomModel = function (name, questionJSON) {\n if (!!this.onCreateCustom)\n return this.onCreateCustom(name, questionJSON);\n return new QuestionCustomModel(name, questionJSON);\n };\n ComponentCollection.Instance = new ComponentCollection();\n return ComponentCollection;\n}());\n\nvar QuestionCustomModelBase = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCustomModelBase, _super);\n function QuestionCustomModelBase(name, customQuestion) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.customQuestion = customQuestion;\n __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"a\" /* CustomPropertiesCollection */].createProperties(_this);\n __WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */].CreateDisabledDesignElements = true;\n _this.createWrapper();\n __WEBPACK_IMPORTED_MODULE_3__base__[\"c\" /* SurveyElement */].CreateDisabledDesignElements = false;\n if (!!_this.customQuestion) {\n _this.customQuestion.onCreated(_this);\n }\n return _this;\n }\n QuestionCustomModelBase.prototype.getType = function () {\n return !!this.customQuestion ? this.customQuestion.name : \"custom\";\n };\n QuestionCustomModelBase.prototype.createWrapper = function () { };\n QuestionCustomModelBase.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onPropertyChanged(this, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.itemValuePropertyChanged = function (item, name, oldValue, newValue) {\n _super.prototype.itemValuePropertyChanged.call(this, item, name, oldValue, newValue);\n if (!!this.customQuestion && !this.isLoadingFromJson) {\n this.customQuestion.onItemValuePropertyChanged(this, item, item.ownerPropertyName, name, newValue);\n }\n };\n QuestionCustomModelBase.prototype.onFirstRendering = function () {\n var el = this.getElement();\n if (!!el) {\n el.onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionCustomModelBase.prototype.initElement = function (el) {\n if (!el)\n return;\n el.setSurveyImpl(this);\n el.disableDesignActions = true;\n };\n QuestionCustomModelBase.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.initElement(this.getElement());\n };\n QuestionCustomModelBase.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!!this.getElement()) {\n this.getElement().onSurveyLoad();\n this.customQuestion.onLoaded(this);\n }\n };\n QuestionCustomModelBase.prototype.afterRenderQuestionElement = function (el) {\n //Do nothing\n };\n QuestionCustomModelBase.prototype.afterRender = function (el) {\n _super.prototype.afterRender.call(this, el);\n if (!!this.customQuestion) {\n this.customQuestion.onAfterRender(this, el);\n }\n };\n QuestionCustomModelBase.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n this.updateElementCss();\n };\n QuestionCustomModelBase.prototype.setNewValue = function (newValue) {\n _super.prototype.setNewValue.call(this, newValue);\n this.updateElementCss();\n };\n //ISurveyImpl\n QuestionCustomModelBase.prototype.geSurveyData = function () {\n return this;\n };\n QuestionCustomModelBase.prototype.getSurvey = function () {\n return this.survey;\n };\n QuestionCustomModelBase.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n //ISurveyData\n QuestionCustomModelBase.prototype.getValue = function (name) {\n return this.value;\n };\n QuestionCustomModelBase.prototype.setValue = function (name, newValue, locNotification, allowNotifyValueChanged) {\n if (!this.data)\n return;\n var newName = this.convertDataName(name);\n this.data.setValue(newName, this.convertDataValue(name, newValue), locNotification, allowNotifyValueChanged);\n this.updateIsAnswered();\n this.updateElementCss();\n };\n QuestionCustomModelBase.prototype.convertDataName = function (name) {\n return this.getValueName();\n };\n QuestionCustomModelBase.prototype.convertDataValue = function (name, newValue) {\n return newValue;\n };\n QuestionCustomModelBase.prototype.getVariable = function (name) {\n return !!this.data ? this.data.getVariable(name) : null;\n };\n QuestionCustomModelBase.prototype.setVariable = function (name, newValue) {\n if (!this.data)\n return;\n this.data.setVariable(name, newValue);\n };\n QuestionCustomModelBase.prototype.getComment = function (name) {\n return !!this.data ? this.data.getComment(this.getValueName()) : \"\";\n };\n QuestionCustomModelBase.prototype.setComment = function (name, newValue, locNotification) {\n if (!this.data)\n return;\n this.data.setComment(this.getValueName(), newValue, locNotification);\n };\n QuestionCustomModelBase.prototype.getAllValues = function () {\n return !!this.data ? this.data.getAllValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredValues = function () {\n return !!this.data ? this.data.getFilteredValues() : {};\n };\n QuestionCustomModelBase.prototype.getFilteredProperties = function () {\n return !!this.data ? this.data.getFilteredProperties() : {};\n };\n //IPanel\n QuestionCustomModelBase.prototype.addElement = function (element, index) { };\n QuestionCustomModelBase.prototype.removeElement = function (element) {\n return false;\n };\n QuestionCustomModelBase.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionCustomModelBase.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionCustomModelBase.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionCustomModelBase.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionCustomModelBase.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: true,\n configurable: true\n });\n QuestionCustomModelBase.prototype.indexOf = function (el) {\n return -1;\n };\n return QuestionCustomModelBase;\n}(__WEBPACK_IMPORTED_MODULE_1__question__[\"a\" /* Question */]));\n\nvar QuestionCustomModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCustomModel, _super);\n function QuestionCustomModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionCustomModel.prototype.getTemplate = function () {\n return \"custom\";\n };\n QuestionCustomModel.prototype.createWrapper = function () {\n this.questionWrapper = this.createQuestion();\n };\n QuestionCustomModel.prototype.getElement = function () {\n return this.contentQuestion;\n };\n QuestionCustomModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (!this.contentQuestion)\n return false;\n var res = this.contentQuestion.hasErrors(fireCallback, rec);\n this.errors = [];\n for (var i = 0; i < this.contentQuestion.errors.length; i++) {\n this.errors.push(this.contentQuestion.errors[i]);\n }\n if (!res) {\n res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n }\n this.updateElementCss();\n return res;\n };\n QuestionCustomModel.prototype.focus = function (onError) {\n if (onError === void 0) { onError = false; }\n if (!!this.contentQuestion) {\n this.contentQuestion.focus(onError);\n }\n else {\n _super.prototype.focus.call(this, onError);\n }\n };\n Object.defineProperty(QuestionCustomModel.prototype, \"contentQuestion\", {\n get: function () {\n return this.questionWrapper;\n },\n enumerable: true,\n configurable: true\n });\n QuestionCustomModel.prototype.createQuestion = function () {\n var json = this.customQuestion.json;\n var res = null;\n if (!!json.questionJSON) {\n var qType = json.questionJSON.type;\n if (!qType || !__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].findClass(qType))\n throw \"type attribute in questionJSON is empty or incorrect\";\n res = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(qType);\n this.initElement(res);\n res.fromJSON(json.questionJSON);\n }\n else {\n if (!!json.createQuestion) {\n res = json.createQuestion();\n this.initElement(res);\n }\n }\n if (!!res && !res.name) {\n res.name = \"question\";\n }\n return res;\n };\n QuestionCustomModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n if (!this.contentQuestion)\n return;\n if (this.isEmpty() && !this.contentQuestion.isEmpty()) {\n this.value = this.contentQuestion.value;\n }\n };\n QuestionCustomModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentQuestion) {\n this.contentQuestion.runCondition(values, properties);\n }\n };\n QuestionCustomModel.prototype.convertDataName = function (name) {\n if (!this.contentQuestion)\n return _super.prototype.convertDataName.call(this, name);\n var newName = name.replace(this.contentQuestion.getValueName(), this.getValueName());\n return newName.indexOf(this.getValueName()) == 0\n ? newName\n : _super.prototype.convertDataName.call(this, name);\n };\n QuestionCustomModel.prototype.convertDataValue = function (name, newValue) {\n return this.convertDataName(name) == _super.prototype.convertDataName.call(this, name)\n ? this.contentQuestion.value\n : newValue;\n };\n QuestionCustomModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n if (!!this.contentQuestion) {\n this.contentQuestion.value = newValue;\n }\n };\n QuestionCustomModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (!!this.contentQuestion) {\n this.contentQuestion.onSurveyValueChanged(newValue);\n }\n };\n QuestionCustomModel.prototype.initElement = function (el) {\n var _this = this;\n _super.prototype.initElement.call(this, el);\n if (!!el) {\n el.parent = this;\n el.afterRenderQuestionCallback = function (question, element) {\n if (!!_this.customQuestion) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n }\n };\n }\n };\n QuestionCustomModel.prototype.updateElementCssCore = function (cssClasses) {\n if (!!this.contentQuestion) {\n cssClasses = this.contentQuestion.cssClasses;\n }\n _super.prototype.updateElementCssCore.call(this, cssClasses);\n };\n return QuestionCustomModel;\n}(QuestionCustomModelBase));\n\nvar QuestionCompositeModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionCompositeModel, _super);\n function QuestionCompositeModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionCompositeModel.prototype.createWrapper = function () {\n this.panelWrapper = this.createPanel();\n };\n QuestionCompositeModel.prototype.getTemplate = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getCssType = function () {\n return \"composite\";\n };\n QuestionCompositeModel.prototype.getElement = function () {\n return this.contentPanel;\n };\n Object.defineProperty(QuestionCompositeModel.prototype, \"contentPanel\", {\n get: function () {\n return this.panelWrapper;\n },\n enumerable: true,\n configurable: true\n });\n QuestionCompositeModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = _super.prototype.hasErrors.call(this, fireCallback, rec);\n if (!this.contentPanel)\n return res;\n return this.contentPanel.hasErrors(fireCallback, false, rec) || res;\n };\n QuestionCompositeModel.prototype.updateElementCss = function () {\n _super.prototype.updateElementCss.call(this);\n if (this.contentPanel) {\n this.contentPanel.updateElementCss();\n }\n };\n QuestionCompositeModel.prototype.createPanel = function () {\n var res = __WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].createClass(\"panel\");\n res.showQuestionNumbers = \"off\";\n var json = this.customQuestion.json;\n if (!!json.elementsJSON) {\n res.fromJSON({ elements: json.elementsJSON });\n }\n if (!!json.createElements) {\n json.createElements(res);\n }\n this.initElement(res);\n res.readOnly = this.isReadOnly;\n this.setAfterRenderCallbacks(res);\n return res;\n };\n QuestionCompositeModel.prototype.onReadOnlyChanged = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionCompositeModel.prototype.onSurveyLoad = function () {\n if (!!this.contentPanel) {\n this.contentPanel.readOnly = this.isReadOnly;\n this.setIsContentElement(this.contentPanel);\n }\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionCompositeModel.prototype.setIsContentElement = function (panel) {\n panel.isContentElement = true;\n var elements = panel.elements;\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n if (el.isPanel) {\n this.setIsContentElement(el);\n }\n else {\n el.isContentElement = true;\n }\n }\n };\n QuestionCompositeModel.prototype.setVisibleIndex = function (val) {\n var res = _super.prototype.setVisibleIndex.call(this, val);\n if (this.isVisible && !!this.contentPanel) {\n res += this.contentPanel.setVisibleIndex(val);\n }\n return res;\n };\n QuestionCompositeModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n if (!!this.contentPanel) {\n var oldComposite = values.composite;\n values.composite = this.contentPanel.getValue();\n this.contentPanel.runCondition(values, properties);\n delete values[\"composite\"];\n if (!!oldComposite) {\n values.composite = oldComposite;\n }\n }\n };\n QuestionCompositeModel.prototype.getValue = function (name) {\n var val = this.value;\n return !!val ? val[name] : null;\n };\n QuestionCompositeModel.prototype.convertDataValue = function (name, newValue) {\n var val = this.value;\n if (!val)\n val = {};\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isValueEmpty(newValue)) {\n delete val[name];\n }\n else {\n val[name] = newValue;\n }\n return val;\n };\n QuestionCompositeModel.prototype.setQuestionValue = function (newValue, updateIsAnswered) {\n if (updateIsAnswered === void 0) { updateIsAnswered = true; }\n _super.prototype.setQuestionValue.call(this, newValue, updateIsAnswered);\n var questions = this.contentPanel.questions;\n for (var i = 0; i < questions.length; i++) {\n var key = questions[i].getValueName();\n questions[i].value = !!newValue ? newValue[key] : undefined;\n }\n };\n QuestionCompositeModel.prototype.setAfterRenderCallbacks = function (panel) {\n var _this = this;\n if (!panel || !this.customQuestion)\n return;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].afterRenderQuestionCallback = function (question, element) {\n _this.customQuestion.onAfterRenderContentElement(_this, question, element);\n };\n }\n };\n return QuestionCompositeModel;\n}(QuestionCustomModelBase));\n\n\n\n/***/ }),\n/* 184 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionEmptyModel; });\n\n\n\n/**\n * A Model for an question that renders empty \"div\" tag. It used as a base class for some custom widgets\n */\nvar QuestionEmptyModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionEmptyModel, _super);\n function QuestionEmptyModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n QuestionEmptyModel.prototype.getType = function () {\n return \"empty\";\n };\n return QuestionEmptyModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"empty\", [], function () {\n return new QuestionEmptyModel(\"\");\n}, \"question\");\n\n\n/***/ }),\n/* 185 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__surveyStrings__ = __webpack_require__(1);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionFileModel; });\n\n\n\n\n\n\n\n/**\n * A Model for a file question\n */\nvar QuestionFileModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionFileModel, _super);\n function QuestionFileModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.isUploading = false;\n /**\n * The event is fired after question state has been changed.\n *
sender the question object that fires the event\n *
options.state new question state value.\n */\n _this.onStateChanged = new __WEBPACK_IMPORTED_MODULE_4__base__[\"b\" /* Event */]();\n _this.previewValue = [];\n _this.currentState = \"empty\";\n return _this;\n }\n QuestionFileModel.prototype.getType = function () {\n return \"file\";\n };\n QuestionFileModel.prototype.clearOnDeletingContainer = function () {\n this.survey.clearFiles(this.name, this.value, null, function () { });\n };\n Object.defineProperty(QuestionFileModel.prototype, \"showPreview\", {\n /**\n * Set it to true, to show the preview for the image files.\n */\n get: function () {\n return this.getPropertyValue(\"showPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"showPreview\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowMultiple\", {\n /**\n * Set it to true, to allow select multiple files.\n */\n get: function () {\n return this.getPropertyValue(\"allowMultiple\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"allowMultiple\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"acceptedTypes\", {\n /**\n * Accepted file types. Passed to the 'accept' attribute of the file input tag. See https://www.w3schools.com/tags/att_input_accept.asp for more details.\n */\n get: function () {\n return this.getPropertyValue(\"acceptedTypes\");\n },\n set: function (val) {\n this.setPropertyValue(\"acceptedTypes\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"storeDataAsText\", {\n /**\n * Set it to false if you do not want to serialize file content as text in the survey.data.\n * In this case, you have to write the code onUploadFiles event to store the file content.\n * @see SurveyModel.onUploadFiles\n */\n get: function () {\n return this.getPropertyValue(\"storeDataAsText\");\n },\n set: function (val) {\n this.setPropertyValue(\"storeDataAsText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"waitForUpload\", {\n /**\n * Set it to true if you want to wait until files will be uploaded to your server.\n */\n get: function () {\n return this.getPropertyValue(\"waitForUpload\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"waitForUpload\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"allowImagesPreview\", {\n /**\n * Set it to false if you want to disable images preview.\n */\n get: function () {\n return this.getPropertyValue(\"allowImagesPreview\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowImagesPreview\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"maxSize\", {\n /**\n * Use this property to setup the maximum allowed file size.\n */\n get: function () {\n return this.getPropertyValue(\"maxSize\", 0);\n },\n set: function (val) {\n this.setPropertyValue(\"maxSize\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"needConfirmRemoveFile\", {\n /**\n * Use this property to setup confirmation to remove file.\n */\n get: function () {\n return this.getPropertyValue(\"needConfirmRemoveFile\");\n },\n set: function (val) {\n this.setPropertyValue(\"needConfirmRemoveFile\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * The remove file confirmation message.\n */\n QuestionFileModel.prototype.getConfirmRemoveMessage = function (fileName) {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"confirmRemoveFile\")[\"format\"](fileName);\n };\n Object.defineProperty(QuestionFileModel.prototype, \"confirmRemoveAllMessage\", {\n /**\n * The remove all files confirmation message.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"confirmRemoveAllFiles\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"noFileChosenCaption\", {\n /**\n * The no file chosen caption for modern theme.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"noFileChosen\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"chooseButtonCaption\", {\n /**\n * The choose files button caption for modern theme.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"chooseFileCaption\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"cleanButtonCaption\", {\n /**\n * The clean files button caption.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"cleanCaption\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"removeFileCaption\", {\n /**\n * The remove file button caption.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"removeFileCaption\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionFileModel.prototype, \"inputTitle\", {\n /**\n * The input title value.\n */\n get: function () {\n if (this.isUploading)\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"loadingFile\");\n if (this.isEmpty())\n return __WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"chooseFile\");\n return \" \";\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Clear value programmatically.\n */\n QuestionFileModel.prototype.clear = function (doneCallback) {\n var _this = this;\n this.survey.clearFiles(this.name, this.value, null, function (status, data) {\n if (status === \"success\") {\n _this.value = undefined;\n _this.errors = [];\n !!doneCallback && doneCallback();\n }\n });\n };\n /**\n * Remove file item programmatically.\n */\n QuestionFileModel.prototype.removeFile = function (content) {\n var _this = this;\n this.survey.clearFiles(this.name, this.value, content.name, function (status, data) {\n if (status === \"success\") {\n var oldValue = _this.value;\n if (Array.isArray(oldValue)) {\n _this.value = oldValue.filter(function (f) { return f.name !== content.name; });\n }\n else {\n _this.value = undefined;\n }\n }\n });\n };\n /**\n * Load multiple files programmatically.\n * @param files\n */\n QuestionFileModel.prototype.loadFiles = function (files) {\n var _this = this;\n if (!this.survey) {\n return;\n }\n this.errors = [];\n if (!this.allFilesOk(files)) {\n return;\n }\n this.stateChanged(\"loading\");\n var loadFilesProc = function () {\n var content = [];\n if (_this.storeDataAsText) {\n files.forEach(function (file) {\n var fileReader = new FileReader();\n fileReader.onload = function (e) {\n content = content.concat([\n { name: file.name, type: file.type, content: fileReader.result },\n ]);\n if (content.length === files.length) {\n _this.value = (_this.value || []).concat(content);\n }\n };\n fileReader.readAsDataURL(file);\n });\n }\n else {\n _this.survey.uploadFiles(_this, _this.name, files, function (status, data) {\n if (status === \"error\") {\n _this.stateChanged(\"error\");\n }\n if (status === \"success\") {\n _this.value = (_this.value || []).concat(data.map(function (r) {\n return {\n name: r.file.name,\n type: r.file.type,\n content: r.content,\n };\n }));\n }\n });\n }\n };\n if (this.allowMultiple) {\n loadFilesProc();\n }\n else {\n this.clear(loadFilesProc);\n }\n };\n QuestionFileModel.prototype.canPreviewImage = function (fileItem) {\n return this.allowImagesPreview && !!fileItem && this.isFileImage(fileItem);\n };\n QuestionFileModel.prototype.setQuestionValue = function (newValue) {\n var _this = this;\n _super.prototype.setQuestionValue.call(this, newValue);\n this.previewValue = [];\n var state = (!Array.isArray(newValue) && !!newValue) ||\n (Array.isArray(newValue) && newValue.length > 0)\n ? this.showPreview\n ? \"loading\"\n : \"loaded\"\n : \"empty\";\n this.stateChanged(state);\n if (!this.showPreview || !newValue)\n return;\n var newValues = Array.isArray(newValue)\n ? newValue\n : !!newValue\n ? [newValue]\n : [];\n if (this.storeDataAsText) {\n newValues.forEach(function (value) {\n var content = value.content || value;\n _this.previewValue = _this.previewValue.concat([\n {\n name: value.name,\n type: value.type,\n content: content,\n },\n ]);\n });\n if (state === \"loading\")\n this.stateChanged(\"loaded\");\n }\n else {\n newValues.forEach(function (value) {\n var content = value.content || value;\n _this.survey.downloadFile(_this.name, value, function (status, data) {\n if (status === \"success\") {\n _this.previewValue = _this.previewValue.concat([\n {\n content: data,\n name: value.name,\n type: value.type,\n },\n ]);\n if (_this.previewValue.length === newValues.length) {\n _this.stateChanged(\"loaded\");\n }\n }\n else {\n _this.stateChanged(\"error\");\n }\n });\n });\n }\n };\n QuestionFileModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (this.isUploading && this.waitForUpload) {\n errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__[\"g\" /* UploadingFileError */](__WEBPACK_IMPORTED_MODULE_6__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"uploadingFile\"), this));\n }\n };\n QuestionFileModel.prototype.stateChanged = function (state) {\n if (state === \"loading\") {\n this.isUploading = true;\n }\n if (state === \"loaded\") {\n this.isUploading = false;\n }\n this.currentState = state;\n this.onStateChanged.fire(this, { state: state });\n };\n QuestionFileModel.prototype.allFilesOk = function (files) {\n var _this = this;\n var errorLength = this.errors ? this.errors.length : 0;\n (files || []).forEach(function (file) {\n if (_this.maxSize > 0 && file.size > _this.maxSize) {\n _this.errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__[\"e\" /* ExceedSizeError */](_this.maxSize, _this));\n }\n });\n return errorLength === this.errors.length;\n };\n QuestionFileModel.prototype.isFileImage = function (file) {\n if (!file)\n return false;\n var imagePrefix = \"data:image\";\n var subStr = file.content && file.content.substr(0, imagePrefix.length);\n subStr = subStr && subStr.toLowerCase();\n var result = subStr === imagePrefix ||\n (!!file.type && file.type.toLowerCase().indexOf(\"image/\") === 0);\n return result;\n };\n QuestionFileModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData && !this.isEmpty()) {\n questionPlainData.isNode = false;\n var values = Array.isArray(this.value) ? this.value : [this.value];\n questionPlainData.data = values.map(function (dataValue, index) {\n return {\n name: index,\n title: \"File\",\n value: (dataValue.content && dataValue.content) || dataValue,\n displayValue: (dataValue.name && dataValue.name) || dataValue,\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n });\n }\n return questionPlainData;\n };\n QuestionFileModel.prototype.supportComment = function () {\n return true;\n };\n return QuestionFileModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"file\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n { name: \"showPreview:boolean\", default: true },\n \"allowMultiple:boolean\",\n { name: \"allowImagesPreview:boolean\", default: true },\n \"imageHeight\",\n \"imageWidth\",\n \"acceptedTypes\",\n { name: \"storeDataAsText:boolean\", default: true },\n { name: \"waitForUpload:boolean\", default: false },\n \"maxSize:number\",\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"needConfirmRemoveFile:boolean\", visible: true, default: false },\n], function () {\n return new QuestionFileModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_3__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"file\", function (name) {\n return new QuestionFileModel(name);\n});\n\n\n/***/ }),\n/* 186 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionnonvalue__ = __webpack_require__(25);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionHtmlModel; });\n\n\n\n\n/**\n * A Model for html question. Unlike other questions it doesn't have value and title.\n */\nvar QuestionHtmlModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionHtmlModel, _super);\n function QuestionHtmlModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n var locHtml = _this.createLocalizableString(\"html\", _this);\n var self = _this;\n locHtml.onGetTextCallback = function (str) {\n return !!self.survey ? self.survey.processHtml(str) : str;\n };\n return _this;\n }\n QuestionHtmlModel.prototype.getType = function () {\n return \"html\";\n };\n Object.defineProperty(QuestionHtmlModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"html\", {\n /**\n * Set html to display it\n */\n get: function () {\n return this.getLocalizableStringText(\"html\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"html\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"locHtml\", {\n get: function () {\n return this.getLocalizableString(\"html\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionHtmlModel.prototype, \"processedHtml\", {\n get: function () {\n return this.survey ? this.survey.processHtml(this.html) : this.html;\n },\n enumerable: true,\n configurable: true\n });\n return QuestionHtmlModel;\n}(__WEBPACK_IMPORTED_MODULE_1__questionnonvalue__[\"a\" /* QuestionNonValue */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"html\", [{ name: \"html:html\", serializationProperty: \"locHtml\" }], function () {\n return new QuestionHtmlModel(\"\");\n}, \"nonvalue\");\n__WEBPACK_IMPORTED_MODULE_3__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"html\", function (name) {\n return new QuestionHtmlModel(name);\n});\n\n\n/***/ }),\n/* 187 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__questionnonvalue__ = __webpack_require__(25);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionImageModel; });\n\n\n\n\n/**\n * A Model for image question. This question hasn't any functionality and can be used to improve the appearance of the survey.\n */\nvar QuestionImageModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionImageModel, _super);\n function QuestionImageModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n QuestionImageModel.prototype.getType = function () {\n return \"image\";\n };\n Object.defineProperty(QuestionImageModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageLink\", {\n /**\n * The image URL.\n */\n get: function () {\n return this.getPropertyValue(\"imageLink\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageLink\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImageModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n return QuestionImageModel;\n}(__WEBPACK_IMPORTED_MODULE_1__questionnonvalue__[\"a\" /* QuestionNonValue */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"image\", [\n { name: \"imageLink\" },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"]\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"]\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 }\n], function () {\n return new QuestionImageModel(\"\");\n}, \"nonvalue\");\n__WEBPACK_IMPORTED_MODULE_3__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"image\", function (name) {\n return new QuestionImageModel(name);\n});\n\n\n/***/ }),\n/* 188 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionImagePickerModel; });\n\n\n\n\n\n/**\n * A Model for a select image question.\n */\nvar QuestionImagePickerModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionImagePickerModel, _super);\n function QuestionImagePickerModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.colCount = 0;\n return _this;\n }\n QuestionImagePickerModel.prototype.getType = function () {\n return \"imagepicker\";\n };\n QuestionImagePickerModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionImagePickerModel.prototype.getItemValueType = function () {\n return \"imageitemvalue\";\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"multiSelect\", {\n /**\n * Multi select option. If set to true, then allows to select multiple images.\n */\n get: function () {\n return this.getPropertyValue(\"multiSelect\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"multiSelect\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns true if item is checked\n * @param item image picker item value\n */\n QuestionImagePickerModel.prototype.isItemSelected = function (item) {\n var val = this.value;\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isValueEmpty(val))\n return false;\n if (!this.multiSelect)\n return __WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(val, item.value);\n if (!Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isTwoValueEquals(val[i], item.value))\n return true;\n }\n return false;\n };\n QuestionImagePickerModel.prototype.clearIncorrectValues = function () {\n if (this.multiSelect) {\n var val = this.value;\n if (!val)\n return;\n if (!Array.isArray(val) || val.length == 0) {\n this.clearValue();\n return;\n }\n var newValue = [];\n for (var i = 0; i < val.length; i++) {\n if (!this.hasUnknownValue(val[i], true)) {\n newValue.push(val[i]);\n }\n }\n if (newValue.length == val.length)\n return;\n if (newValue.length == 0) {\n this.clearValue();\n }\n else {\n this.value = newValue;\n }\n }\n else {\n _super.prototype.clearIncorrectValues.call(this);\n }\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"showLabel\", {\n /**\n * Show label under the image.\n */\n get: function () {\n return this.getPropertyValue(\"showLabel\", false);\n },\n set: function (newValue) {\n this.setPropertyValue(\"showLabel\", newValue);\n },\n enumerable: true,\n configurable: true\n });\n QuestionImagePickerModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.isDesignMode && this.multiSelect) {\n this.createNewArray(\"renderedValue\");\n this.createNewArray(\"value\");\n }\n };\n QuestionImagePickerModel.prototype.getValueCore = function () {\n var value = _super.prototype.getValueCore.call(this);\n if (value !== undefined) {\n return value;\n }\n if (this.multiSelect) {\n return [];\n }\n return value;\n };\n QuestionImagePickerModel.prototype.convertValToArrayForMultSelect = function (val) {\n if (!this.multiSelect)\n return val;\n if (__WEBPACK_IMPORTED_MODULE_4__helpers__[\"a\" /* Helpers */].isValueEmpty(val) || Array.isArray(val))\n return val;\n return [val];\n };\n QuestionImagePickerModel.prototype.renderedValueFromDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n QuestionImagePickerModel.prototype.rendredValueToDataCore = function (val) {\n return this.convertValToArrayForMultSelect(val);\n };\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageHeight\", {\n /**\n * The image height.\n */\n get: function () {\n return this.getPropertyValue(\"imageHeight\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageHeight\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageWidth\", {\n /**\n * The image width.\n */\n get: function () {\n return this.getPropertyValue(\"imageWidth\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"imageFit\", {\n /**\n * The image fit mode.\n */\n get: function () {\n return this.getPropertyValue(\"imageFit\");\n },\n set: function (val) {\n this.setPropertyValue(\"imageFit\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionImagePickerModel.prototype, \"contentMode\", {\n /**\n * The content mode.\n */\n get: function () {\n return this.getPropertyValue(\"contentMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"contentMode\", val);\n if (val === \"video\") {\n this.showLabel = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n return QuestionImagePickerModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__[\"a\" /* QuestionCheckboxBase */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"imageitemvalue\", [], undefined, \"itemvalue\");\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addProperty(\"imageitemvalue\", {\n name: \"imageLink\",\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"imagepicker\", [\n { name: \"hasOther\", visible: false },\n { name: \"otherText\", visible: false },\n { name: \"optionsCaption\", visible: false },\n { name: \"otherErrorText\", visible: false },\n { name: \"storeOthersAsComment\", visible: false },\n {\n name: \"contentMode\",\n default: \"image\",\n choices: [\"image\", \"video\"],\n },\n {\n name: \"imageFit\",\n default: \"contain\",\n choices: [\"none\", \"contain\", \"cover\", \"fill\"],\n },\n { name: \"imageHeight:number\", default: 150, minValue: 0 },\n { name: \"imageWidth:number\", default: 200, minValue: 0 },\n], function () {\n return new QuestionImagePickerModel(\"\");\n}, \"checkboxbase\");\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addProperty(\"imagepicker\", {\n name: \"showLabel:boolean\",\n default: false,\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addProperty(\"imagepicker\", {\n name: \"colCount:number\",\n default: 0,\n choices: [0, 1, 2, 3, 4, 5],\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addProperty(\"imagepicker\", {\n name: \"multiSelect:boolean\",\n default: false,\n});\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addProperty(\"imagepicker\", {\n name: \"choices:imageitemvalue[]\",\n});\n__WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"imagepicker\", function (name) {\n var q = new QuestionImagePickerModel(name);\n //q.choices = QuestionFactory.DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n/* 189 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__martixBase__ = __webpack_require__(79);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__localizablestring__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__question_dropdown__ = __webpack_require__(82);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return MartrixCells; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return QuestionMatrixModel; });\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixRowModel = /** @class */ (function () {\n function MatrixRowModel(item, fullName, data, value) {\n this.fullName = fullName;\n this.item = item;\n this.data = data;\n this.rowValue = value;\n }\n Object.defineProperty(MatrixRowModel.prototype, \"name\", {\n get: function () {\n return this.item.value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixRowModel.prototype, \"value\", {\n get: function () {\n return this.rowValue;\n },\n set: function (newValue) {\n this.rowValue = newValue;\n if (this.data)\n this.data.onMatrixRowChanged(this);\n this.onValueChanged();\n },\n enumerable: true,\n configurable: true\n });\n MatrixRowModel.prototype.onValueChanged = function () { };\n return MatrixRowModel;\n}());\n\nvar MartrixCells = /** @class */ (function () {\n function MartrixCells(cellsOwner) {\n this.cellsOwner = cellsOwner;\n this.values = {};\n }\n Object.defineProperty(MartrixCells.prototype, \"isEmpty\", {\n get: function () {\n return Object.keys(this.values).length == 0;\n },\n enumerable: true,\n configurable: true\n });\n MartrixCells.prototype.setCellText = function (row, column, val) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return;\n if (val) {\n if (!this.values[row])\n this.values[row] = {};\n if (!this.values[row][column])\n this.values[row][column] = this.createString();\n this.values[row][column].text = val;\n }\n else {\n if (this.values[row] && this.values[row][column]) {\n var loc = this.values[row][column];\n loc.text = \"\";\n if (loc.isEmpty) {\n delete this.values[row][column];\n if (Object.keys(this.values[row]).length == 0) {\n delete this.values[row];\n }\n }\n }\n }\n };\n MartrixCells.prototype.setDefaultCellText = function (column, val) {\n this.setCellText(__WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].matrixDefaultRowName, column, val);\n };\n MartrixCells.prototype.getCellLocText = function (row, column) {\n row = this.getCellRowColumnValue(row, this.rows);\n column = this.getCellRowColumnValue(column, this.columns);\n if (!row || !column)\n return null;\n if (!this.values[row])\n return null;\n if (!this.values[row][column])\n return null;\n return this.values[row][column];\n };\n MartrixCells.prototype.getDefaultCellLocText = function (column, val) {\n return this.getCellLocText(__WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].matrixDefaultRowName, column);\n };\n MartrixCells.prototype.getCellDisplayLocText = function (row, column) {\n var cellText = this.getCellLocText(row, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n cellText = this.getCellLocText(__WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].matrixDefaultRowName, column);\n if (cellText && !cellText.isEmpty)\n return cellText;\n if (typeof column == \"number\") {\n column =\n column >= 0 && column < this.columns.length\n ? this.columns[column]\n : null;\n }\n if (column && column.locText)\n return column.locText;\n return null;\n };\n MartrixCells.prototype.getCellText = function (row, column) {\n var loc = this.getCellLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n MartrixCells.prototype.getDefaultCellText = function (column) {\n var loc = this.getCellLocText(__WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].matrixDefaultRowName, column);\n return loc ? loc.calculatedText : null;\n };\n MartrixCells.prototype.getCellDisplayText = function (row, column) {\n var loc = this.getCellDisplayLocText(row, column);\n return loc ? loc.calculatedText : null;\n };\n Object.defineProperty(MartrixCells.prototype, \"rows\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getRows() : [];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MartrixCells.prototype, \"columns\", {\n get: function () {\n return this.cellsOwner ? this.cellsOwner.getColumns() : [];\n },\n enumerable: true,\n configurable: true\n });\n MartrixCells.prototype.getCellRowColumnValue = function (val, values) {\n if (typeof val == \"number\") {\n if (val < 0 || val >= values.length)\n return null;\n val = values[val].value;\n }\n if (val.value)\n return val.value;\n return val;\n };\n MartrixCells.prototype.getJson = function () {\n if (this.isEmpty)\n return null;\n var res = {};\n for (var row in this.values) {\n var resRow = {};\n var rowValues = this.values[row];\n for (var col in rowValues) {\n resRow[col] = rowValues[col].getJson();\n }\n res[row] = resRow;\n }\n return res;\n };\n MartrixCells.prototype.setJson = function (value) {\n this.values = {};\n if (!value)\n return;\n for (var row in value) {\n if (row == \"pos\")\n continue;\n var rowValues = value[row];\n this.values[row] = {};\n for (var col in rowValues) {\n if (col == \"pos\")\n continue;\n var loc = this.createString();\n loc.setJson(rowValues[col]);\n this.values[row][col] = loc;\n }\n }\n };\n MartrixCells.prototype.createString = function () {\n return new __WEBPACK_IMPORTED_MODULE_8__localizablestring__[\"a\" /* LocalizableString */](this.cellsOwner, true);\n };\n return MartrixCells;\n}());\n\n/**\n * A Model for a simple matrix question.\n */\nvar QuestionMatrixModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixModel, _super);\n function QuestionMatrixModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.isRowChanging = false;\n _this.emptyLocalizableString = new __WEBPACK_IMPORTED_MODULE_8__localizablestring__[\"a\" /* LocalizableString */](_this);\n _this.cellsValue = new MartrixCells(_this);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"columns\", function () {\n self.onColumnsChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n if (!self.filterItems()) {\n self.onRowsChanged();\n }\n });\n _this.registerFunctionOnPropertyValueChanged(\"hideIfRowsEmpty\", function () {\n self.updateVisibilityBasedOnRows();\n });\n return _this;\n }\n QuestionMatrixModel.prototype.getType = function () {\n return \"matrix\";\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"isAllRowRequired\", {\n /**\n * Set this property to true, if you want a user to answer all rows.\n */\n get: function () {\n return this.getPropertyValue(\"isAllRowRequired\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isAllRowRequired\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasRows\", {\n /**\n * Returns true, if there is at least one row.\n */\n get: function () {\n return this.rows.length > 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"rowsOrder\", {\n /**\n * Use this property to render items in a specific order: \"random\" or \"initial\". Default is \"initial\".\n */\n get: function () {\n return this.getPropertyValue(\"rowsOrder\");\n },\n set: function (val) {\n val = val.toLowerCase();\n if (val == this.rowsOrder)\n return;\n this.setPropertyValue(\"rowsOrder\", val);\n this.onRowsChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hideIfRowsEmpty\", {\n /**\n * Set this property to true to hide the question if there is no visible rows in the matrix.\n */\n get: function () {\n return this.getPropertyValue(\"hideIfRowsEmpty\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"hideIfRowsEmpty\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixModel.prototype.getRows = function () {\n return this.rows;\n };\n QuestionMatrixModel.prototype.getColumns = function () {\n return this.visibleColumns;\n };\n QuestionMatrixModel.prototype.getQuizQuestionCount = function () {\n var res = 0;\n for (var i = 0; i < this.rows.length; i++) {\n if (!this.isValueEmpty(this.correctAnswer[this.rows[i].value]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getCorrectAnswerCount = function () {\n var res = 0;\n var value = this.value;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i].value;\n if (!__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(value[row]) &&\n __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isTwoValueEquals(this.correctAnswer[row], value[row]))\n res++;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getVisibleRows = function () {\n var result = new Array();\n var val = this.value;\n if (!val)\n val = {};\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (this.isValueEmpty(row.value))\n continue;\n result.push(this.createMatrixRow(row, this.id + \"_\" + row.value.toString().replace(/\\s/g, \"_\"), val[row.value]));\n }\n if (result.length == 0 && !this.filteredRows) {\n result.push(this.createMatrixRow(new __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */](null), this.name.replace(/\\s/g, \"_\"), val));\n }\n this.generatedVisibleRows = result;\n return result;\n };\n QuestionMatrixModel.prototype.sortVisibleRows = function (array) {\n var order = this.rowsOrder.toLowerCase();\n if (order === \"random\")\n return __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].randomizeArray(array);\n return array;\n };\n QuestionMatrixModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.rows = this.sortVisibleRows(this.rows);\n this.updateVisibilityBasedOnRows();\n };\n QuestionMatrixModel.prototype.processRowsOnSet = function (newRows) {\n return this.sortVisibleRows(newRows);\n };\n Object.defineProperty(QuestionMatrixModel.prototype, \"visibleRows\", {\n /**\n * Returns the list of visible rows as model objects.\n * @see rowsVisibleIf\n */\n get: function () {\n return this.getVisibleRows();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"cells\", {\n get: function () {\n return this.cellsValue;\n },\n set: function (value) {\n this.cells.setJson(value && value.getJson ? value.getJson() : null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixModel.prototype, \"hasCellText\", {\n get: function () {\n return !this.cells.isEmpty;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixModel.prototype.setCellText = function (row, column, val) {\n this.cells.setCellText(row, column, val);\n };\n QuestionMatrixModel.prototype.getCellText = function (row, column) {\n return this.cells.getCellText(row, column);\n };\n QuestionMatrixModel.prototype.setDefaultCellText = function (column, val) {\n this.cells.setDefaultCellText(column, val);\n };\n QuestionMatrixModel.prototype.getDefaultCellText = function (column) {\n return this.cells.getDefaultCellText(column);\n };\n QuestionMatrixModel.prototype.getCellDisplayText = function (row, column) {\n return this.cells.getCellDisplayText(row, column);\n };\n QuestionMatrixModel.prototype.getCellDisplayLocText = function (row, column) {\n var loc = this.cells.getCellDisplayLocText(row, column);\n return loc ? loc : this.emptyLocalizableString;\n };\n QuestionMatrixModel.prototype.supportGoNextPageAutomatic = function () {\n return this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if ((!isOnValueChanged || this.errors.length > 0) &&\n this.hasErrorInRows()) {\n errors.push(new __WEBPACK_IMPORTED_MODULE_6__error__[\"i\" /* RequiredInAllRowsError */](null, this));\n }\n };\n QuestionMatrixModel.prototype.hasErrorInRows = function () {\n if (!this.isAllRowRequired)\n return false;\n return !this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.hasValuesInAllRows = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (!rows)\n return true;\n for (var i = 0; i < rows.length; i++) {\n var val = rows[i].value;\n if (!val)\n return false;\n }\n return true;\n };\n QuestionMatrixModel.prototype.getIsAnswered = function () {\n return _super.prototype.getIsAnswered.call(this) && this.hasValuesInAllRows();\n };\n QuestionMatrixModel.prototype.createMatrixRow = function (item, fullName, value) {\n return new MatrixRowModel(item, fullName, this, value);\n };\n QuestionMatrixModel.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, this.isRowChanging);\n if (this.isRowChanging ||\n !this.generatedVisibleRows ||\n this.generatedVisibleRows.length == 0)\n return;\n this.isRowChanging = true;\n var val = this.value;\n if (!val)\n val = {};\n if (this.rows.length == 0) {\n this.generatedVisibleRows[0].value = val;\n }\n else {\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n var row = this.generatedVisibleRows[i];\n var rowVal = val[row.name] ? val[row.name] : null;\n this.generatedVisibleRows[i].value = rowVal;\n }\n }\n this.updateIsAnswered();\n this.isRowChanging = false;\n };\n QuestionMatrixModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = {};\n for (var key in value) {\n var newKey = keysAsText\n ? __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(this.rows, key)\n : key;\n if (!newKey)\n newKey = key;\n var newValue = __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(this.columns, value[key]);\n if (!newValue)\n newValue = value[key];\n res[newKey] = newValue;\n }\n return res;\n };\n QuestionMatrixModel.prototype.getPlainData = function (options) {\n var _this = this;\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n var values = this.createValueCopy();\n questionPlainData.isNode = true;\n questionPlainData.data = Object.keys(values || {}).map(function (rowName) {\n var row = _this.rows.filter(function (r) { return r.value === rowName; })[0];\n var rowDataItem = {\n name: rowName,\n title: !!row ? row.text : \"row\",\n value: values[rowName],\n displayValue: __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(_this.visibleColumns, values[rowName]),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: false,\n };\n var item = __WEBPACK_IMPORTED_MODULE_2__itemvalue__[\"a\" /* ItemValue */].getItemByValue(_this.visibleColumns, values[rowName]);\n if (!!item) {\n (options.calculations || []).forEach(function (calculation) {\n rowDataItem[calculation.propertyName] =\n item[calculation.propertyName];\n });\n }\n return rowDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionMatrixModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!!row.value) {\n objects.push({\n name: this.getValueName() + \".\" + row.value,\n text: this.processedTitle + \".\" + row.calculatedText,\n question: this,\n });\n }\n }\n };\n QuestionMatrixModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var question = new __WEBPACK_IMPORTED_MODULE_9__question_dropdown__[\"a\" /* QuestionDropdownModel */](path);\n question.choices = this.columns;\n var json = new __WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(question);\n json[\"type\"] = question.getType();\n return json;\n };\n QuestionMatrixModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n if (this.hasRows) {\n this.clearInvisibleValuesInRows();\n }\n };\n QuestionMatrixModel.prototype.getFirstInputElementId = function () {\n var rows = this.generatedVisibleRows;\n if (!rows)\n rows = this.visibleRows;\n if (rows.length > 0 && this.visibleColumns.length > 0) {\n return this.inputId + \"_\" + rows[0].name + \"_\" + 0;\n }\n return _super.prototype.getFirstInputElementId.call(this);\n };\n QuestionMatrixModel.prototype.onRowsChanged = function () {\n this.updateVisibilityBasedOnRows();\n _super.prototype.onRowsChanged.call(this);\n };\n QuestionMatrixModel.prototype.updateVisibilityBasedOnRows = function () {\n if (this.hideIfRowsEmpty) {\n this.visible =\n this.rows.length > 0 &&\n (!this.filteredRows || this.filteredRows.length > 0);\n }\n };\n //IMatrixData\n QuestionMatrixModel.prototype.onMatrixRowChanged = function (row) {\n if (this.isRowChanging)\n return;\n this.isRowChanging = true;\n if (!this.hasRows) {\n this.setNewValue(row.value);\n }\n else {\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[row.name] = row.value;\n this.setNewValue(newValue);\n }\n this.isRowChanging = false;\n };\n return QuestionMatrixModel;\n}(__WEBPACK_IMPORTED_MODULE_3__martixBase__[\"a\" /* QuestionMatrixBaseModel */]));\n\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"matrix\", [\n {\n name: \"columns:itemvalue[]\",\n baseValue: function () {\n return __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"matrix_column\");\n },\n },\n {\n name: \"rows:itemvalue[]\",\n baseValue: function () {\n return __WEBPACK_IMPORTED_MODULE_5__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"matrix_row\");\n },\n },\n { name: \"cells:cells\", serializationProperty: \"cells\" },\n {\n name: \"rowsOrder\",\n default: \"initial\",\n choices: [\"initial\", \"random\"],\n },\n \"isAllRowRequired:boolean\",\n \"hideIfRowsEmpty:boolean\",\n], function () {\n return new QuestionMatrixModel(\"\");\n}, \"matrixbase\");\n__WEBPACK_IMPORTED_MODULE_7__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"matrix\", function (name) {\n var q = new QuestionMatrixModel(name);\n q.rows = __WEBPACK_IMPORTED_MODULE_7__questionfactory__[\"a\" /* QuestionFactory */].DefaultRows;\n q.columns = __WEBPACK_IMPORTED_MODULE_7__questionfactory__[\"a\" /* QuestionFactory */].DefaultColums;\n return q;\n});\n\n\n/***/ }),\n/* 190 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixDropdownRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionMatrixDropdownModel; });\n\n\n\n\n\nvar MatrixDropdownRowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDropdownRowModel, _super);\n function MatrixDropdownRowModel(name, item, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.name = name;\n _this.item = item;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"rowName\", {\n get: function () {\n return this.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"text\", {\n get: function () {\n return this.item.text;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MatrixDropdownRowModel.prototype, \"locText\", {\n get: function () {\n return this.item.locText;\n },\n enumerable: true,\n configurable: true\n });\n return MatrixDropdownRowModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"d\" /* MatrixDropdownRowModelBase */]));\n\n/**\n * A Model for a matrix dropdown question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n */\nvar QuestionMatrixDropdownModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixDropdownModel, _super);\n function QuestionMatrixDropdownModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createLocalizableString(\"totalText\", _this, true);\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rows\", function () {\n self.generatedVisibleRows = null;\n self.resetRenderedTable();\n self.filterItems();\n });\n return _this;\n }\n QuestionMatrixDropdownModel.prototype.getType = function () {\n return \"matrixdropdown\";\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"totalText\", {\n /**\n * Set this property to show it on the first column for the total row.\n */\n get: function () {\n return this.getLocalizableStringText(\"totalText\", \"\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"totalText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"locTotalText\", {\n get: function () {\n return this.getLocalizableString(\"totalText\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getFooterText = function () {\n return this.locTotalText;\n };\n Object.defineProperty(QuestionMatrixDropdownModel.prototype, \"rowTitleWidth\", {\n /**\n * The column width for the first column, row title column.\n */\n get: function () {\n return this.getPropertyValue(\"rowTitleWidth\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowTitleWidth\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDropdownModel.prototype.getRowTitleWidth = function () {\n return this.rowTitleWidth;\n };\n QuestionMatrixDropdownModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var values = this.createValueCopy();\n if (!values)\n return values;\n var rows = this.visibleRows;\n var res = {};\n for (var i = 0; i < rows.length; i++) {\n var rowValue = this.rows[i].value;\n var val = values[rowValue];\n if (!val)\n continue;\n if (keysAsText) {\n var displayRowValue = __WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(this.rows, rowValue);\n if (!!displayRowValue) {\n rowValue = displayRowValue;\n }\n }\n res[rowValue] = this.getRowDisplayValue(rows[i], val);\n }\n return values;\n };\n QuestionMatrixDropdownModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[i];\n if (!row.value)\n continue;\n var prefixName = this.getValueName() + \".\" + row.value + \".\";\n var prefixTitle = this.processedTitle + \".\" + row.calculatedText + \".\";\n for (var j = 0; j < this.columns.length; j++) {\n var column = this.columns[j];\n objects.push({\n name: prefixName + column.name,\n text: prefixTitle + column.fullTitle,\n question: this,\n });\n }\n }\n if (hasContext) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column == context)\n continue;\n objects.push({\n name: \"row.\" + column.name,\n text: \"row.\" + column.fullTitle,\n question: this,\n });\n }\n }\n };\n QuestionMatrixDropdownModel.prototype.clearIncorrectValues = function () {\n var val = this.value;\n if (!val)\n return;\n var newVal = null;\n var isChanged = false;\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n for (var key in val) {\n if (__WEBPACK_IMPORTED_MODULE_3__itemvalue__[\"a\" /* ItemValue */].getItemByValue(rows, key)) {\n if (newVal == null)\n newVal = {};\n newVal[key] = val[key];\n }\n else {\n isChanged = true;\n }\n }\n if (isChanged) {\n this.value = newVal;\n }\n _super.prototype.clearIncorrectValues.call(this);\n };\n QuestionMatrixDropdownModel.prototype.clearValueIfInvisible = function () {\n _super.prototype.clearValueIfInvisible.call(this);\n this.clearInvisibleValuesInRows();\n };\n QuestionMatrixDropdownModel.prototype.generateRows = function () {\n var result = new Array();\n var rows = !!this.filteredRows ? this.filteredRows : this.rows;\n if (!rows || rows.length === 0)\n return result;\n var val = this.value;\n if (!val)\n val = {};\n for (var i = 0; i < rows.length; i++) {\n if (!rows[i].value)\n continue;\n result.push(this.createMatrixRow(rows[i], val[rows[i].value]));\n }\n return result;\n };\n QuestionMatrixDropdownModel.prototype.createMatrixRow = function (item, value) {\n return new MatrixDropdownRowModel(item.value, item, this, value);\n };\n return QuestionMatrixDropdownModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"e\" /* QuestionMatrixDropdownModelBase */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"matrixdropdown\", [\n {\n name: \"rows:itemvalue[]\",\n },\n \"rowsVisibleIf:condition\",\n \"rowTitleWidth\",\n { name: \"totalText\", serializationProperty: \"locTotalText\" },\n], function () {\n return new QuestionMatrixDropdownModel(\"\");\n}, \"matrixdropdownbase\");\n__WEBPACK_IMPORTED_MODULE_4__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"matrixdropdown\", function (name) {\n var q = new QuestionMatrixDropdownModel(name);\n q.choices = [1, 2, 3, 4, 5];\n q.rows = __WEBPACK_IMPORTED_MODULE_4__questionfactory__[\"a\" /* QuestionFactory */].DefaultColums;\n __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"e\" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n/* 191 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__ = __webpack_require__(24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__settings__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils_utils__ = __webpack_require__(28);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MatrixDynamicRowModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionMatrixDynamicModel; });\n\n\n\n\n\n\n\n\n\nvar MatrixDynamicRowModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MatrixDynamicRowModel, _super);\n function MatrixDynamicRowModel(index, data, value) {\n var _this = _super.call(this, data, value) || this;\n _this.index = index;\n _this.buildCells(value);\n return _this;\n }\n Object.defineProperty(MatrixDynamicRowModel.prototype, \"rowName\", {\n get: function () {\n return this.id;\n },\n enumerable: true,\n configurable: true\n });\n return MatrixDynamicRowModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"d\" /* MatrixDropdownRowModelBase */]));\n\n/**\n * A Model for a matrix dymanic question. You may use a dropdown, checkbox, radiogroup, text and comment questions as a cell editors.\n * An end-user may dynamically add/remove rows, unlike in matrix dropdown question.\n */\nvar QuestionMatrixDynamicModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMatrixDynamicModel, _super);\n function QuestionMatrixDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.rowCounter = 0;\n _this.rowCountValue = 2;\n _this.initialRowCount = 2;\n _this.setRowCountValueFromData = false;\n _this.createLocalizableString(\"confirmDeleteText\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.createLocalizableString(\"addRowText\", _this);\n _this.createLocalizableString(\"removeRowText\", _this);\n return _this;\n }\n QuestionMatrixDynamicModel.prototype.getType = function () {\n return \"matrixdynamic\";\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isRowsDynamic\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a row\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a column name and the library shows duplication error, if there are same values in different rows in the column.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultRowValue\", {\n /**\n * If it is not empty, then this value is set to every new row, including rows created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultRowValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultRowValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"defaultValueFromLastRow\", {\n /**\n * Set it to true to copy the value into new added row from the last row. If defaultRowValue is set and this property equals to true,\n * then the value for new added row is merging.\n * @see defaultValue\n * @see defaultRowValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastRow\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastRow\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultRowValue));\n };\n QuestionMatrixDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultRowValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.rowCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.rowCount; i++) {\n newValue.push(this.defaultRowValue);\n }\n this.value = newValue;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCount\", {\n /**\n * The number of rows in the matrix.\n * @see minRowCount\n * @see maxRowCount\n */\n get: function () {\n return this.rowCountValue;\n },\n set: function (val) {\n if (val < 0 || val > __WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].matrixMaximumRowCount)\n return;\n this.setRowCountValueFromData = false;\n var prevValue = this.rowCountValue;\n this.rowCountValue = val;\n if (this.value && this.value.length > val) {\n var qVal = this.value;\n qVal.splice(val);\n this.value = qVal;\n }\n if (this.isLoadingFromJson) {\n this.initialRowCount = val;\n return;\n }\n if (this.generatedVisibleRows) {\n this.generatedVisibleRows.splice(val);\n for (var i = prevValue; i < val; i++) {\n var newRow = this.createMatrixRow(null);\n this.generatedVisibleRows.push(newRow);\n this.onMatrixRowCreated(newRow);\n }\n }\n this.onRowsChanged();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"minRowCount\", {\n /**\n * The minimum row count. A user could not delete a row if the rowCount equals to minRowCount\n * @see rowCount\n * @see maxRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"minRowCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n this.setPropertyValue(\"minRowCount\", val);\n if (val > this.maxRowCount)\n this.maxRowCount = val;\n if (this.rowCount < val)\n this.rowCount = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"maxRowCount\", {\n /**\n * The maximum row count. A user could not add a row if the rowCount equals to maxRowCount\n * @see rowCount\n * @see minRowCount\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"maxRowCount\", __WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].matrixMaximumRowCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > __WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].matrixMaximumRowCount)\n val = __WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].matrixMaximumRowCount;\n if (val == this.maxRowCount)\n return;\n this.setPropertyValue(\"maxRowCount\", val);\n if (val < this.minRowCount)\n this.minRowCount = val;\n if (this.rowCount > val)\n this.rowCount = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowAddRows\", {\n /**\n * Set this property to false to disable ability to add new rows. \"Add new Row\" button becomes invsible in UI\n * @see canAddRow\n * @see allowRemoveRows\n */\n get: function () {\n return this.getPropertyValue(\"allowAddRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddRows\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"allowRemoveRows\", {\n /**\n * Set this property to false to disable ability to remove rows. \"Remove\" row buttons become invsible in UI\n * @see canRemoveRows\n * @see allowAddRows\n */\n get: function () {\n return this.getPropertyValue(\"allowRemoveRows\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemoveRows\", val);\n if (!this.isLoadingFromJson) {\n this.resetRenderedTable();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canAddRow\", {\n /**\n * Returns true, if a new row can be added.\n * @see allowAddRows\n * @see maxRowCount\n * @see canRemoveRows\n * @see rowCount\n */\n get: function () {\n return (this.allowAddRows && !this.isReadOnly && this.rowCount < this.maxRowCount);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"canRemoveRows\", {\n /**\n * Returns true, if row can be removed.\n * @see minRowCount\n * @see canAddRow\n * @see rowCount\n */\n get: function () {\n return (this.allowRemoveRows &&\n !this.isReadOnly &&\n this.rowCount > this.minRowCount);\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.canRemoveRow = function (row) {\n if (!this.survey)\n return true;\n return this.survey.matrixAllowRemoveRow(this, row.index, row);\n };\n /**\n * Creates and add a new row.\n */\n QuestionMatrixDynamicModel.prototype.addRow = function () {\n var options = { question: this, canAddRow: this.canAddRow };\n if (!!this.survey) {\n this.survey.matrixBeforeRowAdded(options);\n }\n if (!options.canAddRow)\n return;\n this.onStartRowAddingRemoving();\n this.addRowCore();\n this.onEndRowAdding();\n };\n QuestionMatrixDynamicModel.prototype.hasRowsAsItems = function () {\n return false;\n };\n QuestionMatrixDynamicModel.prototype.addRowCore = function () {\n var prevRowCount = this.rowCount;\n this.rowCount = this.rowCount + 1;\n var defaultValue = this.getDefaultRowValue(true);\n var newValue = null;\n if (!this.isValueEmpty(defaultValue)) {\n newValue = this.createNewValue();\n if (newValue.length == this.rowCount) {\n newValue[newValue.length - 1] = defaultValue;\n this.value = newValue;\n }\n }\n if (this.data) {\n this.runCellsCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n var row = this.visibleRows[this.rowCount - 1];\n if (!__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(row.value)) {\n if (!newValue) {\n newValue = this.createNewValue();\n }\n if (!__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isTwoValueEquals(newValue[newValue.length - 1], row.value)) {\n newValue[newValue.length - 1] = row.value;\n this.value = newValue;\n }\n }\n }\n if (this.survey) {\n if (prevRowCount + 1 == this.rowCount) {\n this.survey.matrixRowAdded(this, this.visibleRows[this.visibleRows.length - 1]);\n this.onRowsChanged();\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.getDefaultRowValue = function (isRowAdded) {\n var res = null;\n for (var i = 0; i < this.columns.length; i++) {\n var q = this.columns[i].templateQuestion;\n if (!!q && !this.isValueEmpty(q.getDefaultValue())) {\n res = res || {};\n res[this.columns[i].name] = q.getDefaultValue();\n }\n }\n if (!this.isValueEmpty(this.defaultRowValue)) {\n for (var key in this.defaultRowValue) {\n res = res || {};\n res[key] = this.defaultRowValue[key];\n }\n }\n if (isRowAdded && this.defaultValueFromLastRow) {\n var val = this.value;\n if (!!val && Array.isArray(val) && val.length >= this.rowCount - 1) {\n var rowValue = val[this.rowCount - 2];\n for (var key in rowValue) {\n res = res || {};\n res[key] = rowValue[key];\n }\n }\n }\n return res;\n };\n /**\n * Removes a row by it's index. If confirmDelete is true, show a confirmation dialog\n * @param index a row index, from 0 to rowCount - 1\n * @see removeRow\n * @see confirmDelete\n */\n QuestionMatrixDynamicModel.prototype.removeRowUI = function (value) {\n if (!!value && !!value.rowName) {\n var index = this.visibleRows.indexOf(value);\n if (index < 0)\n return;\n value = index;\n }\n if (!this.isRequireConfirmOnRowDelete(value) ||\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__utils_utils__[\"a\" /* confirmAction */])(this.confirmDeleteText)) {\n this.removeRow(value);\n }\n };\n QuestionMatrixDynamicModel.prototype.isRequireConfirmOnRowDelete = function (index) {\n if (!this.confirmDelete)\n return false;\n if (index < 0 || index >= this.rowCount)\n return false;\n var value = this.createNewValue();\n if (__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(value) || !Array.isArray(value))\n return false;\n if (index >= value.length)\n return false;\n return !__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(value[index]);\n };\n /**\n * Removes a row by it's index.\n * @param index a row index, from 0 to rowCount - 1\n */\n QuestionMatrixDynamicModel.prototype.removeRow = function (index) {\n if (!this.canRemoveRows)\n return;\n if (index < 0 || index >= this.rowCount)\n return;\n this.onStartRowAddingRemoving();\n this.removeRowCore(index);\n this.onEndRowRemoving(index);\n };\n QuestionMatrixDynamicModel.prototype.removeRowCore = function (index) {\n if (this.survey) {\n var row = this.generatedVisibleRows\n ? this.generatedVisibleRows[index]\n : null;\n this.survey.matrixRowRemoved(this, index, row);\n }\n if (this.generatedVisibleRows && index < this.generatedVisibleRows.length) {\n this.generatedVisibleRows.splice(index, 1);\n }\n this.rowCountValue--;\n if (this.value) {\n var val = [];\n if (Array.isArray(this.value) && index < this.value.length) {\n val = this.createValueCopy();\n }\n else {\n val = this.createNewValue();\n }\n val.splice(index, 1);\n val = this.deleteRowValue(val, null);\n this.isRowChanging = true;\n this.value = val;\n this.isRowChanging = false;\n }\n this.onRowsChanged();\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a row.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see keyName\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowText\", {\n /**\n * Use this property to change the default value of add row button text.\n */\n get: function () {\n var defaultLocName = this.isColumnLayoutHorizontal ? \"addRow\" : \"addColumn\";\n return this.getLocalizableStringText(\"addRowText\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(defaultLocName));\n },\n set: function (val) {\n this.setLocalizableStringText(\"addRowText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locAddRowText\", {\n get: function () {\n return this.getLocalizableString(\"addRowText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"addRowLocation\", {\n /**\n * By default the 'Add Row' button is shown on bottom if columnLayout is horizontal and on top if columnLayout is vertical.
\n * You may set it to \"top\", \"bottom\" or \"topBottom\" (to show on top and bottom).\n * @see columnLayout\n */\n get: function () {\n return this.getPropertyValue(\"addRowLocation\");\n },\n set: function (val) {\n this.setPropertyValue(\"addRowLocation\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isAddRowOnTop\", {\n get: function () {\n if (!this.canAddRow)\n return false;\n if (this.addRowLocation === \"default\")\n return this.columnLayout === \"vertical\";\n return this.addRowLocation !== \"bottom\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"isAddRowOnBottom\", {\n get: function () {\n if (!this.canAddRow)\n return false;\n if (this.addRowLocation === \"default\")\n return this.columnLayout === \"horizontal\";\n return this.addRowLocation !== \"top\";\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"removeRowText\", {\n /**\n * Use this property to change the default value of remove row button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"removeRowText\", __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"removeRow\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"removeRowText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"locRemoveRowText\", {\n get: function () {\n return this.getLocalizableString(\"removeRowText\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var values = this.createValueCopy();\n if (!values || !Array.isArray(values))\n return values;\n var rows = this.visibleRows;\n for (var i = 0; i < rows.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getRowDisplayValue(rows[i], val);\n }\n return values;\n };\n QuestionMatrixDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context ? this.columns.indexOf(context) > -1 : false;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n objects.push({\n name: this.getValueName() + \"[0].\" + column.name,\n text: this.processedTitle + \"[0].\" + column.fullTitle,\n question: this,\n });\n if (hasContext && column != context) {\n objects.push({\n name: \"row.\" + column.name,\n text: \"row.\" + column.fullTitle,\n question: this,\n });\n }\n }\n };\n QuestionMatrixDynamicModel.prototype.supportGoNextPageAutomatic = function () {\n return false;\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"hasRowText\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMatrixDynamicModel.prototype.onCheckForErrors = function (errors, isOnValueChanged) {\n _super.prototype.onCheckForErrors.call(this, errors, isOnValueChanged);\n if (!isOnValueChanged && this.hasErrorInRows()) {\n errors.push(new __WEBPACK_IMPORTED_MODULE_5__error__[\"j\" /* MinRowCountError */](this.minRowCount, this));\n }\n };\n QuestionMatrixDynamicModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var prevValue = _super.prototype.hasErrors.call(this, fireCallback, rec);\n var isDuplicated = this.isValueDuplicated();\n return isDuplicated || prevValue;\n };\n QuestionMatrixDynamicModel.prototype.hasErrorInRows = function () {\n if (this.minRowCount <= 0 || !this.generatedVisibleRows)\n return false;\n var res = false;\n var setRowCount = 0;\n for (var rowIndex = 0; rowIndex < this.generatedVisibleRows.length; rowIndex++) {\n var row = this.generatedVisibleRows[rowIndex];\n if (!row.isEmpty)\n setRowCount++;\n }\n return setRowCount < this.minRowCount;\n };\n QuestionMatrixDynamicModel.prototype.isValueDuplicated = function () {\n if (!this.keyName || !this.generatedVisibleRows)\n return false;\n var column = this.getColumnByName(this.keyName);\n if (!column)\n return false;\n var keyValues = [];\n var res = false;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n res =\n this.isValueDuplicatedInRow(this.generatedVisibleRows[i], column, keyValues) || res;\n }\n return res;\n };\n QuestionMatrixDynamicModel.prototype.isValueDuplicatedInRow = function (row, column, keyValues) {\n var question = row.getQuestionByColumn(column);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n question.addError(new __WEBPACK_IMPORTED_MODULE_5__error__[\"f\" /* KeyDuplicationError */](this.keyDuplicationError, this));\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionMatrixDynamicModel.prototype.generateRows = function () {\n var result = new Array();\n if (this.rowCount === 0)\n return result;\n var val = this.createNewValue();\n for (var i = 0; i < this.rowCount; i++) {\n result.push(this.createMatrixRow(this.getRowValueByIndex(val, i)));\n }\n if (!this.isValueEmpty(this.getDefaultRowValue(false))) {\n this.value = val;\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.createMatrixRow = function (value) {\n return new MatrixDynamicRowModel(this.rowCounter++, this, value);\n };\n QuestionMatrixDynamicModel.prototype.onBeforeValueChanged = function (val) {\n if (!val || !Array.isArray(val))\n return;\n var newRowCount = val.length;\n if (newRowCount == this.rowCount)\n return;\n if (!this.setRowCountValueFromData && newRowCount < this.initialRowCount)\n return;\n this.setRowCountValueFromData = true;\n this.rowCountValue = newRowCount;\n if (this.generatedVisibleRows) {\n this.generatedVisibleRows = null;\n this.generatedVisibleRows = this.visibleRows;\n this.onRowsChanged();\n }\n };\n QuestionMatrixDynamicModel.prototype.createNewValue = function () {\n var result = this.createValueCopy();\n if (!result || !Array.isArray(result))\n result = [];\n if (result.length > this.rowCount)\n result.splice(this.rowCount);\n var rowValue = this.getDefaultRowValue(false);\n rowValue = rowValue || {};\n for (var i = result.length; i < this.rowCount; i++) {\n result.push(__WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].getUnbindValue(rowValue));\n }\n return result;\n };\n QuestionMatrixDynamicModel.prototype.deleteRowValue = function (newValue, row) {\n var isEmpty = true;\n for (var i = 0; i < newValue.length; i++) {\n if (this.isObject(newValue[i]) && Object.keys(newValue[i]).length > 0) {\n isEmpty = false;\n break;\n }\n }\n return isEmpty ? null : newValue;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueByIndex = function (questionValue, index) {\n return index >= 0 && index < questionValue.length\n ? questionValue[index]\n : null;\n };\n QuestionMatrixDynamicModel.prototype.getRowValueCore = function (row, questionValue, create) {\n if (create === void 0) { create = false; }\n if (!this.generatedVisibleRows)\n return {};\n var res = this.getRowValueByIndex(questionValue, this.generatedVisibleRows.indexOf(row));\n if (!res && create)\n res = {};\n return res;\n };\n return QuestionMatrixDynamicModel;\n}(__WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"e\" /* QuestionMatrixDropdownModelBase */]));\n\n__WEBPACK_IMPORTED_MODULE_2__jsonobject__[\"c\" /* Serializer */].addClass(\"matrixdynamic\", [\n { name: \"rowsVisibleIf:condition\", visible: false },\n { name: \"allowAddRows:boolean\", default: true },\n { name: \"allowRemoveRows:boolean\", default: true },\n { name: \"rowCount:number\", default: 2, minValue: 0 },\n { name: \"minRowCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxRowCount:number\",\n default: __WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].matrixMaximumRowCount,\n },\n { name: \"keyName\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n \"defaultRowValue:rowvalue\",\n \"defaultValueFromLastRow:boolean\",\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n dependsOn: \"confirmDelete\",\n visibleIf: function (obj) {\n return !obj || obj.confirmDelete;\n },\n serializationProperty: \"locConfirmDeleteText\",\n },\n {\n name: \"addRowLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"topBottom\"],\n },\n { name: \"addRowText\", serializationProperty: \"locAddRowText\" },\n { name: \"removeRowText\", serializationProperty: \"locRemoveRowText\" },\n], function () {\n return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n__WEBPACK_IMPORTED_MODULE_3__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"matrixdynamic\", function (name) {\n var q = new QuestionMatrixDynamicModel(name);\n q.choices = [1, 2, 3, 4, 5];\n __WEBPACK_IMPORTED_MODULE_1__question_matrixdropdownbase__[\"e\" /* QuestionMatrixDropdownModelBase */].addDefaultColumns(q);\n return q;\n});\n\n\n/***/ }),\n/* 192 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_text__ = __webpack_require__(84);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__helpers__ = __webpack_require__(6);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MultipleTextItemModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionMultipleTextModel; });\n\n\n\n\n\n\n\nvar MultipleTextItemModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(MultipleTextItemModel, _super);\n function MultipleTextItemModel(name, title) {\n if (name === void 0) { name = null; }\n if (title === void 0) { title = null; }\n var _this = _super.call(this) || this;\n _this.editorValue = _this.createEditor(name);\n _this.editor.questionTitleTemplateCallback = function () {\n return \"\";\n };\n _this.editor.titleLocation = \"left\";\n if (title) {\n _this.title = title;\n }\n return _this;\n }\n MultipleTextItemModel.prototype.getType = function () {\n return \"multipletextitem\";\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"id\", {\n get: function () {\n return this.editor.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"name\", {\n /**\n * The item name.\n */\n get: function () {\n return this.editor.name;\n },\n set: function (val) {\n this.editor.name = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"question\", {\n get: function () {\n return this.data;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"editor\", {\n get: function () {\n return this.editorValue;\n },\n enumerable: true,\n configurable: true\n });\n MultipleTextItemModel.prototype.createEditor = function (name) {\n return new __WEBPACK_IMPORTED_MODULE_3__question_text__[\"a\" /* QuestionTextModel */](name);\n };\n MultipleTextItemModel.prototype.addUsedLocales = function (locales) {\n _super.prototype.addUsedLocales.call(this, locales);\n this.editor.addUsedLocales(locales);\n };\n MultipleTextItemModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.editor.locStrsChanged();\n };\n MultipleTextItemModel.prototype.setData = function (data) {\n this.data = data;\n if (!!data) {\n this.editor.defaultValue = data.getItemDefaultValue(this.name);\n this.editor.setSurveyImpl(this);\n this.editor.parent = data;\n }\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"isRequired\", {\n /**\n * Set this property to true, to make the item a required. If a user doesn't fill the item then a validation error will be generated.\n */\n get: function () {\n return this.editor.isRequired;\n },\n set: function (val) {\n this.editor.isRequired = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"inputType\", {\n /**\n * Use this property to change the default input type.\n */\n get: function () {\n return this.editor.inputType;\n },\n set: function (val) {\n this.editor.inputType = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"title\", {\n /**\n * Item title. If it is empty, the item name is rendered as title. This property supports markdown.\n * @see name\n */\n get: function () {\n return this.editor.title;\n },\n set: function (val) {\n this.editor.title = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locTitle\", {\n get: function () {\n return this.editor.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"fullTitle\", {\n /**\n * Returns the text or html for rendering the title.\n */\n get: function () {\n return this.editor.fullTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"maxLength\", {\n /**\n * The maximum text length. If it is -1, defaul value, then the survey maxTextLength property will be used.\n * If it is 0, then the value is unlimited\n * @see SurveyModel.maxTextLength\n */\n get: function () {\n return this.editor.maxLength;\n },\n set: function (val) {\n this.editor.maxLength = val;\n },\n enumerable: true,\n configurable: true\n });\n MultipleTextItemModel.prototype.getMaxLength = function () {\n var survey = this.getSurvey();\n return __WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].getMaxLength(this.maxLength, survey ? survey.maxTextLength : -1);\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"placeHolder\", {\n /**\n * The input place holder.\n */\n get: function () {\n return this.editor.placeHolder;\n },\n set: function (val) {\n this.editor.placeHolder = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.editor.locPlaceHolder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"requiredErrorText\", {\n /**\n * The custom text that will be shown on required error. Use this property, if you do not want to show the default text.\n */\n get: function () {\n return this.editor.requiredErrorText;\n },\n set: function (val) {\n this.editor.requiredErrorText = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"locRequiredErrorText\", {\n get: function () {\n return this.editor.locRequiredErrorText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MultipleTextItemModel.prototype, \"validators\", {\n /**\n * The list of question validators.\n */\n get: function () {\n return this.editor.validators;\n },\n set: function (val) {\n this.editor.validators = val;\n },\n enumerable: true,\n configurable: true\n });\n MultipleTextItemModel.prototype.getValidators = function () {\n return this.validators;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"value\", {\n /**\n * The item value.\n */\n get: function () {\n return this.data ? this.data.getMultipleTextValue(this.name) : null;\n },\n set: function (value) {\n if (this.data != null) {\n this.data.setMultipleTextValue(this.name, value);\n }\n },\n enumerable: true,\n configurable: true\n });\n MultipleTextItemModel.prototype.isEmpty = function () {\n return __WEBPACK_IMPORTED_MODULE_6__helpers__[\"a\" /* Helpers */].isValueEmpty(this.value);\n };\n MultipleTextItemModel.prototype.onValueChanged = function (newValue) {\n if (this.valueChangedCallback)\n this.valueChangedCallback(newValue);\n };\n //ISurveyImpl\n MultipleTextItemModel.prototype.geSurveyData = function () {\n return this;\n };\n MultipleTextItemModel.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n MultipleTextItemModel.prototype.getTextProcessor = function () {\n return this.data ? this.data.getTextProcessor() : null;\n };\n //ISurveyData\n MultipleTextItemModel.prototype.getValue = function (name) {\n if (!this.data)\n return null;\n return this.data.getMultipleTextValue(name);\n };\n MultipleTextItemModel.prototype.setValue = function (name, value) {\n if (this.data) {\n this.data.setMultipleTextValue(name, value);\n }\n };\n MultipleTextItemModel.prototype.getVariable = function (name) {\n return undefined;\n };\n MultipleTextItemModel.prototype.setVariable = function (name, newValue) { };\n MultipleTextItemModel.prototype.getComment = function (name) {\n return null;\n };\n MultipleTextItemModel.prototype.setComment = function (name, newValue) { };\n MultipleTextItemModel.prototype.getAllValues = function () {\n if (this.data)\n return this.data.getAllValues();\n return this.value;\n };\n MultipleTextItemModel.prototype.getFilteredValues = function () {\n return this.getAllValues();\n };\n MultipleTextItemModel.prototype.getFilteredProperties = function () {\n return { survey: this.getSurvey() };\n };\n //IValidatorOwner\n MultipleTextItemModel.prototype.getValidatorTitle = function () {\n return this.title;\n };\n Object.defineProperty(MultipleTextItemModel.prototype, \"validatedValue\", {\n get: function () {\n return this.value;\n },\n set: function (val) {\n this.value = val;\n },\n enumerable: true,\n configurable: true\n });\n MultipleTextItemModel.prototype.getDataFilteredValues = function () {\n return this.getFilteredValues();\n };\n MultipleTextItemModel.prototype.getDataFilteredProperties = function () {\n return this.getFilteredProperties();\n };\n return MultipleTextItemModel;\n}(__WEBPACK_IMPORTED_MODULE_1__base__[\"a\" /* Base */]));\n\n/**\n * A Model for a multiple text question.\n */\nvar QuestionMultipleTextModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionMultipleTextModel, _super);\n function QuestionMultipleTextModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.isMultipleItemValueChanging = false;\n var self = _this;\n _this.createNewArray(\"items\", function (item) {\n item.setData(self);\n });\n _this.registerFunctionOnPropertyValueChanged(\"items\", function () {\n self.fireCallback(self.colCountChangedCallback);\n });\n _this.registerFunctionOnPropertyValueChanged(\"colCount\", function () {\n self.fireCallback(self.colCountChangedCallback);\n });\n return _this;\n }\n QuestionMultipleTextModel.prototype.getType = function () {\n return \"multipletext\";\n };\n QuestionMultipleTextModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].setData(this);\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.onSurveyLoad = function () {\n this.editorsOnSurveyLoad();\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.colCountChangedCallback);\n };\n QuestionMultipleTextModel.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor)\n item.editor.updateValueFromSurvey(item.value);\n }\n this.updateIsAnswered();\n };\n QuestionMultipleTextModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor)\n item.editor.onSurveyValueChanged(item.value);\n }\n };\n QuestionMultipleTextModel.prototype.editorsOnSurveyLoad = function () {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.editor) {\n item.editor.onSurveyLoad();\n }\n }\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"items\", {\n /**\n * The list of input items.\n */\n get: function () {\n return this.getPropertyValue(\"items\");\n },\n set: function (val) {\n this.setPropertyValue(\"items\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Add a new text item.\n * @param name a item name\n * @param title a item title (optional)\n */\n QuestionMultipleTextModel.prototype.addItem = function (name, title) {\n if (title === void 0) { title = null; }\n var item = this.createTextItem(name, title);\n this.items.push(item);\n return item;\n };\n QuestionMultipleTextModel.prototype.getItemByName = function (name) {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].name == name)\n return this.items[i];\n }\n return null;\n };\n QuestionMultipleTextModel.prototype.addConditionObjectsByContext = function (objects, context) {\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n objects.push({\n name: this.getValueName() + \".\" + item.name,\n text: this.processedTitle + \".\" + item.fullTitle,\n question: this,\n });\n }\n };\n QuestionMultipleTextModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this);\n var item = this.getItemByName(path);\n if (!item)\n return null;\n var json = new __WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"b\" /* JsonObject */]().toJsonObject(item);\n json[\"type\"] = \"text\";\n return json;\n };\n QuestionMultipleTextModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].locStrsChanged();\n }\n };\n QuestionMultipleTextModel.prototype.supportGoNextPageAutomatic = function () {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEmpty())\n return false;\n }\n return true;\n };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"colCount\", {\n /**\n * The number of columns. Items are rendred in one line if the value is 0.\n */\n get: function () {\n return this.getPropertyValue(\"colCount\");\n },\n set: function (val) {\n if (val < 1 || val > 5)\n return;\n this.setPropertyValue(\"colCount\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"itemSize\", {\n /**\n * The default text input size.\n */\n get: function () {\n return this.getPropertyValue(\"itemSize\");\n },\n set: function (val) {\n this.setPropertyValue(\"itemSize\", val);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns the list of rendered rows.\n */\n QuestionMultipleTextModel.prototype.getRows = function () {\n var colCount = this.colCount;\n var items = this.items;\n var rows = [];\n var index = 0;\n for (var i = 0; i < items.length; i++) {\n if (index == 0) {\n rows.push([]);\n }\n rows[rows.length - 1].push(items[i]);\n index++;\n if (index >= colCount) {\n index = 0;\n }\n }\n return rows;\n };\n QuestionMultipleTextModel.prototype.onValueChanged = function () {\n _super.prototype.onValueChanged.call(this);\n this.onItemValueChanged();\n };\n QuestionMultipleTextModel.prototype.createTextItem = function (name, title) {\n return new MultipleTextItemModel(name, title);\n };\n QuestionMultipleTextModel.prototype.onItemValueChanged = function () {\n if (this.isMultipleItemValueChanging)\n return;\n for (var i = 0; i < this.items.length; i++) {\n var itemValue = null;\n if (this.value && this.items[i].name in this.value) {\n itemValue = this.value[this.items[i].name];\n }\n this.items[i].onValueChanged(itemValue);\n }\n };\n QuestionMultipleTextModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].editor.isRunningValidators)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.hasErrors = function (fireCallback, rec) {\n var _this = this;\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n var res = false;\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n if (!!rec &&\n rec.isOnValueChanged === true &&\n this.items[i].editor.isEmpty())\n continue;\n res = this.items[i].editor.hasErrors(fireCallback, rec) || res;\n }\n return _super.prototype.hasErrors.call(this, fireCallback) || res;\n };\n QuestionMultipleTextModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n var errors = this.items[i].editor.getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n return result;\n };\n QuestionMultipleTextModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].editor.clearErrors();\n }\n };\n QuestionMultipleTextModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n if (items[i].editor.containsErrors)\n return true;\n }\n return false;\n };\n QuestionMultipleTextModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n for (var i = 0; i < this.items.length; i++) {\n var editor = this.items[i].editor;\n if (editor.isVisible && !editor.isAnswered)\n return false;\n }\n return true;\n };\n //IMultipleTextData\n QuestionMultipleTextModel.prototype.getMultipleTextValue = function (name) {\n if (!this.value)\n return null;\n return this.value[name];\n };\n QuestionMultipleTextModel.prototype.setMultipleTextValue = function (name, value) {\n this.isMultipleItemValueChanging = true;\n var newValue = this.value;\n if (!newValue) {\n newValue = {};\n }\n newValue[name] = value;\n this.setNewValue(newValue);\n this.isMultipleItemValueChanging = false;\n };\n QuestionMultipleTextModel.prototype.getItemDefaultValue = function (name) {\n return !!this.defaultValue ? this.defaultValue[name] : null;\n };\n QuestionMultipleTextModel.prototype.getSurvey = function () {\n return this.survey;\n };\n QuestionMultipleTextModel.prototype.getTextProcessor = function () {\n return this.textProcessor;\n };\n QuestionMultipleTextModel.prototype.getAllValues = function () {\n return this.data ? this.data.getAllValues() : null;\n };\n QuestionMultipleTextModel.prototype.getIsRequiredText = function () {\n return this.survey ? this.survey.requiredText : \"\";\n };\n //IPanel\n QuestionMultipleTextModel.prototype.addElement = function (element, index) { };\n QuestionMultipleTextModel.prototype.removeElement = function (element) {\n return false;\n };\n QuestionMultipleTextModel.prototype.getQuestionTitleLocation = function () {\n return \"left\";\n };\n QuestionMultipleTextModel.prototype.getQuestionStartIndex = function () {\n return this.getStartIndex();\n };\n QuestionMultipleTextModel.prototype.getChildrenLayoutType = function () {\n return \"row\";\n };\n QuestionMultipleTextModel.prototype.elementWidthChanged = function (el) { };\n Object.defineProperty(QuestionMultipleTextModel.prototype, \"elements\", {\n get: function () {\n return [];\n },\n enumerable: true,\n configurable: true\n });\n QuestionMultipleTextModel.prototype.indexOf = function (el) {\n return -1;\n };\n return QuestionMultipleTextModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"multipletextitem\", [\n \"name\",\n \"isRequired:boolean\",\n { name: \"placeHolder\", serializationProperty: \"locPlaceHolder\" },\n {\n name: \"inputType\",\n default: \"text\",\n choices: [\n \"color\",\n \"date\",\n \"datetime\",\n \"datetime-local\",\n \"email\",\n \"month\",\n \"number\",\n \"password\",\n \"range\",\n \"tel\",\n \"text\",\n \"time\",\n \"url\",\n \"week\",\n ],\n },\n { name: \"title\", serializationProperty: \"locTitle\" },\n { name: \"maxLength:number\", default: -1 },\n {\n name: \"requiredErrorText:text\",\n serializationProperty: \"locRequiredErrorText\",\n },\n {\n name: \"validators:validators\",\n baseClassName: \"surveyvalidator\",\n classNamePart: \"validator\",\n },\n], function () {\n return new MultipleTextItemModel(\"\");\n});\n__WEBPACK_IMPORTED_MODULE_4__jsonobject__[\"c\" /* Serializer */].addClass(\"multipletext\", [\n { name: \"!items:textitems\", className: \"multipletextitem\" },\n { name: \"itemSize:number\", default: 25, minValue: 0 },\n { name: \"colCount:number\", default: 1, choices: [1, 2, 3, 4, 5] },\n], function () {\n return new QuestionMultipleTextModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_5__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"multipletext\", function (name) {\n var q = new QuestionMultipleTextModel(name);\n q.addItem(\"text1\");\n q.addItem(\"text2\");\n return q;\n});\n\n\n/***/ }),\n/* 193 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__textPreProcessor__ = __webpack_require__(21);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__conditionProcessValue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__panel__ = __webpack_require__(20);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__error__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__settings__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__utils_utils__ = __webpack_require__(28);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return QuestionPanelDynamicItem; });\n/* unused harmony export QuestionPanelDynamicTemplateSurveyImpl */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionPanelDynamicModel; });\n\n\n\n\n\n\n\n\n\n\n\n\nvar QuestionPanelDynamicItem = /** @class */ (function () {\n function QuestionPanelDynamicItem(data, panel) {\n this.data = data;\n this.panelValue = panel;\n var self = this;\n this.textPreProcessor = new __WEBPACK_IMPORTED_MODULE_3__textPreProcessor__[\"a\" /* TextPreProcessor */]();\n this.textPreProcessor.onProcess = function (textValue) {\n self.getProcessedTextValue(textValue);\n };\n this.setSurveyImpl();\n }\n Object.defineProperty(QuestionPanelDynamicItem.prototype, \"panel\", {\n get: function () {\n return this.panelValue;\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicItem.prototype.setSurveyImpl = function () {\n this.panel.setSurveyImpl(this);\n };\n QuestionPanelDynamicItem.prototype.getValue = function (name) {\n var values = this.getAllValues();\n return values[name];\n };\n QuestionPanelDynamicItem.prototype.setValue = function (name, newValue) {\n this.data.setPanelItemData(this, name, newValue);\n };\n QuestionPanelDynamicItem.prototype.getVariable = function (name) {\n return undefined;\n };\n QuestionPanelDynamicItem.prototype.setVariable = function (name, newValue) { };\n QuestionPanelDynamicItem.prototype.getComment = function (name) {\n var result = this.getValue(name + __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].commentPrefix);\n return result ? result : \"\";\n };\n QuestionPanelDynamicItem.prototype.setComment = function (name, newValue, locNotification) {\n this.setValue(name + __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].commentPrefix, newValue);\n };\n QuestionPanelDynamicItem.prototype.getAllValues = function () {\n return this.data.getPanelItemData(this);\n };\n QuestionPanelDynamicItem.prototype.getFilteredValues = function () {\n var values = {};\n var surveyValues = !!this.data && !!this.data.getRootData()\n ? this.data.getRootData().getFilteredValues()\n : {};\n for (var key in surveyValues) {\n values[key] = surveyValues[key];\n }\n values[QuestionPanelDynamicItem.ItemVariableName] = this.getAllValues();\n return values;\n };\n QuestionPanelDynamicItem.prototype.getFilteredProperties = function () {\n if (!!this.data && !!this.data.getRootData())\n return this.data.getRootData().getFilteredProperties();\n return { survey: this.getSurvey() };\n };\n QuestionPanelDynamicItem.prototype.geSurveyData = function () {\n return this;\n };\n QuestionPanelDynamicItem.prototype.getSurvey = function () {\n return this.data ? this.data.getSurvey() : null;\n };\n QuestionPanelDynamicItem.prototype.getTextProcessor = function () {\n return this;\n };\n //ITextProcessor\n QuestionPanelDynamicItem.prototype.getProcessedTextValue = function (textValue) {\n if (!textValue)\n return;\n var panelIndex = !!this.data ? this.data.getItemIndex(this) : -1;\n if (textValue.name == QuestionPanelDynamicItem.IndexVariableName) {\n textValue.isExists = true;\n textValue.value = panelIndex + 1;\n return;\n }\n var firstName = new __WEBPACK_IMPORTED_MODULE_4__conditionProcessValue__[\"a\" /* ProcessValue */]().getFirstName(textValue.name);\n textValue.isExists = firstName == QuestionPanelDynamicItem.ItemVariableName;\n textValue.canProcess = textValue.isExists;\n if (!textValue.canProcess)\n return;\n //name should start with the panel\n textValue.name = textValue.name.replace(QuestionPanelDynamicItem.ItemVariableName + \".\", \"\");\n var firstName = new __WEBPACK_IMPORTED_MODULE_4__conditionProcessValue__[\"a\" /* ProcessValue */]().getFirstName(textValue.name);\n var question = this.panel.getQuestionByValueName(firstName);\n if (!question && panelIndex > -1) {\n question = this.data.getSharedQuestionFromArray(firstName, panelIndex);\n }\n var values = {};\n if (question) {\n values[firstName] = textValue.returnDisplayValue\n ? question.displayValue\n : question.value;\n }\n else {\n var allValues = this.getAllValues();\n if (allValues) {\n values[firstName] = allValues[firstName];\n }\n }\n textValue.value = new __WEBPACK_IMPORTED_MODULE_4__conditionProcessValue__[\"a\" /* ProcessValue */]().getValue(textValue.name, values);\n };\n QuestionPanelDynamicItem.prototype.processText = function (text, returnDisplayValue) {\n text = this.textPreProcessor.process(text, returnDisplayValue);\n var survey = this.getSurvey();\n return survey ? survey.processText(text, returnDisplayValue) : text;\n };\n QuestionPanelDynamicItem.prototype.processTextEx = function (text, returnDisplayValue) {\n text = this.processText(text, returnDisplayValue);\n var hasAllValuesOnLastRun = this.textPreProcessor.hasAllValuesOnLastRun;\n var res = { hasAllValuesOnLastRun: true, text: text };\n if (this.getSurvey()) {\n res = this.getSurvey().processTextEx(text, returnDisplayValue, false);\n }\n res.hasAllValuesOnLastRun =\n res.hasAllValuesOnLastRun && hasAllValuesOnLastRun;\n return res;\n };\n QuestionPanelDynamicItem.ItemVariableName = \"panel\";\n QuestionPanelDynamicItem.IndexVariableName = \"panelIndex\";\n return QuestionPanelDynamicItem;\n}());\n\nvar QuestionPanelDynamicTemplateSurveyImpl = /** @class */ (function () {\n function QuestionPanelDynamicTemplateSurveyImpl(data) {\n this.data = data;\n }\n QuestionPanelDynamicTemplateSurveyImpl.prototype.geSurveyData = function () {\n return null;\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getSurvey = function () {\n return this.data.getSurvey();\n };\n QuestionPanelDynamicTemplateSurveyImpl.prototype.getTextProcessor = function () {\n return null;\n };\n return QuestionPanelDynamicTemplateSurveyImpl;\n}());\n\n/**\n * A Model for a panel dymanic question. You setup the template panel, but adding elements (any question or a panel) and assign a text to it's title, and this panel will be used as a template on creating dynamic panels. The number of panels is defined by panelCount property.\n * An end-user may dynamically add/remove panels, unless you forbidden this.\n */\nvar QuestionPanelDynamicModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionPanelDynamicModel, _super);\n function QuestionPanelDynamicModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.loadingPanelCount = 0;\n _this.currentIndexValue = -1;\n _this.isAddingNewPanels = false;\n _this.createNewArray(\"panels\");\n _this.templateValue = _this.createAndSetupNewPanelObject();\n _this.template.renderWidth = \"100%\";\n _this.template.selectedElementInDesign = _this;\n var self = _this;\n _this.template.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n self.rebuildPanels();\n };\n _this.template.removeElementCallback = function (element) {\n self.rebuildPanels();\n };\n _this.createLocalizableString(\"confirmDeleteText\", _this);\n _this.createLocalizableString(\"keyDuplicationError\", _this);\n _this.createLocalizableString(\"panelAddText\", _this);\n _this.createLocalizableString(\"panelRemoveText\", _this);\n _this.createLocalizableString(\"panelPrevText\", _this);\n _this.createLocalizableString(\"panelNextText\", _this);\n _this.registerFunctionOnPropertyValueChanged(\"panelsState\", function () {\n self.setPanelsState();\n });\n return _this;\n }\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"hasSingleInput\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setSurveyImpl = function (value) {\n _super.prototype.setSurveyImpl.call(this, value);\n this.setTemplatePanelSurveyImpl();\n this.setPanelsSurveyImpl();\n };\n QuestionPanelDynamicModel.prototype.assignOnPropertyChangedToTemplate = function () {\n var elements = this.template.elements;\n for (var i = 0; i < elements.length; i++) {\n this.addOnPropertyChangedCallback(elements[i]);\n }\n };\n QuestionPanelDynamicModel.prototype.addOnPropertyChangedCallback = function (element) {\n var self = this;\n element.onPropertyChanged.add(function (element, options) {\n self.onTemplateElementPropertyChanged(element, options);\n });\n if (element.isPanel) {\n element.addElementCallback = function (element) {\n self.addOnPropertyChangedCallback(element);\n };\n }\n };\n QuestionPanelDynamicModel.prototype.onTemplateElementPropertyChanged = function (element, options) {\n if (this.isLoadingFromJson || this.isDesignMode || this.panels.length == 0)\n return;\n var property = __WEBPACK_IMPORTED_MODULE_7__jsonobject__[\"c\" /* Serializer */].findProperty(element.getType(), options.name);\n if (!property)\n return;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var question = panels[i].getQuestionByName(element.name);\n if (!!question && question[options.name] !== options.newValue) {\n question[options.name] = options.newValue;\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getType = function () {\n return \"paneldynamic\";\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isCompositeQuestion\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.clearOnDeletingContainer = function () {\n this.panels.forEach(function (panel) {\n panel.clearOnDeletingContainer();\n });\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isAllowTitleLeft\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.removeElement = function (element) {\n return this.template.removeElement(element);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"template\", {\n /**\n * The template Panel. This panel is used as a template on creatign dynamic panels\n * @see templateElements\n * @see templateTitle\n * @see panelCount\n */\n get: function () {\n return this.templateValue;\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getPanel = function () {\n return this.template;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateElements\", {\n /**\n * The template Panel elements, questions and panels.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.elements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitle\", {\n /**\n * The template Panel title property.\n * @see templateElements\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.template.title;\n },\n set: function (newValue) {\n this.template.title = newValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateTitle\", {\n get: function () {\n return this.template.locTitle;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateDescription\", {\n /**\n * The template Panel description property.\n * @see templateElements\n * @see template\n * @see panelCount\n * @see templateTitle\n */\n get: function () {\n return this.template.description;\n },\n set: function (newValue) {\n this.template.description = newValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locTemplateDescription\", {\n get: function () {\n return this.template.locDescription;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"items\", {\n get: function () {\n var res = [];\n for (var i = 0; i < this.panels.length; i++) {\n res.push(this.panels[i].data);\n }\n return res;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panels\", {\n /**\n * The array of dynamic panels created based on panel template\n * @see template\n * @see panelCount\n */\n get: function () {\n return this.getPropertyValue(\"panels\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentIndex\", {\n /**\n * The index of current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns -1, otherwise it returns a value from 0 to panelCount - 1.\n * @see currentPanel\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n if (this.isRenderModeList)\n return -1;\n if (this.isDesignMode)\n return 0;\n if (this.currentIndexValue < 0 && this.panelCount > 0) {\n this.currentIndexValue = 0;\n }\n if (this.currentIndexValue >= this.panelCount) {\n this.currentIndexValue = this.panelCount - 1;\n }\n return this.currentIndexValue;\n },\n set: function (val) {\n if (this.currentIndexValue !== val) {\n if (val >= this.panelCount)\n val = this.panelCount - 1;\n this.currentIndexValue = val;\n this.fireCallback(this.currentIndexChangedCallback);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"currentPanel\", {\n /**\n * The current active dynamical panel when the renderMode is not \"list\". If there is no dymamic panel (panelCount = 0) or renderMode equals \"list\" it returns null.\n * @see currenIndex\n * @see panels\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n var index = this.currentIndex;\n if (index < 0 || index >= this.panels.length)\n return null;\n return this.panels[index];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDelete\", {\n /**\n * Set it to true, to show a confirmation dialog on removing a panel\n * @see ConfirmDeleteText\n */\n get: function () {\n return this.getPropertyValue(\"confirmDelete\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"confirmDelete\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyName\", {\n /**\n * Set it to a question name used in the template panel and the library shows duplication error, if there are same values in different panels of this question.\n * @see keyDuplicationError\n */\n get: function () {\n return this.getPropertyValue(\"keyName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"keyName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"confirmDeleteText\", {\n /**\n * Use this property to change the default text showing in the confirmation delete dialog on removing a panel.\n */\n get: function () {\n return this.getLocalizableStringText(\"confirmDeleteText\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"confirmDelete\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"confirmDeleteText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locConfirmDeleteText\", {\n get: function () {\n return this.getLocalizableString(\"confirmDeleteText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"keyDuplicationError\", {\n /**\n * The duplication value error text. Set it to show the text different from the default.\n * @see keyName\n */\n get: function () {\n return this.getLocalizableStringText(\"keyDuplicationError\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"keyDuplicationError\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"keyDuplicationError\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locKeyDuplicationError\", {\n get: function () {\n return this.getLocalizableString(\"keyDuplicationError\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelPrevText\", {\n /**\n * Use this property to change the default previous button text. Previous button shows the previous panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelPrevText\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"pagePrevText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelPrevText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelPrevText\", {\n get: function () {\n return this.getLocalizableString(\"panelPrevText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelNextText\", {\n /**\n * Use this property to change the default next button text. Next button shows the next panel, change the currentPanel, when the renderMode doesn't equal to \"list\".\n * @see currentPanel\n * @see currentIndex\n * @see renderMode\n */\n get: function () {\n return this.getLocalizableStringText(\"panelNextText\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"pageNextText\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelNextText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelNextText\", {\n get: function () {\n return this.getLocalizableString(\"panelNextText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelAddText\", {\n /**\n * Use this property to change the default value of add panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelAddText\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"addPanel\"));\n },\n set: function (value) {\n this.setLocalizableStringText(\"panelAddText\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelAddText\", {\n get: function () {\n return this.getLocalizableString(\"panelAddText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelRemoveText\", {\n /**\n * Use this property to change the default value of remove panel button text.\n */\n get: function () {\n return this.getLocalizableStringText(\"panelRemoveText\", __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"removePanel\"));\n },\n set: function (val) {\n this.setLocalizableStringText(\"panelRemoveText\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"locPanelRemoveText\", {\n get: function () {\n return this.getLocalizableString(\"panelRemoveText\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressTopShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressTop\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressTop\" || this.renderMode == \"progressTopBottom\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isProgressBottomShowing\", {\n /**\n * Returns true when the renderMode equals to \"progressBottom\" or \"progressTopBottom\"\n */\n get: function () {\n return (this.renderMode == \"progressBottom\" ||\n this.renderMode == \"progressTopBottom\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isPrevButtonShowing\", {\n /**\n * Returns true when currentIndex is more than 0.\n * @see currenIndex\n * @see currenPanel\n */\n get: function () {\n return this.currentIndex > 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isNextButtonShowing\", {\n /**\n * Returns true when currentIndex is more than or equal 0 and less than panelCount - 1.\n * @see currenIndex\n * @see currenPanel\n * @see panelCount\n */\n get: function () {\n return this.currentIndex >= 0 && this.currentIndex < this.panelCount - 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRangeShowing\", {\n /**\n * Returns true when showRangeInProgress equals to true, renderMode doesn't equal to \"list\" and panelCount is >= 2.\n */\n get: function () {\n return (this.showRangeInProgress && this.currentIndex >= 0 && this.panelCount > 1);\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.getElementsInDesign = function (includeHidden) {\n if (includeHidden === void 0) { includeHidden = false; }\n return includeHidden ? [this.template] : this.templateElements;\n };\n QuestionPanelDynamicModel.prototype.prepareValueForPanelCreating = function () {\n this.addingNewPanelsValue = this.value;\n this.isAddingNewPanels = true;\n this.isNewPanelsValueChanged = false;\n };\n QuestionPanelDynamicModel.prototype.setValueAfterPanelsCreating = function () {\n this.isAddingNewPanels = false;\n if (this.isNewPanelsValueChanged) {\n this.isValueChangingInternally = true;\n this.value = this.addingNewPanelsValue;\n this.isValueChangingInternally = false;\n }\n };\n QuestionPanelDynamicModel.prototype.getValueCore = function () {\n return this.isAddingNewPanels\n ? this.addingNewPanelsValue\n : _super.prototype.getValueCore.call(this);\n };\n QuestionPanelDynamicModel.prototype.setValueCore = function (newValue) {\n if (this.isAddingNewPanels) {\n this.isNewPanelsValueChanged = true;\n this.addingNewPanelsValue = newValue;\n }\n else {\n _super.prototype.setValueCore.call(this, newValue);\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelCount\", {\n /**\n * Use this property to get/set the number of dynamic panels.\n * @see template\n * @see minPanelCount\n * @see maxPanelCount\n * @see addPanel\n * @see removePanel\n * @see removePanelUI\n */\n get: function () {\n return this.isLoadingFromJson || this.isDesignMode\n ? this.loadingPanelCount\n : this.panels.length;\n },\n set: function (val) {\n if (val < 0)\n return;\n if (this.isLoadingFromJson || this.isDesignMode) {\n this.loadingPanelCount = val;\n return;\n }\n if (val == this.panels.length || this.isDesignMode)\n return;\n this.prepareValueForPanelCreating();\n for (var i = this.panelCount; i < val; i++) {\n var panel = this.createNewPanel();\n this.panels.push(panel);\n if (this.renderMode == \"list\" && this.panelsState != \"default\") {\n if (this.panelsState === \"expand\") {\n panel.expand();\n }\n else {\n if (!!panel.title) {\n panel.collapse();\n }\n }\n }\n }\n if (val < this.panelCount)\n this.panels.splice(val, this.panelCount - val);\n this.setValueAfterPanelsCreating();\n this.setValueBasedOnPanelCount();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"panelsState\", {\n /**\n * Use this property to allow the end-user to collapse/expand the panels. It works only if the renderMode property equals to \"list\" and templateTitle property is not empty. The following values are available:\n *
default - the default value. User can't collapse/expand panels\n *
expanded - User can collapse/expand panels and all panels are expanded by default\n *
collapsed - User can collapse/expand panels and all panels are collapsed by default\n *
firstExpanded - User can collapse/expand panels. The first panel is expanded and others are collapsed\n * @see renderMode\n * @see templateTitle\n */\n get: function () {\n return this.getPropertyValue(\"panelsState\");\n },\n set: function (val) {\n this.setPropertyValue(\"panelsState\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setTemplatePanelSurveyImpl = function () {\n this.template.setSurveyImpl(this.isDesignMode\n ? this.surveyImpl\n : new QuestionPanelDynamicTemplateSurveyImpl(this));\n };\n QuestionPanelDynamicModel.prototype.setPanelsSurveyImpl = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var panel = this.panels[i];\n if (panel == this.template)\n continue;\n panel.setSurveyImpl(panel.data);\n }\n };\n QuestionPanelDynamicModel.prototype.setPanelsState = function () {\n if (this.isDesignMode || this.renderMode != \"list\" || !this.templateTitle)\n return;\n for (var i = 0; i < this.panels.length; i++) {\n var state = this.panelsState;\n if (state === \"firstExpanded\") {\n state = i === 0 ? \"expanded\" : \"collapsed\";\n }\n this.panels[i].state = state;\n }\n };\n QuestionPanelDynamicModel.prototype.setValueBasedOnPanelCount = function () {\n var value = this.value;\n if (!value || !Array.isArray(value))\n value = [];\n if (value.length == this.panelCount)\n return;\n for (var i = value.length; i < this.panelCount; i++)\n value.push({});\n if (value.length > this.panelCount) {\n value.splice(this.panelCount, value.length - this.panelCount);\n }\n this.isValueChangingInternally = true;\n this.value = value;\n this.isValueChangingInternally = false;\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"minPanelCount\", {\n /**\n * The minimum panel count. A user could not delete a panel if the panelCount equals to minPanelCount\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"minPanelCount\", 0);\n },\n set: function (val) {\n if (val < 0)\n val = 0;\n if (val == this.minPanelCount)\n return;\n this.setPropertyValue(\"minPanelCount\", val);\n if (val > this.maxPanelCount)\n this.maxPanelCount = val;\n if (this.panelCount < val)\n this.panelCount = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"maxPanelCount\", {\n /**\n * The maximum panel count. A user could not add a panel if the panelCount equals to maxPanelCount\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n return this.getPropertyValue(\"maxPanelCount\", __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].panelMaximumPanelCount);\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].panelMaximumPanelCount)\n val = __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].panelMaximumPanelCount;\n if (val == this.maxPanelCount)\n return;\n this.setPropertyValue(\"maxPanelCount\", val);\n if (val < this.minPanelCount)\n this.minPanelCount = val;\n if (this.panelCount > val)\n this.panelCount = val;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowAddPanel\", {\n /**\n * Set this property to false to hide the 'Add New' button\n * @see allowRemovePanel\n */\n get: function () {\n return this.getPropertyValue(\"allowAddPanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowAddPanel\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"allowRemovePanel\", {\n /**\n * Set this property to false to hide the 'Remove' button\n * @see allowAddPanel\n */\n get: function () {\n return this.getPropertyValue(\"allowRemovePanel\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemovePanel\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"templateTitleLocation\", {\n /**\n * Set this property different from \"default\" to set the specific question title location for the template questions.\n * @see SurveyModel.questionTitleLocation\n * @see PanelModelBase.questionTitleLocation\n */\n get: function () {\n return this.getPropertyValue(\"templateTitleLocation\");\n },\n set: function (value) {\n this.setPropertyValue(\"templateTitleLocation\", value.toLowerCase());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showQuestionNumbers\", {\n /**\n * Use this property to show/hide the numbers in titles in questions inside a dynamic panel.\n * By default the value is \"off\". You may set it to \"onPanel\" and the first question inside a dynamic panel will start with 1 or \"onSurvey\" to include nested questions in dymamic panels into global survey question numbering.\n */\n get: function () {\n return this.getPropertyValue(\"showQuestionNumbers\");\n },\n set: function (val) {\n this.setPropertyValue(\"showQuestionNumbers\", val);\n if (!this.isLoadingFromJson && this.survey) {\n this.survey.questionVisibilityChanged(this, this.visible);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"showRangeInProgress\", {\n /**\n * Shows the range from 1 to panelCount when renderMode doesn't equal to \"list\". Set to false to hide this element.\n * @see panelCount\n * @see renderMode\n */\n get: function () {\n return this.getPropertyValue(\"showRangeInProgress\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"showRangeInProgress\", val);\n this.fireCallback(this.currentIndexChangedCallback);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"renderMode\", {\n /**\n * By default the property equals to \"list\" and all dynamic panels are rendered one by one on the page. You may change it to: \"progressTop\", \"progressBottom\" or \"progressTopBottom\" to render only one dynamic panel at once. The progress and navigation elements can be rendred on top, bottom or both.\n */\n get: function () {\n return this.getPropertyValue(\"renderMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"renderMode\", val);\n this.fireCallback(this.renderModeChangedCallback);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"isRenderModeList\", {\n /**\n * Returns true when renderMode equals to \"list\".\n * @see renderMode\n */\n get: function () {\n return this.renderMode == \"list\";\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.setVisibleIndex = function (value) {\n if (!this.isVisible)\n return 0;\n var startIndex = this.showQuestionNumbers == \"onSurvey\" ? value : 0;\n for (var i = 0; i < this.panels.length; i++) {\n var counter = this.setPanelVisibleIndex(this.panels[i], startIndex, this.showQuestionNumbers != \"off\");\n if (this.showQuestionNumbers == \"onSurvey\") {\n startIndex += counter;\n }\n }\n _super.prototype.setVisibleIndex.call(this, this.showQuestionNumbers != \"onSurvey\" ? value : -1);\n return this.showQuestionNumbers != \"onSurvey\" ? 1 : startIndex - value;\n };\n QuestionPanelDynamicModel.prototype.setPanelVisibleIndex = function (panel, index, showIndex) {\n if (!showIndex) {\n panel.setVisibleIndex(-1);\n return 0;\n }\n return panel.setVisibleIndex(index);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canAddPanel\", {\n /**\n * Returns true when an end user may add a new panel. The question is not read only and panelCount less than maxPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see maxPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowAddPanel &&\n !this.isReadOnly &&\n this.panelCount < this.maxPanelCount);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"canRemovePanel\", {\n /**\n * Returns true when an end user may remove a panel. The question is not read only and panelCount is more than minPanelCount\n * @see isReadOnly\n * @see panelCount\n * @see minPanelCount\n */\n get: function () {\n if (this.survey && this.survey.isDesignMode)\n return false;\n return (this.allowRemovePanel &&\n !this.isReadOnly &&\n this.panelCount > this.minPanelCount);\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.rebuildPanels = function () {\n var _a;\n if (this.isLoadingFromJson)\n return;\n this.prepareValueForPanelCreating();\n var panels = [];\n if (this.isDesignMode) {\n new QuestionPanelDynamicItem(this, this.template);\n panels.push(this.template);\n }\n else {\n for (var i = 0; i < this.panelCount; i++) {\n panels.push(this.createNewPanel());\n }\n }\n (_a = this.panels).splice.apply(_a, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"d\" /* __spreadArrays */])([0, this.panels.length], panels));\n this.setValueAfterPanelsCreating();\n this.setPanelsState();\n this.reRunCondition();\n this.fireCallback(this.panelCountChangedCallback);\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultPanelValue\", {\n /**\n * If it is not empty, then this value is set to every new panel, including panels created initially, unless the defaultValue is not empty\n * @see defaultValue\n * @see defaultValueFromLastRow\n */\n get: function () {\n return this.getPropertyValue(\"defaultPanelValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"defaultPanelValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"defaultValueFromLastPanel\", {\n /**\n * Set it to true to copy the value into new added panel from the last panel. If defaultPanelValue is set and this property equals to true,\n * then the value for new added panel is merging.\n * @see defaultValue\n * @see defaultPanelValue\n */\n get: function () {\n return this.getPropertyValue(\"defaultValueFromLastPanel\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"defaultValueFromLastPanel\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionPanelDynamicModel.prototype.isDefaultValueEmpty = function () {\n return (_super.prototype.isDefaultValueEmpty.call(this) && this.isValueEmpty(this.defaultPanelValue));\n };\n QuestionPanelDynamicModel.prototype.setDefaultValue = function () {\n if (this.isValueEmpty(this.defaultPanelValue) ||\n !this.isValueEmpty(this.defaultValue)) {\n _super.prototype.setDefaultValue.call(this);\n return;\n }\n if (!this.isEmpty() || this.panelCount == 0)\n return;\n var newValue = [];\n for (var i = 0; i < this.panelCount; i++) {\n newValue.push(this.defaultPanelValue);\n }\n this.value = newValue;\n };\n QuestionPanelDynamicModel.prototype.isEmpty = function () {\n var val = this.value;\n if (!val || !Array.isArray(val))\n return true;\n for (var i = 0; i < val.length; i++) {\n if (!this.isRowEmpty(val[i]))\n return false;\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.isRowEmpty = function (val) {\n for (var prop in val) {\n if (val.hasOwnProperty(prop))\n return false;\n }\n return true;\n };\n /**\n * Add a new dynamic panel based on the template Panel. It checks if canAddPanel returns true and then calls addPanel method.\n * @see template\n * @see panelCount\n * @see panels\n * @see canAddPanel\n */\n QuestionPanelDynamicModel.prototype.addPanelUI = function () {\n if (!this.canAddPanel)\n return null;\n var newPanel = this.addPanel();\n if (this.renderMode === \"list\" && this.panelsState !== \"default\") {\n newPanel.expand();\n }\n return newPanel;\n };\n /**\n * Add a new dynamic panel based on the template Panel.\n * @see template\n * @see panelCount\n * @see panels\n */\n QuestionPanelDynamicModel.prototype.addPanel = function () {\n this.panelCount++;\n if (!this.isRenderModeList) {\n this.currentIndex = this.panelCount - 1;\n }\n var newValue = this.value;\n var hasModified = false;\n if (!this.isValueEmpty(this.defaultPanelValue)) {\n if (!!newValue &&\n Array.isArray(newValue) &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], this.defaultPanelValue);\n }\n }\n if (this.defaultValueFromLastPanel &&\n !!newValue &&\n Array.isArray(newValue) &&\n newValue.length > 1 &&\n newValue.length == this.panelCount) {\n hasModified = true;\n this.copyValue(newValue[newValue.length - 1], newValue[newValue.length - 2]);\n }\n if (hasModified) {\n this.value = newValue;\n }\n if (this.survey)\n this.survey.dynamicPanelAdded(this);\n return this.panels[this.panelCount - 1];\n };\n QuestionPanelDynamicModel.prototype.copyValue = function (src, dest) {\n for (var key in dest) {\n src[key] = dest[key];\n }\n };\n /**\n * Call removePanel function. Do nothing is canRemovePanel returns false. If confirmDelete set to true, it shows the confirmation dialog first.\n * @param value a panel or panel index\n * @see removePanel\n * @see confirmDelete\n * @see confirmDeleteText\n * @see canRemovePanel\n *\n */\n QuestionPanelDynamicModel.prototype.removePanelUI = function (value) {\n if (!this.canRemovePanel)\n return;\n if (!this.confirmDelete || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_11__utils_utils__[\"a\" /* confirmAction */])(this.confirmDeleteText)) {\n this.removePanel(value);\n }\n };\n /**\n * Goes to the next panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToNextPanel = function () {\n if (this.renderMode !== \"list\" && this.currentPanel.hasErrors())\n return;\n this.currentIndex++;\n };\n /**\n * Goes to the previous panel in the PanelDynamic\n *\n */\n QuestionPanelDynamicModel.prototype.goToPrevPanel = function () {\n this.currentIndex--;\n };\n /**\n * Removes a dynamic panel from the panels array.\n * @param value a panel or panel index\n * @see panels\n * @see template\n */\n QuestionPanelDynamicModel.prototype.removePanel = function (value) {\n var index = this.getPanelIndex(value);\n if (index < 0 || index >= this.panelCount)\n return;\n var panel = this.panels[index];\n this.panels.splice(index, 1);\n var value = this.value;\n if (!value || !Array.isArray(value) || index >= value.length)\n return;\n this.isValueChangingInternally = true;\n value.splice(index, 1);\n this.value = value;\n this.fireCallback(this.panelCountChangedCallback);\n if (this.survey)\n this.survey.dynamicPanelRemoved(this, index, panel);\n this.isValueChangingInternally = false;\n };\n QuestionPanelDynamicModel.prototype.getPanelIndex = function (val) {\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isNumber(val))\n return val;\n var items = this.items;\n for (var i = 0; i < this.panels.length; i++) {\n if (this.panels[i] === val || items[i] === val)\n return i;\n }\n return -1;\n };\n QuestionPanelDynamicModel.prototype.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n panels[i].locStrsChanged();\n }\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValues = function () {\n for (var i = 0; i < this.panels.length; i++) {\n this.clearIncorrectValuesInPanel(i);\n }\n };\n QuestionPanelDynamicModel.prototype.clearErrors = function () {\n _super.prototype.clearErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].clearErrors();\n }\n };\n QuestionPanelDynamicModel.prototype.getQuestionFromArray = function (name, index) {\n if (index >= this.panelCount)\n return null;\n return this.panels[index].getQuestionByName(name);\n };\n QuestionPanelDynamicModel.prototype.clearIncorrectValuesInPanel = function (index) {\n var panel = this.panels[index];\n panel.clearIncorrectValues();\n var val = this.value;\n var values = !!val && index < val.length ? val[index] : null;\n if (!values)\n return;\n var isChanged = false;\n for (var key in values) {\n if (!panel.getQuestionByName(key) &&\n !this.getSharedQuestionFromArray(key, index)) {\n delete values[key];\n isChanged = true;\n }\n }\n if (isChanged) {\n val[index] = values;\n this.value = val;\n }\n };\n QuestionPanelDynamicModel.prototype.getSharedQuestionFromArray = function (name, panelIndex) {\n return !!this.survey && !!this.valueName\n ? (this.survey.getQuestionByValueNameFromArray(this.valueName, name, panelIndex))\n : null;\n };\n QuestionPanelDynamicModel.prototype.addConditionObjectsByContext = function (objects, context) {\n var hasContext = !!context\n ? this.template.questions.indexOf(context) > -1\n : false;\n var prefixName = this.getValueName() + \"[0].\";\n var prefixText = this.processedTitle + \"[0].\";\n var panelObjs = new Array();\n var questions = this.template.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].addConditionObjectsByContext(panelObjs, context);\n }\n for (var i = 0; i < panelObjs.length; i++) {\n objects.push({\n name: prefixName + panelObjs[i].name,\n text: prefixText + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n if (hasContext) {\n for (var i = 0; i < panelObjs.length; i++) {\n if (panelObjs[i].question == context)\n continue;\n objects.push({\n name: \"panel.\" + panelObjs[i].name,\n text: \"panel.\" + panelObjs[i].text,\n question: panelObjs[i].question,\n });\n }\n }\n };\n QuestionPanelDynamicModel.prototype.getConditionJson = function (operator, path) {\n if (operator === void 0) { operator = null; }\n if (path === void 0) { path = null; }\n if (!path)\n return _super.prototype.getConditionJson.call(this, operator, path);\n var questionName = path;\n var pos = path.indexOf(\".\");\n if (pos > -1) {\n questionName = path.substr(0, pos);\n path = path.substr(pos + 1);\n }\n var question = this.template.getQuestionByName(questionName);\n if (!question)\n return null;\n return question.getConditionJson(operator, path);\n };\n QuestionPanelDynamicModel.prototype.onReadOnlyChanged = function () {\n var readOnly = this.isReadOnly;\n this.template.readOnly = readOnly;\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].readOnly = readOnly;\n }\n _super.prototype.onReadOnlyChanged.call(this);\n };\n QuestionPanelDynamicModel.prototype.onSurveyLoad = function () {\n this.template.readOnly = this.isReadOnly;\n this.template.onSurveyLoad();\n if (this.loadingPanelCount > 0) {\n this.panelCount = this.loadingPanelCount;\n }\n if (this.isDesignMode) {\n this.rebuildPanels();\n }\n this.setPanelsSurveyImpl();\n this.setPanelsState();\n this.assignOnPropertyChangedToTemplate();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionPanelDynamicModel.prototype.onFirstRendering = function () {\n this.template.onFirstRendering();\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onFirstRendering();\n }\n _super.prototype.onFirstRendering.call(this);\n };\n QuestionPanelDynamicModel.prototype.runCondition = function (values, properties) {\n _super.prototype.runCondition.call(this, values, properties);\n this.runPanelsCondition(values, properties);\n };\n QuestionPanelDynamicModel.prototype.reRunCondition = function () {\n if (!this.data)\n return;\n this.runCondition(this.getDataFilteredValues(), this.getDataFilteredProperties());\n };\n QuestionPanelDynamicModel.prototype.runPanelsCondition = function (values, properties) {\n var cachedValues = {};\n if (values && values instanceof Object) {\n cachedValues = JSON.parse(JSON.stringify(values));\n }\n for (var i = 0; i < this.panels.length; i++) {\n var panelValues = this.getPanelItemData(this.panels[i].data);\n //Should be unique for every panel due async expression support\n var newValues = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].createCopy(cachedValues);\n newValues[QuestionPanelDynamicItem.ItemVariableName.toLowerCase()] = panelValues;\n newValues[QuestionPanelDynamicItem.IndexVariableName.toLowerCase()] = i;\n this.panels[i].runCondition(newValues, properties);\n }\n };\n QuestionPanelDynamicModel.prototype.onAnyValueChanged = function (name) {\n _super.prototype.onAnyValueChanged.call(this, name);\n for (var i = 0; i < this.panels.length; i++) {\n this.panels[i].onAnyValueChanged(name);\n this.panels[i].onAnyValueChanged(QuestionPanelDynamicItem.ItemVariableName);\n }\n };\n QuestionPanelDynamicModel.prototype.hasKeysDuplicated = function (fireCallback, rec) {\n if (rec === void 0) { rec = null; }\n var keyValues = [];\n var res;\n for (var i = 0; i < this.panels.length; i++) {\n res =\n this.isValueDuplicated(this.panels[i], keyValues, rec, fireCallback) ||\n res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.updatePanelsContainsErrors = function () {\n var question = this.changingValueQuestion;\n var parent = question.parent;\n while (!!parent) {\n parent.updateContainsErrors();\n parent = parent.parent;\n }\n this.updateContainsErrors();\n };\n QuestionPanelDynamicModel.prototype.hasErrors = function (fireCallback, rec) {\n if (fireCallback === void 0) { fireCallback = true; }\n if (rec === void 0) { rec = null; }\n if (this.isValueChangingInternally)\n return false;\n var res = false;\n if (!!this.changingValueQuestion) {\n var res = this.changingValueQuestion.hasErrors(fireCallback, rec);\n res = this.hasKeysDuplicated(fireCallback, rec) || res;\n this.updatePanelsContainsErrors();\n return res;\n }\n else {\n var errosInPanels = this.hasErrorInPanels(fireCallback, rec);\n return _super.prototype.hasErrors.call(this, fireCallback) || errosInPanels;\n }\n };\n QuestionPanelDynamicModel.prototype.getContainsErrors = function () {\n var res = _super.prototype.getContainsErrors.call(this);\n if (res)\n return res;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n if (panels[i].containsErrors)\n return true;\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getIsAnswered = function () {\n if (!_super.prototype.getIsAnswered.call(this))\n return false;\n var panels = this.panels;\n for (var i = 0; i < panels.length; i++) {\n var visibleQuestions = [];\n panels[i].addQuestionsToList(visibleQuestions, true);\n for (var j = 0; j < visibleQuestions.length; j++) {\n if (!visibleQuestions[j].isAnswered)\n return false;\n }\n }\n return true;\n };\n QuestionPanelDynamicModel.prototype.clearValueIfInvisible = function () {\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n questions[j].clearValueIfInvisible();\n }\n }\n _super.prototype.clearValueIfInvisible.call(this);\n };\n QuestionPanelDynamicModel.prototype.getIsRunningValidators = function () {\n if (_super.prototype.getIsRunningValidators.call(this))\n return true;\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n if (questions[j].isRunningValidators)\n return true;\n }\n }\n return false;\n };\n QuestionPanelDynamicModel.prototype.getAllErrors = function () {\n var result = _super.prototype.getAllErrors.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n var questions = this.panels[i].questions;\n for (var j = 0; j < questions.length; j++) {\n var errors = questions[j].getAllErrors();\n if (errors && errors.length > 0) {\n result = result.concat(errors);\n }\n }\n }\n return result;\n };\n QuestionPanelDynamicModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var values = this.createValueCopy();\n if (!values || !Array.isArray(values))\n return values;\n for (var i = 0; i < this.panels.length && i < values.length; i++) {\n var val = values[i];\n if (!val)\n continue;\n values[i] = this.getPanelDisplayValue(i, val, keysAsText);\n }\n return values;\n };\n QuestionPanelDynamicModel.prototype.getPanelDisplayValue = function (panelIndex, val, keysAsText) {\n if (!val)\n return val;\n var panel = this.panels[panelIndex];\n for (var key in val) {\n var question = panel.getQuestionByValueName(key);\n if (!question) {\n question = this.getSharedQuestionFromArray(key, panelIndex);\n }\n if (!!question) {\n val[key] = question.getDisplayValue(keysAsText);\n }\n }\n return val;\n };\n QuestionPanelDynamicModel.prototype.hasErrorInPanels = function (fireCallback, rec) {\n var res = false;\n var panels = this.panels;\n var keyValues = [];\n for (var i = 0; i < panels.length; i++) {\n this.setOnCompleteAsyncInPanel(panels[i]);\n }\n for (var i = 0; i < panels.length; i++) {\n var pnlError = panels[i].hasErrors(fireCallback, !!rec && rec.focuseOnFirstError, rec);\n pnlError = this.isValueDuplicated(panels[i], keyValues, rec) || pnlError;\n if (!this.isRenderModeList && pnlError && !res) {\n this.currentIndex = i;\n }\n res = pnlError || res;\n }\n return res;\n };\n QuestionPanelDynamicModel.prototype.setOnCompleteAsyncInPanel = function (panel) {\n var _this = this;\n var questions = panel.questions;\n for (var i = 0; i < questions.length; i++) {\n questions[i].onCompletedAsyncValidators = function (hasErrors) {\n _this.raiseOnCompletedAsyncValidators();\n };\n }\n };\n QuestionPanelDynamicModel.prototype.isValueDuplicated = function (panel, keyValues, rec, fireCallback) {\n if (!this.keyName)\n return false;\n var question = panel.getQuestionByValueName(this.keyName);\n if (!question || question.isEmpty())\n return false;\n var value = question.value;\n if (!!this.changingValueQuestion &&\n question != this.changingValueQuestion) {\n question.hasErrors(fireCallback, rec);\n }\n for (var i = 0; i < keyValues.length; i++) {\n if (value == keyValues[i]) {\n question.addError(new __WEBPACK_IMPORTED_MODULE_9__error__[\"f\" /* KeyDuplicationError */](this.keyDuplicationError, this));\n if (!!rec && !rec.firstErrorQuestion) {\n rec.firstErrorQuestion = question;\n }\n return true;\n }\n }\n keyValues.push(value);\n return false;\n };\n QuestionPanelDynamicModel.prototype.createNewPanel = function () {\n var panel = this.createAndSetupNewPanelObject();\n var json = this.template.toJSON();\n new __WEBPACK_IMPORTED_MODULE_7__jsonobject__[\"b\" /* JsonObject */]().toObject(json, panel);\n panel.renderWidth = \"100%\";\n panel.updateCustomWidgets();\n new QuestionPanelDynamicItem(this, panel);\n panel.onFirstRendering();\n return panel;\n };\n QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n var panel = this.createNewPanelObject();\n var self = this;\n panel.onGetQuestionTitleLocation = function () {\n return self.getTemplateQuestionTitleLocation();\n };\n return panel;\n };\n QuestionPanelDynamicModel.prototype.getTemplateQuestionTitleLocation = function () {\n return this.templateTitleLocation != \"default\"\n ? this.templateTitleLocation\n : this.getTitleLocationCore();\n };\n QuestionPanelDynamicModel.prototype.createNewPanelObject = function () {\n return new __WEBPACK_IMPORTED_MODULE_6__panel__[\"c\" /* PanelModel */]();\n };\n QuestionPanelDynamicModel.prototype.setPanelCountBasedOnValue = function () {\n if (this.isValueChangingInternally)\n return;\n var val = this.value;\n var newPanelCount = val && Array.isArray(val) ? val.length : 0;\n if (newPanelCount == 0 && this.loadingPanelCount > 0) {\n newPanelCount = this.loadingPanelCount;\n }\n this.panelCount = newPanelCount;\n };\n QuestionPanelDynamicModel.prototype.setQuestionValue = function (newValue) {\n _super.prototype.setQuestionValue.call(this, newValue, false);\n this.setPanelCountBasedOnValue();\n for (var i = 0; i < this.panels.length; i++) {\n this.panelUpdateValueFromSurvey(this.panels[i]);\n }\n this.updateIsAnswered();\n };\n QuestionPanelDynamicModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n for (var i = 0; i < this.panels.length; i++) {\n this.panelSurveyValueChanged(this.panels[i]);\n }\n if (newValue === undefined) {\n this.setValueBasedOnPanelCount();\n }\n };\n QuestionPanelDynamicModel.prototype.panelUpdateValueFromSurvey = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.updateValueFromSurvey(values[q.getValueName()]);\n q.updateCommentFromSurvey(values[q.getValueName() + __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].commentPrefix]);\n }\n };\n QuestionPanelDynamicModel.prototype.panelSurveyValueChanged = function (panel) {\n var questions = panel.questions;\n var values = this.getPanelItemData(panel.data);\n for (var i = 0; i < questions.length; i++) {\n var q = questions[i];\n q.onSurveyValueChanged(values[q.getValueName()]);\n }\n };\n QuestionPanelDynamicModel.prototype.onSetData = function () {\n _super.prototype.onSetData.call(this);\n if (this.isDesignMode) {\n this.setTemplatePanelSurveyImpl();\n this.rebuildPanels();\n }\n };\n //IQuestionPanelDynamicData\n QuestionPanelDynamicModel.prototype.getItemIndex = function (item) {\n return this.items.indexOf(item);\n };\n QuestionPanelDynamicModel.prototype.getPanelItemData = function (item) {\n var items = this.items;\n var index = items.indexOf(item);\n var qValue = this.value;\n if (index < 0 && Array.isArray(qValue) && qValue.length > items.length) {\n index = items.length;\n }\n if (index < 0)\n return {};\n if (!qValue || !Array.isArray(qValue) || qValue.length <= index)\n return {};\n return qValue[index];\n };\n QuestionPanelDynamicModel.prototype.setPanelItemData = function (item, name, val) {\n var items = this.items;\n var index = items.indexOf(item);\n if (index < 0)\n index = items.length;\n var qValue = __WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].getUnbindValue(this.value);\n if (!qValue || !Array.isArray(qValue)) {\n qValue = [];\n }\n if (qValue.length <= index) {\n for (var i = qValue.length; i <= index; i++) {\n qValue.push({});\n }\n }\n if (!qValue[index])\n qValue[index] = {};\n if (!this.isValueEmpty(val)) {\n qValue[index][name] = val;\n }\n else {\n delete qValue[index][name];\n }\n if (index >= 0 && index < this.panels.length) {\n this.changingValueQuestion = this.panels[index].getQuestionByValueName(name);\n }\n this.value = qValue;\n this.changingValueQuestion = null;\n if (this.survey) {\n var options = {\n question: this,\n panel: item.panel,\n name: name,\n itemIndex: index,\n itemValue: qValue[index],\n value: val,\n };\n this.survey.dynamicPanelItemValueChanged(this, options);\n }\n };\n QuestionPanelDynamicModel.prototype.getSurvey = function () {\n return this.survey;\n };\n QuestionPanelDynamicModel.prototype.getRootData = function () {\n return this.data;\n };\n QuestionPanelDynamicModel.prototype.getPlainData = function (options) {\n if (options === void 0) { options = {\n includeEmpty: true,\n }; }\n var questionPlainData = _super.prototype.getPlainData.call(this, options);\n if (!!questionPlainData) {\n questionPlainData.isNode = true;\n questionPlainData.data = this.panels.map(function (panel, index) {\n var panelDataItem = {\n name: panel.name || index,\n title: panel.title || \"Panel\",\n value: panel.getValue(),\n displayValue: panel.getValue(),\n getString: function (val) {\n return typeof val === \"object\" ? JSON.stringify(val) : val;\n },\n isNode: true,\n data: panel.questions\n .map(function (question) { return question.getPlainData(options); })\n .filter(function (d) { return !!d; }),\n };\n (options.calculations || []).forEach(function (calculation) {\n panelDataItem[calculation.propertyName] = panel[calculation.propertyName];\n });\n return panelDataItem;\n });\n }\n return questionPlainData;\n };\n QuestionPanelDynamicModel.prototype.updateElementCss = function () {\n _super.prototype.updateElementCss.call(this);\n for (var i = 0; i < this.panels.length; i++) {\n var el = this.panels[i];\n el.updateElementCss();\n }\n };\n Object.defineProperty(QuestionPanelDynamicModel.prototype, \"progressText\", {\n get: function () {\n var rangeMax = this.panelCount;\n return __WEBPACK_IMPORTED_MODULE_2__surveyStrings__[\"a\" /* surveyLocalization */]\n .getString(\"panelDynamicProgressText\")[\"format\"](this.currentIndex + 1, rangeMax);\n },\n enumerable: true,\n configurable: true\n });\n return QuestionPanelDynamicModel;\n}(__WEBPACK_IMPORTED_MODULE_5__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_7__jsonobject__[\"c\" /* Serializer */].addClass(\"paneldynamic\", [\n {\n name: \"templateElements\",\n alternativeName: \"questions\",\n visible: false,\n isLightSerializable: false,\n },\n { name: \"templateTitle:text\", serializationProperty: \"locTemplateTitle\" },\n {\n name: \"templateDescription:text\",\n serializationProperty: \"locTemplateDescription\",\n },\n { name: \"allowAddPanel:boolean\", default: true },\n { name: \"allowRemovePanel:boolean\", default: true },\n {\n name: \"panelCount:number\",\n default: 0,\n choices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n },\n { name: \"minPanelCount:number\", default: 0, minValue: 0 },\n {\n name: \"maxPanelCount:number\",\n default: __WEBPACK_IMPORTED_MODULE_10__settings__[\"a\" /* settings */].panelMaximumPanelCount,\n },\n \"defaultPanelValue:panelvalue\",\n \"defaultValueFromLastPanel:boolean\",\n {\n name: \"panelsState\",\n default: \"default\",\n choices: [\"default\", \"collapsed\", \"expanded\", \"firstExpanded\"],\n },\n { name: \"keyName\" },\n {\n name: \"keyDuplicationError\",\n serializationProperty: \"locKeyDuplicationError\",\n },\n { name: \"confirmDelete:boolean\" },\n {\n name: \"confirmDeleteText\",\n serializationProperty: \"locConfirmDeleteText\",\n },\n { name: \"panelAddText\", serializationProperty: \"locPanelAddText\" },\n { name: \"panelRemoveText\", serializationProperty: \"locPanelRemoveText\" },\n { name: \"panelPrevText\", serializationProperty: \"locPanelPrevText\" },\n { name: \"panelNextText\", serializationProperty: \"locPanelNextText\" },\n {\n name: \"showQuestionNumbers\",\n default: \"off\",\n choices: [\"off\", \"onPanel\", \"onSurvey\"],\n },\n { name: \"showRangeInProgress:boolean\", default: true },\n {\n name: \"renderMode\",\n default: \"list\",\n choices: [\"list\", \"progressTop\", \"progressBottom\", \"progressTopBottom\"],\n },\n {\n name: \"templateTitleLocation\",\n default: \"default\",\n choices: [\"default\", \"top\", \"bottom\", \"left\"],\n },\n], function () {\n return new QuestionPanelDynamicModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_8__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"paneldynamic\", function (name) {\n return new QuestionPanelDynamicModel(name);\n});\n\n\n/***/ }),\n/* 194 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_baseselect__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__itemvalue__ = __webpack_require__(15);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionRadiogroupModel; });\n\n\n\n\n\n\n/**\n * A Model for a radiogroup question.\n */\nvar QuestionRadiogroupModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionRadiogroupModel, _super);\n function QuestionRadiogroupModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"ariaRole\", {\n get: function () {\n return \"radiogroup\";\n },\n enumerable: true,\n configurable: true\n });\n QuestionRadiogroupModel.prototype.getType = function () {\n return \"radiogroup\";\n };\n QuestionRadiogroupModel.prototype.getFirstInputElementId = function () {\n return this.inputId + \"_0\";\n };\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"selectedItem\", {\n get: function () {\n if (this.isEmpty())\n return null;\n return __WEBPACK_IMPORTED_MODULE_5__itemvalue__[\"a\" /* ItemValue */].getItemByValue(this.visibleChoices, this.value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"showClearButton\", {\n /**\n * Show \"clear button\" flag.\n */\n get: function () {\n return this.getPropertyValue(\"showClearButton\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"showClearButton\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"canShowClearButton\", {\n get: function () {\n return this.showClearButton && !this.isReadOnly;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRadiogroupModel.prototype, \"clearButtonCaption\", {\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_4__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"clearCaption\");\n },\n enumerable: true,\n configurable: true\n });\n QuestionRadiogroupModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n return QuestionRadiogroupModel;\n}(__WEBPACK_IMPORTED_MODULE_3__question_baseselect__[\"a\" /* QuestionCheckboxBase */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"radiogroup\", [{ name: \"showClearButton:boolean\", default: false }], function () {\n return new QuestionRadiogroupModel(\"\");\n}, \"checkboxbase\");\n__WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"radiogroup\", function (name) {\n var q = new QuestionRadiogroupModel(name);\n q.choices = __WEBPACK_IMPORTED_MODULE_2__questionfactory__[\"a\" /* QuestionFactory */].DefaultChoices;\n return q;\n});\n\n\n/***/ }),\n/* 195 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__itemvalue__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionfactory__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionRatingModel; });\n\n\n\n\n\n\n/**\n * A Model for a rating question.\n */\nvar QuestionRatingModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionRatingModel, _super);\n function QuestionRatingModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n _this.createItemValues(\"rates\");\n var self = _this;\n _this.registerFunctionOnPropertyValueChanged(\"rates\", function () {\n self.fireCallback(self.rateValuesChangedCallback);\n });\n _this.onPropertyChanged.add(function (sender, options) {\n if (options.name == \"rateMin\" ||\n options.name == \"rateMax\" ||\n options.name == \"rateStep\") {\n self.fireCallback(self.rateValuesChangedCallback);\n }\n });\n var locMinRateDescriptionValue = _this.createLocalizableString(\"minRateDescription\", _this, true);\n var locMaxRateDescriptionValue = _this.createLocalizableString(\"maxRateDescription\", _this, true);\n locMinRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? text + \" \" : text;\n };\n locMaxRateDescriptionValue.onGetTextCallback = function (text) {\n return text ? \" \" + text : text;\n };\n return _this;\n }\n QuestionRatingModel.prototype.onSurveyLoad = function () {\n _super.prototype.onSurveyLoad.call(this);\n this.fireCallback(this.rateValuesChangedCallback);\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"rateValues\", {\n /**\n * The list of rate items. Every item has value and text. If text is empty, the value is rendered. The item text supports markdown. If it is empty the array is generated by using rateMin, rateMax and rateStep properties.\n * @see rateMin\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rates\");\n },\n set: function (val) {\n this.setPropertyValue(\"rates\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMin\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the first value in the rating. The default value is 1.\n * @see rateValues\n * @see rateMax\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMin\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateStep)\n val = this.rateMax - this.rateStep;\n this.setPropertyValue(\"rateMin\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateMax\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the last value in the rating. The default value is 5.\n * @see rateValues\n * @see rateMin\n * @see rateStep\n */\n get: function () {\n return this.getPropertyValue(\"rateMax\");\n },\n set: function (val) {\n if (!this.isLoadingFromJson && val < this.rateMin + this.rateStep)\n val = this.rateMin + this.rateStep;\n this.setPropertyValue(\"rateMax\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"rateStep\", {\n /**\n * This property is used to generate rate values if rateValues array is empty. It is the step value. The number of rate values are (rateMax - rateMin) / rateStep. The default value is 1.\n * @see rateValues\n * @see rateMin\n * @see rateMax\n */\n get: function () {\n return this.getPropertyValue(\"rateStep\");\n },\n set: function (val) {\n if (val <= 0)\n val = 1;\n if (!this.isLoadingFromJson && val > this.rateMax - this.rateMin)\n val = this.rateMax - this.rateMin;\n this.setPropertyValue(\"rateStep\", val);\n },\n enumerable: true,\n configurable: true\n });\n QuestionRatingModel.prototype.getDisplayValueCore = function (keysAsText, value) {\n var res = __WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */].getTextOrHtmlByValue(this.visibleRateValues, value);\n return !!res ? res : value;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"visibleRateValues\", {\n get: function () {\n if (this.rateValues.length > 0)\n return this.rateValues;\n var res = [];\n var value = this.rateMin;\n var step = this.rateStep;\n while (value <= this.rateMax &&\n res.length < __WEBPACK_IMPORTED_MODULE_5__settings__[\"a\" /* settings */].ratingMaximumRateValueCount) {\n res.push(new __WEBPACK_IMPORTED_MODULE_1__itemvalue__[\"a\" /* ItemValue */](value));\n value = this.correctValue(value + step, step);\n }\n return res;\n },\n enumerable: true,\n configurable: true\n });\n QuestionRatingModel.prototype.correctValue = function (value, step) {\n if (!value)\n return value;\n if (Math.round(value) == value)\n return value;\n var fr = 0;\n while (Math.round(step) != step) {\n step *= 10;\n fr++;\n }\n return parseFloat(value.toFixed(fr));\n };\n QuestionRatingModel.prototype.getType = function () {\n return \"rating\";\n };\n QuestionRatingModel.prototype.supportGoNextPageAutomatic = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportComment = function () {\n return true;\n };\n QuestionRatingModel.prototype.supportOther = function () {\n return true;\n };\n Object.defineProperty(QuestionRatingModel.prototype, \"minRateDescription\", {\n /**\n * The description of minimum (first) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"minRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"minRateDescription\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMinRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"minRateDescription\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"maxRateDescription\", {\n /**\n * The description of maximum (last) item.\n */\n get: function () {\n return this.getLocalizableStringText(\"maxRateDescription\");\n },\n set: function (val) {\n this.setLocalizableStringText(\"maxRateDescription\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionRatingModel.prototype, \"locMaxRateDescription\", {\n get: function () {\n return this.getLocalizableString(\"maxRateDescription\");\n },\n enumerable: true,\n configurable: true\n });\n return QuestionRatingModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"rating\", [\n { name: \"hasComment:switch\", layout: \"row\" },\n {\n name: \"commentText\",\n dependsOn: \"hasComment\",\n visibleIf: function (obj) {\n return obj.hasComment;\n },\n serializationProperty: \"locCommentText\",\n layout: \"row\",\n },\n {\n name: \"rateValues:itemvalue[]\",\n },\n { name: \"rateMin:number\", default: 1 },\n { name: \"rateMax:number\", default: 5 },\n { name: \"rateStep:number\", default: 1, minValue: 0.1 },\n {\n name: \"minRateDescription\",\n alternativeName: \"mininumRateDescription\",\n serializationProperty: \"locMinRateDescription\",\n },\n {\n name: \"maxRateDescription\",\n alternativeName: \"maximumRateDescription\",\n serializationProperty: \"locMaxRateDescription\",\n },\n], function () {\n return new QuestionRatingModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_4__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"rating\", function (name) {\n return new QuestionRatingModel(name);\n});\n\n\n/***/ }),\n/* 196 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__question__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyStrings__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_signature_pad__ = __webpack_require__(139);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionfactory__ = __webpack_require__(7);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return QuestionSignaturePadModel; });\n\n\n\n\n\n\nvar defaultWidth = 300;\nvar defaultHeight = 200;\nfunction resizeCanvas(canvas) {\n var context = canvas.getContext(\"2d\");\n var devicePixelRatio = window.devicePixelRatio || 1;\n var backingStoreRatio = context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n var ratio = devicePixelRatio / backingStoreRatio;\n var oldWidth = canvas.width;\n var oldHeight = canvas.height;\n canvas.width = oldWidth * ratio;\n canvas.height = oldHeight * ratio;\n canvas.style.width = oldWidth + \"px\";\n canvas.style.height = oldHeight + \"px\";\n context.scale(ratio, ratio);\n}\n/**\n * A Model for signature pad question.\n */\nvar QuestionSignaturePadModel = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(QuestionSignaturePadModel, _super);\n function QuestionSignaturePadModel(name) {\n var _this = _super.call(this, name) || this;\n _this.name = name;\n return _this;\n }\n QuestionSignaturePadModel.prototype.getCssRoot = function (cssClasses) {\n var classes = _super.prototype.getCssRoot.call(this, cssClasses);\n if (\"\" + this.width === \"300\") {\n classes += \" \" + cssClasses.small;\n }\n return classes;\n };\n QuestionSignaturePadModel.prototype.getType = function () {\n return \"signaturepad\";\n };\n QuestionSignaturePadModel.prototype.afterRenderQuestionElement = function (el) {\n if (!!el) {\n this.initSignaturePad(el);\n }\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n QuestionSignaturePadModel.prototype.beforeDestoyQuestionElement = function (el) {\n if (!!el) {\n this.destroySignaturePad(el);\n }\n };\n QuestionSignaturePadModel.prototype.initSignaturePad = function (el) {\n var _this = this;\n var canvas = el.getElementsByTagName(\"canvas\")[0];\n var buttonEl = el.getElementsByTagName(\"button\")[0];\n var signaturePad = new __WEBPACK_IMPORTED_MODULE_4_signature_pad__[\"a\" /* default */](canvas);\n if (this.isReadOnly) {\n signaturePad.off();\n }\n buttonEl.onclick = function () {\n _this.value = undefined;\n };\n this.readOnlyChangedCallback = function () {\n if (!_this.allowClear || _this.isReadOnly) {\n signaturePad.off();\n buttonEl.style.display = \"none\";\n }\n else {\n signaturePad.on();\n buttonEl.style.display = \"block\";\n }\n };\n signaturePad.penColor = this.penColor;\n signaturePad.onBegin = function () {\n canvas.focus();\n };\n signaturePad.onEnd = function () {\n var data = signaturePad.toDataURL();\n _this.value = data;\n };\n var updateValueHandler = function () {\n var data = _this.value;\n canvas.width = _this.width || defaultWidth;\n canvas.height = _this.height || defaultHeight;\n resizeCanvas(canvas);\n signaturePad.fromDataURL(data || \"data:image/gif;base64,R0lGODlhAQABAIAAAP\");\n };\n this.valueChangedCallback = updateValueHandler;\n updateValueHandler();\n this.readOnlyChangedCallback();\n this.signaturePad = signaturePad;\n var propertyChangedHandler = function (sender, options) {\n if (options.name === \"width\" || options.name === \"height\") {\n updateValueHandler();\n }\n };\n this.onPropertyChanged.add(propertyChangedHandler);\n this.signaturePad.propertyChangedHandler = propertyChangedHandler;\n };\n QuestionSignaturePadModel.prototype.destroySignaturePad = function (el) {\n if (this.signaturePad) {\n this.onPropertyChanged.remove(this.signaturePad.propertyChangedHandler);\n this.signaturePad.off();\n }\n this.readOnlyChangedCallback = null;\n this.signaturePad = null;\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"width\", {\n /**\n * Use it to set the specific width for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"width\", 300);\n },\n set: function (val) {\n this.setPropertyValue(\"width\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"height\", {\n /**\n * Use it to set the specific height for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"height\", 200);\n },\n set: function (val) {\n this.setPropertyValue(\"height\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"allowClear\", {\n /**\n * Use it to clear content of the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"allowClear\", true);\n },\n set: function (val) {\n this.setPropertyValue(\"allowClear\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"penColor\", {\n /**\n * Use it to set pen color for the signature pad.\n */\n get: function () {\n return this.getPropertyValue(\"penColor\", \"#1ab394\");\n },\n set: function (val) {\n this.setPropertyValue(\"penColor\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"clearButtonCaption\", {\n /**\n * The clear signature button caption.\n */\n get: function () {\n return __WEBPACK_IMPORTED_MODULE_3__surveyStrings__[\"a\" /* surveyLocalization */].getString(\"clearCaption\");\n },\n enumerable: true,\n configurable: true\n });\n return QuestionSignaturePadModel;\n}(__WEBPACK_IMPORTED_MODULE_2__question__[\"a\" /* Question */]));\n\n__WEBPACK_IMPORTED_MODULE_1__jsonobject__[\"c\" /* Serializer */].addClass(\"signaturepad\", [\n {\n name: \"allowClear:boolean\",\n default: true,\n },\n {\n name: \"width:number\",\n default: 300,\n },\n {\n name: \"height:number\",\n default: 200,\n },\n {\n name: \"penColor\",\n default: \"#1ab394\",\n },\n], function () {\n return new QuestionSignaturePadModel(\"\");\n}, \"question\");\n__WEBPACK_IMPORTED_MODULE_5__questionfactory__[\"a\" /* QuestionFactory */].Instance.registerQuestion(\"signaturepad\", function (name) {\n return new QuestionSignaturePadModel(name);\n});\n\n\n/***/ }),\n/* 197 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__base__ = __webpack_require__(9);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__jsonobject__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__conditions__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__expressions_expressions__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__settings__ = __webpack_require__(10);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return Trigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SurveyTrigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return SurveyTriggerVisible; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return SurveyTriggerComplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return SurveyTriggerSetValue; });\n/* unused harmony export SurveyTriggerSkip */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return SurveyTriggerRunExpression; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return SurveyTriggerCopyValue; });\n\n\n\n\n\n\n\n\n/**\n * A base class for all triggers.\n * A trigger calls a method when the expression change the result: from false to true or from true to false.\n * Please note, it runs only one changing the expression result.\n */\nvar Trigger = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(Trigger, _super);\n function Trigger() {\n var _this = _super.call(this) || this;\n _this.usedNames = [];\n var self = _this;\n _this.registerFunctionOnPropertiesValueChanged([\"operator\", \"value\", \"name\"], function () {\n self.oldPropertiesChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"expression\", function () {\n self.onExpressionChanged();\n });\n return _this;\n }\n Object.defineProperty(Trigger, \"operators\", {\n get: function () {\n if (Trigger.operatorsValue != null)\n return Trigger.operatorsValue;\n Trigger.operatorsValue = {\n empty: function (value, expectedValue) {\n return !value;\n },\n notempty: function (value, expectedValue) {\n return !!value;\n },\n equal: function (value, expectedValue) {\n return value == expectedValue;\n },\n notequal: function (value, expectedValue) {\n return value != expectedValue;\n },\n contains: function (value, expectedValue) {\n return value && value[\"indexOf\"] && value.indexOf(expectedValue) > -1;\n },\n notcontains: function (value, expectedValue) {\n return (!value || !value[\"indexOf\"] || value.indexOf(expectedValue) == -1);\n },\n greater: function (value, expectedValue) {\n return value > expectedValue;\n },\n less: function (value, expectedValue) {\n return value < expectedValue;\n },\n greaterorequal: function (value, expectedValue) {\n return value >= expectedValue;\n },\n lessorequal: function (value, expectedValue) {\n return value <= expectedValue;\n },\n };\n return Trigger.operatorsValue;\n },\n enumerable: true,\n configurable: true\n });\n Trigger.prototype.getType = function () {\n return \"triggerbase\";\n };\n Trigger.prototype.toString = function () {\n var res = this.getType().replace(\"trigger\", \"\");\n var exp = !!this.expression ? this.expression : this.buildExpression();\n if (exp) {\n res += \", \" + exp;\n }\n return res;\n };\n Object.defineProperty(Trigger.prototype, \"operator\", {\n get: function () {\n return this.getPropertyValue(\"operator\", \"equal\");\n },\n set: function (value) {\n if (!value)\n return;\n value = value.toLowerCase();\n if (!Trigger.operators[value])\n return;\n this.setPropertyValue(\"operator\", value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"value\", {\n get: function () {\n return this.getPropertyValue(\"value\", null);\n },\n set: function (val) {\n this.setPropertyValue(\"value\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"name\", {\n get: function () {\n return this.getPropertyValue(\"name\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"name\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Trigger.prototype, \"expression\", {\n get: function () {\n return this.getPropertyValue(\"expression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"expression\", val);\n },\n enumerable: true,\n configurable: true\n });\n Trigger.prototype.checkExpression = function (keys, values, properties) {\n if (properties === void 0) { properties = null; }\n if (!this.isCheckRequired(keys))\n return;\n if (!!this.conditionRunner) {\n this.perform(values, properties);\n }\n };\n Trigger.prototype.check = function (value) {\n var triggerResult = Trigger.operators[this.operator](value, this.value);\n if (triggerResult) {\n this.onSuccess({}, null);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.perform = function (values, properties) {\n var _this = this;\n this.conditionRunner.onRunComplete = function (res) {\n _this.triggerResult(res, values, properties);\n };\n this.conditionRunner.run(values, properties);\n };\n Trigger.prototype.triggerResult = function (res, values, properties) {\n if (res) {\n this.onSuccess(values, properties);\n }\n else {\n this.onFailure();\n }\n };\n Trigger.prototype.onSuccess = function (values, properties) { };\n Trigger.prototype.onFailure = function () { };\n Trigger.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n this.oldPropertiesChanged();\n };\n Trigger.prototype.oldPropertiesChanged = function () {\n this.onExpressionChanged();\n };\n Trigger.prototype.onExpressionChanged = function () {\n this.usedNames = [];\n this.hasFunction = false;\n this.conditionRunner = null;\n };\n Trigger.prototype.buildExpression = function () {\n if (!this.name)\n return \"\";\n if (__WEBPACK_IMPORTED_MODULE_1__helpers__[\"a\" /* Helpers */].isValueEmpty(this.value) && this.isRequireValue)\n return \"\";\n return (\"{\" +\n this.name +\n \"} \" +\n this.operator +\n \" \" +\n __WEBPACK_IMPORTED_MODULE_5__expressions_expressions__[\"h\" /* OperandMaker */].toOperandString(this.value));\n };\n Trigger.prototype.isCheckRequired = function (keys) {\n if (!keys)\n return false;\n this.buildUsedNames();\n if (this.hasFunction === true)\n return true;\n for (var i = 0; i < this.usedNames.length; i++) {\n if (keys.hasOwnProperty(this.usedNames[i]))\n return true;\n }\n return false;\n };\n Trigger.prototype.buildUsedNames = function () {\n if (!!this.conditionRunner)\n return;\n var expression = this.expression;\n if (!expression) {\n expression = this.buildExpression();\n }\n if (!expression)\n return;\n this.conditionRunner = new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"b\" /* ConditionRunner */](expression);\n this.hasFunction = this.conditionRunner.hasFunction();\n this.usedNames = this.conditionRunner.getVariables();\n var processValue = new __WEBPACK_IMPORTED_MODULE_6__conditionProcessValue__[\"a\" /* ProcessValue */]();\n for (var i = 0; i < this.usedNames.length; i++) {\n this.usedNames[i] = processValue.getFirstName(this.usedNames[i]);\n }\n };\n Object.defineProperty(Trigger.prototype, \"isRequireValue\", {\n get: function () {\n return this.operator !== \"empty\" && this.operator != \"notempty\";\n },\n enumerable: true,\n configurable: true\n });\n Trigger.operatorsValue = null;\n return Trigger;\n}(__WEBPACK_IMPORTED_MODULE_2__base__[\"a\" /* Base */]));\n\n/**\n * It extends the Trigger base class and add properties required for SurveyJS classes.\n */\nvar SurveyTrigger = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTrigger, _super);\n function SurveyTrigger() {\n var _this = _super.call(this) || this;\n _this.ownerValue = null;\n return _this;\n }\n Object.defineProperty(SurveyTrigger.prototype, \"owner\", {\n get: function () {\n return this.ownerValue;\n },\n enumerable: true,\n configurable: true\n });\n SurveyTrigger.prototype.setOwner = function (owner) {\n this.ownerValue = owner;\n };\n Object.defineProperty(SurveyTrigger.prototype, \"isOnNextPage\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n return SurveyTrigger;\n}(Trigger));\n\n/**\n * If expression returns true, it makes questions/pages visible.\n * Ohterwise it makes them invisible.\n */\nvar SurveyTriggerVisible = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerVisible, _super);\n function SurveyTriggerVisible() {\n var _this = _super.call(this) || this;\n _this.pages = [];\n _this.questions = [];\n return _this;\n }\n SurveyTriggerVisible.prototype.getType = function () {\n return \"visibletrigger\";\n };\n SurveyTriggerVisible.prototype.onSuccess = function (values, properties) {\n this.onTrigger(this.onItemSuccess);\n };\n SurveyTriggerVisible.prototype.onFailure = function () {\n this.onTrigger(this.onItemFailure);\n };\n SurveyTriggerVisible.prototype.onTrigger = function (func) {\n if (!this.owner)\n return;\n var objects = this.owner.getObjects(this.pages, this.questions);\n for (var i = 0; i < objects.length; i++) {\n func(objects[i]);\n }\n };\n SurveyTriggerVisible.prototype.onItemSuccess = function (item) {\n item.visible = true;\n };\n SurveyTriggerVisible.prototype.onItemFailure = function (item) {\n item.visible = false;\n };\n return SurveyTriggerVisible;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, it completes the survey.\n */\nvar SurveyTriggerComplete = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerComplete, _super);\n function SurveyTriggerComplete() {\n return _super.call(this) || this;\n }\n SurveyTriggerComplete.prototype.getType = function () {\n return \"completetrigger\";\n };\n Object.defineProperty(SurveyTriggerComplete.prototype, \"isOnNextPage\", {\n get: function () {\n return !__WEBPACK_IMPORTED_MODULE_7__settings__[\"a\" /* settings */].executeCompleteTriggerOnValueChanged;\n },\n enumerable: true,\n configurable: true\n });\n SurveyTriggerComplete.prototype.onSuccess = function (values, properties) {\n if (this.owner)\n this.owner.setCompleted();\n };\n return SurveyTriggerComplete;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from property **setValue** will be set to **setToName**\n */\nvar SurveyTriggerSetValue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerSetValue, _super);\n function SurveyTriggerSetValue() {\n return _super.call(this) || this;\n }\n SurveyTriggerSetValue.prototype.getType = function () {\n return \"setvaluetrigger\";\n };\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"setValue\", {\n get: function () {\n return this.getPropertyValue(\"setValue\");\n },\n set: function (val) {\n this.setPropertyValue(\"setValue\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerSetValue.prototype, \"isVariable\", {\n get: function () {\n return this.getPropertyValue(\"isVariable\", false);\n },\n set: function (val) {\n this.setPropertyValue(\"isVariable\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyTriggerSetValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.setTriggerValue(this.setToName, this.setValue, this.isVariable);\n };\n return SurveyTriggerSetValue;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the survey go to question **gotoName** and focus it.\n */\nvar SurveyTriggerSkip = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerSkip, _super);\n function SurveyTriggerSkip() {\n return _super.call(this) || this;\n }\n SurveyTriggerSkip.prototype.getType = function () {\n return \"skiptrigger\";\n };\n Object.defineProperty(SurveyTriggerSkip.prototype, \"gotoName\", {\n get: function () {\n return this.getPropertyValue(\"gotoName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"gotoName\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyTriggerSkip.prototype.onSuccess = function (values, properties) {\n if (!this.gotoName || !this.owner)\n return;\n this.owner.focusQuestion(this.gotoName);\n };\n return SurveyTriggerSkip;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the **runExpression** will be run. If **setToName** property is not empty then the result of **runExpression** will be set to it.\n */\nvar SurveyTriggerRunExpression = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerRunExpression, _super);\n function SurveyTriggerRunExpression() {\n return _super.call(this) || this;\n }\n SurveyTriggerRunExpression.prototype.getType = function () {\n return \"runexpressiontrigger\";\n };\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerRunExpression.prototype, \"runExpression\", {\n get: function () {\n return this.getPropertyValue(\"runExpression\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"runExpression\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyTriggerRunExpression.prototype.onSuccess = function (values, properties) {\n var _this = this;\n if (!this.owner || !this.runExpression)\n return;\n var expression = new __WEBPACK_IMPORTED_MODULE_4__conditions__[\"a\" /* ExpressionRunner */](this.runExpression);\n if (expression.canRun) {\n expression.onRunComplete = function (res) {\n _this.onCompleteRunExpression(res);\n };\n expression.run(values, properties);\n }\n };\n SurveyTriggerRunExpression.prototype.onCompleteRunExpression = function (newValue) {\n if (!this.setToName || newValue !== undefined) {\n this.owner.setTriggerValue(this.setToName, newValue, false);\n }\n };\n return SurveyTriggerRunExpression;\n}(SurveyTrigger));\n\n/**\n * If expression returns true, the value from question **fromName** will be set into **setToName**.\n */\nvar SurveyTriggerCopyValue = /** @class */ (function (_super) {\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__[\"b\" /* __extends */])(SurveyTriggerCopyValue, _super);\n function SurveyTriggerCopyValue() {\n return _super.call(this) || this;\n }\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"setToName\", {\n get: function () {\n return this.getPropertyValue(\"setToName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"setToName\", val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SurveyTriggerCopyValue.prototype, \"fromName\", {\n get: function () {\n return this.getPropertyValue(\"fromName\", \"\");\n },\n set: function (val) {\n this.setPropertyValue(\"fromName\", val);\n },\n enumerable: true,\n configurable: true\n });\n SurveyTriggerCopyValue.prototype.getType = function () {\n return \"copyvaluetrigger\";\n };\n SurveyTriggerCopyValue.prototype.onSuccess = function (values, properties) {\n if (!this.setToName || !this.owner)\n return;\n this.owner.copyTriggerValue(this.setToName, this.fromName);\n };\n return SurveyTriggerCopyValue;\n}(SurveyTrigger));\n\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"trigger\", [\n { name: \"operator\", default: \"equal\", visible: false },\n { name: \"value\", visible: false },\n \"expression:condition\",\n]);\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"completetrigger\", [], function () {\n return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"setvaluetrigger\", [\n { name: \"!setToName:questionvalue\" },\n {\n name: \"setValue:triggervalue\",\n dependsOn: \"setToName\",\n visibleIf: function (obj) {\n return !!obj && !!obj[\"setToName\"];\n },\n },\n { name: \"isVariable:boolean\", visible: false },\n], function () {\n return new SurveyTriggerSetValue();\n}, \"surveytrigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"copyvaluetrigger\", [{ name: \"!setToName:questionvalue\" }, { name: \"!fromName:questionvalue\" }], function () {\n return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n__WEBPACK_IMPORTED_MODULE_3__jsonobject__[\"c\" /* Serializer */].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n/* 198 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {/**\n * vue-class-component v5.0.0\n * (c) 2015-2017 Evan You\n * @license MIT\n */\n\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Vue = _interopDefault(__webpack_require__(2));\n\nfunction createDecorator(factory) {\n return function (_, key, index) {\n if (typeof index !== 'number') {\n index = undefined;\n }\n $decoratorQueue.push(function (options) { return factory(options, key, index); });\n };\n}\nfunction warn(message) {\n if (typeof console !== 'undefined') {\n console.warn('[vue-class-component] ' + message);\n }\n}\n\nfunction collectDataFromConstructor(vm, Component) {\n Component.prototype._init = function () {\n var _this = this;\n var keys = Object.getOwnPropertyNames(vm);\n if (vm.$options.props) {\n for (var key in vm.$options.props) {\n if (!vm.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n }\n keys.forEach(function (key) {\n if (key.charAt(0) !== '_') {\n Object.defineProperty(_this, key, {\n get: function () { return vm[key]; },\n set: function (value) { return vm[key] = value; }\n });\n }\n });\n };\n var data = new Component();\n var plainData = {};\n Object.keys(data).forEach(function (key) {\n if (data[key] !== undefined) {\n plainData[key] = data[key];\n }\n });\n if (process.env.NODE_ENV !== 'production') {\n if (!(Component.prototype instanceof Vue) && Object.keys(plainData).length > 0) {\n warn('Component class must inherit Vue or its descendant class ' +\n 'when class property is used.');\n }\n }\n return plainData;\n}\n\nvar $internalHooks = [\n 'data',\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeDestroy',\n 'destroyed',\n 'beforeUpdate',\n 'updated',\n 'activated',\n 'deactivated',\n 'render'\n];\nvar $decoratorQueue = [];\nfunction componentFactory(Component, options) {\n if (options === void 0) { options = {}; }\n options.name = options.name || Component._componentTag;\n var proto = Component.prototype;\n Object.getOwnPropertyNames(proto).forEach(function (key) {\n if (key === 'constructor') {\n return;\n }\n if ($internalHooks.indexOf(key) > -1) {\n options[key] = proto[key];\n return;\n }\n var descriptor = Object.getOwnPropertyDescriptor(proto, key);\n if (typeof descriptor.value === 'function') {\n (options.methods || (options.methods = {}))[key] = descriptor.value;\n }\n else if (descriptor.get || descriptor.set) {\n (options.computed || (options.computed = {}))[key] = {\n get: descriptor.get,\n set: descriptor.set\n };\n }\n });\n (options.mixins || (options.mixins = [])).push({\n data: function () {\n return collectDataFromConstructor(this, Component);\n }\n });\n $decoratorQueue.forEach(function (fn) { return fn(options); });\n $decoratorQueue = [];\n var superProto = Object.getPrototypeOf(Component.prototype);\n var Super = superProto instanceof Vue\n ? superProto.constructor\n : Vue;\n return Super.extend(options);\n}\n\nfunction Component(options) {\n if (typeof options === 'function') {\n return componentFactory(options);\n }\n return function (Component) {\n return componentFactory(Component, options);\n };\n}\n(function (Component) {\n function registerHooks(keys) {\n $internalHooks.push.apply($internalHooks, keys);\n }\n Component.registerHooks = registerHooks;\n})(Component || (Component = {}));\nvar Component$1 = Component;\n\nexports['default'] = Component$1;\nexports.createDecorator = createDecorator;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))\n\n/***/ }),\n/* 199 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.controls }, [\n _c(\n \"button\",\n {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", title: _vm.question.clearButtonCaption }\n },\n [_vm._v(\"✖\")]\n )\n ])\n ])\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_c(\"canvas\", { attrs: { tabindex: \"0\" } })])\n }\n]\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-0462349d\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 200 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-05052c0a\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 201 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-radiogroup-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n })\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.canShowClearButton\n ? _c(\"div\", [\n _c(\"input\", {\n class: _vm.question.cssClasses.clearButton,\n attrs: { type: \"button\", value: _vm.question.clearButtonCaption },\n on: {\n click: function() {\n _vm.question.clearValue()\n }\n }\n })\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-06c6d526\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 202 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n class: _vm.question.cssClasses.root,\n domProps: { innerHTML: _vm._s(_vm.question.locHtml.renderedHtml) }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-0742e16d\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 203 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.root\n : \"panel-comment-root\",\n attrs: {\n type: \"text\",\n readonly: _vm.question.isReadOnly,\n disabled: _vm.question.isReadOnly,\n id: _vm.question.inputId,\n maxlength: _vm.question.getMaxLength(),\n cols: _vm.question.cols,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n rows: _vm.question.rows,\n placeholder: _vm.question.isReadOnly\n ? \"\"\n : _vm.question.placeHolder,\n \"aria-required\": _vm.question.isRequired,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", [\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.value))])\n : _vm._e()\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-099c2c8d\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 204 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [_c(\"survey-matrixtable\", { attrs: { question: _vm.question } })],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-0b4da6d8\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 205 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.getTitleStyle(),\n on: { click: _vm.changeExpanded }\n },\n [\n _vm.question.no\n ? _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm._v(_vm._s(_vm.question.no))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locTitle }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.iconCss\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n class: _vm.question.cssClasses.panel.content,\n style: { paddingLeft: _vm.question.innerPaddingLeft }\n },\n [\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n {\n key: _vm.question.id + \"_\" + index,\n class: _vm.css.row\n },\n [\n _c(\"survey-row\", {\n attrs: { row: row, survey: _vm.survey, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.question.hasEditButton\n ? _c(\"div\", { class: _vm.question.cssClasses.panel.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationEdit,\n attrs: { type: \"button\", value: _vm.survey.editText },\n on: { click: _vm.cancelPreview }\n })\n ])\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-0c78899c\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 206 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [_vm._v(_vm._s(_vm.text))])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-0d2abe21\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 207 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return _c(\"div\", { key: item.value, class: _vm.getItemClass(item) }, [\n _c(\"label\", { class: _vm.question.cssClasses.label }, [\n _vm.question.multiSelect\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: Array.isArray(_vm.question.value)\n ? _vm._i(_vm.question.value, item.value) > -1\n : _vm.question.value\n },\n on: {\n click: function($event) {\n var $$a = _vm.question.value,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = item.value,\n $$i = _vm._i($$a, $$v)\n if ($$c) {\n $$i < 0 && (_vm.question.value = $$a.concat($$v))\n } else {\n $$i > -1 &&\n (_vm.question.value = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.question.value = $$c\n }\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.value,\n expression: \"question.value\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n staticStyle: { display: \"none\" },\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + item.value,\n disabled: _vm.question.isReadOnly || !item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: item.value,\n checked: _vm._q(_vm.question.value, item.value)\n },\n on: {\n click: function($event) {\n _vm.question.value = item.value\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"div\", [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined,\n alt: item.text || item.value\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: item.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.showLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.itemText,\n attrs: { title: item.text || item.value }\n },\n [_vm._v(_vm._s(item.text || item.value))]\n )\n : _vm._e()\n ])\n ])\n ])\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-153fe052\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 208 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"survey-panel\", {\n attrs: { question: _vm.contentPanel, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-1a9e2196\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 209 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.text }, [\n _vm._v(_vm._s(_vm.question.displayValue))\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-1d20865a\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 210 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _vm.question.contentMode === \"image\"\n ? _c(\"img\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.contentMode === \"video\"\n ? _c(\"embed\", {\n class: _vm.question.cssClasses.image,\n style: { objectFit: _vm.question.imageFit },\n attrs: {\n src: _vm.question.imageLink,\n width: _vm.question.imageWidth\n ? _vm.question.imageWidth + \"px\"\n : undefined,\n height: _vm.question.imageHeight\n ? _vm.question.imageHeight + \"px\"\n : undefined\n }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-1dc8d709\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 211 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.hasHtml\n ? _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.customHtml) } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasDefaultRender\n ? _c(_vm.componentName, {\n tag: \"component\",\n attrs: { question: _vm.question, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-1e61a7b7\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 212 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n _c(\"label\", { class: _vm.itemClass }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.checkedValue,\n expression: \"question.checkedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId,\n disabled: _vm.question.isReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: {\n value: _vm.question.checkedValue,\n indeterminate: _vm.question.isIndeterminate,\n checked: Array.isArray(_vm.question.checkedValue)\n ? _vm._i(_vm.question.checkedValue, _vm.question.checkedValue) > -1\n : _vm.question.checkedValue\n },\n on: {\n click: function($event) {\n var $$a = _vm.question.checkedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.question.checkedValue,\n $$i = _vm._i($$a, $$v)\n if ($$c) {\n $$i < 0 && (_vm.question.checkedValue = $$a.concat($$v))\n } else {\n $$i > -1 &&\n (_vm.question.checkedValue = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.question.checkedValue = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(false),\n on: {\n click: function($event) {\n _vm.onLabelClick($event, false)\n }\n }\n },\n [_vm._v(_vm._s(_vm.question.locLabelFalse.renderedHtml))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.switch,\n on: {\n click: function($event) {\n _vm.onSwitchClick($event)\n }\n }\n },\n [_c(\"span\", { class: _vm.question.cssClasses.slider })]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.getLabelClass(true),\n on: {\n click: function($event) {\n _vm.onLabelClick($event, true)\n }\n }\n },\n [_vm._v(_vm._s(_vm.question.locLabelTrue.renderedHtml))]\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-1edb9dd6\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 213 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.root }, [\n !_vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.question.cssClasses.fileInput,\n attrs: {\n type: \"file\",\n id: _vm.question.inputId,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null,\n multiple: _vm.question.allowMultiple ? \"multiple\" : undefined,\n title: _vm.question.inputTitle,\n accept: _vm.question.acceptedTypes\n },\n on: { change: _vm.doChange }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.getPlaceholderClass(),\n staticStyle: { color: \"transparent\" },\n attrs: { type: \"file\", disabled: \"\", placeholder: _vm.question.title }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.cssClasses.fileDecorator,\n on: { drop: _vm.onDrop, dragover: _vm.onDragOver }\n },\n [\n _c(\"div\", { class: _vm.question.cssClasses.wrapper }, [\n _c(\n \"label\",\n {\n class:\n _vm.question.cssClasses.chooseFile +\n (_vm.question.isReadOnly\n ? \" \" + _vm.question.cssClasses.disabled\n : \"\"),\n attrs: {\n role: \"button\",\n for: _vm.question.inputId,\n \"aria-label\": _vm.question.chooseButtonCaption\n }\n },\n [_vm._v(_vm._s(_vm.question.chooseButtonCaption))]\n ),\n _vm._v(\" \"),\n _vm.question.isEmpty()\n ? _c(\"span\", { class: _vm.question.cssClasses.noFileChosen }, [\n _vm._v(_vm._s(_vm.question.noFileChosenCaption))\n ])\n : _vm._e()\n ])\n ]\n ),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButton,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(_vm._s(_vm.question.cleanButtonCaption))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isEmpty()\n ? _c(\n \"div\",\n _vm._l(_vm.question.previewValue, function(val, index) {\n return _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: val,\n expression: \"val\"\n }\n ],\n key: _vm.question.inputId + \"_\" + index,\n class: _vm.question.cssClasses.preview\n },\n [\n val.name\n ? _c(\"div\", { class: _vm.question.cssClasses.fileSign }, [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.canPreviewImage(val)\n ? _c(\"img\", {\n attrs: {\n src: val.content,\n height: _vm.question.imageHeight,\n width: _vm.question.imageWidth,\n alt: \"File preview\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n val.name && !_vm.question.isReadOnly\n ? _c(\"div\", [\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses.removeFile,\n on: {\n click: function($event) {\n _vm.doRemoveFile(val)\n }\n }\n },\n [_vm._v(_vm._s(_vm.question.removeFileCaption))]\n ),\n _vm._v(\" \"),\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.removeFileSvg,\n attrs: { viewBox: \"0 0 16 16\" },\n on: {\n click: function($event) {\n _vm.doRemoveFile(val)\n }\n }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M11,10l-1,1L8,9l-2,2l-1-1l2-2L5,6l1-1l2,2l2-2l1,1L9,8 L11,10z\"\n }\n })\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n val.name\n ? _c(\n \"div\",\n { class: _vm.question.cssClasses.fileSignBottom },\n [\n _c(\n \"a\",\n {\n attrs: {\n href: val.content,\n title: val.name,\n download: val.name,\n width: _vm.question.imageWidth\n },\n on: {\n click: function($event) {\n _vm.doDownloadFile($event, val)\n }\n }\n },\n [_vm._v(_vm._s(val.name))]\n )\n ]\n )\n : _vm._e()\n ]\n )\n })\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isReadOnly && !_vm.question.isEmpty()\n ? _c(\n \"button\",\n {\n class: _vm.question.cssClasses.removeButtonBottom,\n attrs: { type: \"button\" },\n on: { click: _vm.doClean }\n },\n [_vm._v(_vm._s(_vm.question.cleanButtonCaption))]\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-20f70284\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 214 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.getHeaderClass(_vm.element) }, [\n _vm.element.hasTitle\n ? _c(\n \"h5\",\n {\n class: _vm.getTitleClass(_vm.element),\n attrs: {\n \"aria-label\": _vm.element.locTitle.renderedHtml,\n id: _vm.element.ariaTitleId\n }\n },\n [\n _vm.element.isRequireTextOnStart\n ? _c(\"span\", { class: _vm.element.cssClasses.requiredText }, [\n _vm._v(_vm._s(_vm.element.requiredText))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.no\n ? _c(\n \"span\",\n {\n class: _vm.element.cssClasses.number,\n staticStyle: { position: \"static\" }\n },\n [_vm._v(_vm._s(_vm.element.no))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.isRequireTextBeforeTitle\n ? _c(\"span\", { class: _vm.element.cssClasses.requiredText }, [\n _vm._v(_vm._s(_vm.element.requiredText))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } }),\n _vm._v(\" \"),\n _vm.element.isRequireTextAfterTitle\n ? _c(\"span\", { class: _vm.element.cssClasses.requiredText }, [\n _vm._v(_vm._s(_vm.element.requiredText))\n ])\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.hasDescriptionUnderTitle\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-27adc537\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 215 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.progress }, [\n _c(\n \"div\",\n {\n class: _vm.css.progressBar,\n style: { width: _vm.progress },\n attrs: {\n role: \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextInBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.css.progressText + \" \" + _vm.css.progressTextUnderBar },\n [_vm._v(_vm._s(_vm.survey.progressText))]\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-27e325ef\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 216 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"form-group\" }, [\n !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"textarea\", {\n class: _vm.question.cssClasses.other || _vm.commentClass,\n attrs: {\n readonly: _vm.question.isReadOnly,\n disabled: _vm.question.isReadOnly,\n maxlength: _vm.question.getOthersMaxLength(),\n placeholder: _vm.question.otherPlaceHolder,\n \"aria-label\": _vm.question.locTitle.renderedHtml\n },\n domProps: { value: _vm.question.comment },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnlyRenderDiv()\n ? _c(\"div\", [_vm._v(_vm._s(_vm.question.comment))])\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-2ed776ff\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 217 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"td\",\n {\n class: _vm.getCellClass(),\n style: _vm.getCellStyle(),\n attrs: { headers: _vm.getHeaders() }\n },\n [\n _vm.cell.hasQuestion\n ? _c(\n \"div\",\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.cell.isChoice\n ? _c(_vm.getWidgetComponentName(_vm.cell.question), {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isVisible,\n expression: \"isVisible\"\n }\n ],\n tag: \"component\",\n attrs: { question: _vm.cell.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && !_vm.cell.isCheckbox\n ? _c(\"survey-radiogroup-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isChoice && _vm.cell.isCheckbox\n ? _c(\"survey-checkbox-item\", {\n key: _vm.cell.item.value,\n class: _vm.getItemClass(_vm.cell.item),\n attrs: {\n question: _vm.cell.question,\n item: _vm.cell.item,\n index: \"\" + _vm.cell.index,\n hideLabel: true\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.cell.question, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.isRemoveRow\n ? _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonRemove,\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.removeRowClick()\n }\n }\n },\n [\n _c(\"span\", [_vm._v(_vm._s(_vm.question.removeRowText))]),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconRemove })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.cell.hasTitle\n ? _c(\"survey-string\", { attrs: { locString: _vm.cell.locTitle } })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-3ca54ee5\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 218 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"input\", {\n class: _vm.question.cssClasses.root,\n attrs: {\n disabled: _vm.question.isReadOnly,\n type: _vm.question.inputType,\n maxlength: _vm.question.getMaxLength(),\n min: _vm.question.min,\n max: _vm.question.max,\n step: _vm.question.step,\n size: _vm.question.size,\n id: _vm.question.inputId,\n placeholder:\n _vm.question.inputType === \"range\" || _vm.question.isReadOnly\n ? \"\"\n : _vm.question.placeHolder,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0 ? _vm.question.id + \"_errors\" : null\n },\n domProps: { value: _vm.question.value },\n on: { change: _vm.change, keyup: _vm.keyup }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-40ece422\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 219 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.page.cssClasses.page.root },\n [\n _vm.showHeader\n ? _c(\n \"h4\",\n { class: _vm.page.cssClasses.page.title },\n [_c(\"survey-string\", { attrs: { locString: _vm.page.locTitle } })],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showDescription\n ? _c(\n \"div\",\n { class: _vm.page.cssClasses.page.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.page.locDescription }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.rows, function(row, index) {\n return row.visible\n ? _c(\n \"div\",\n { key: _vm.page.id + \"_\" + index, class: _vm.css.row },\n [\n _c(\"survey-row\", {\n attrs: { row: row, survey: _vm.survey, css: _vm.css }\n })\n ],\n 1\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-4e962a51\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 220 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isShow,\n expression: \"isShow\"\n }\n ],\n class: _vm.classes,\n attrs: { role: \"alert\", id: _vm.question.id + \"_errors\" }\n },\n _vm._l(_vm.question.errors, function(error) {\n return _c(\"div\", [\n _c(\"span\", {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.icon\n : \"panel-error-icon\",\n attrs: { \"aria-hidden\": \"true\" }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.question.cssClasses\n ? _vm.question.cssClasses.error.item\n : \"panel-error-item\"\n },\n [_c(\"survey-string\", { attrs: { locString: error.locText } })],\n 1\n )\n ])\n })\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-5682e6ad\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 221 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"radio\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + _vm.index,\n role: \"radio\",\n disabled: _vm.question.isReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: _vm._q(_vm.question.renderedValue, _vm.item.value)\n },\n on: {\n click: function($event) {\n _vm.question.renderedValue = _vm.item.value\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [_c(\"circle\", { attrs: { r: \"6\", cx: \"0\", cy: \"0\" } })]\n )\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.getControlLabelClass(_vm.item),\n attrs: { title: _vm.item.locText.koRenderedHtml }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"question.hasOther && question.renderedValue && question.isOtherSelected\"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-5bbe97b9\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 222 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.surveyWindow.isShowing,\n expression: \"surveyWindow.isShowing\"\n }\n ],\n class: _vm.css.window.root,\n staticStyle: {\n position: \"fixed\",\n bottom: \"3px\",\n right: \"10px\",\n \"max-width\": \"60%\"\n }\n },\n [\n _c(\"div\", { class: _vm.css.window.header.root }, [\n _c(\n \"span\",\n {\n staticStyle: { width: \"100%\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.windowSurvey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"span\", {\n class: _vm.expandedCss,\n attrs: { \"aria-hidden\": \"true\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _vm.isExpandedSurvey\n ? _c(\n \"span\",\n {\n staticStyle: { float: \"right\", cursor: \"pointer\" },\n on: { click: _vm.doExpand }\n },\n [\n _c(\n \"span\",\n {\n class: _vm.css.window.header.title,\n staticStyle: { \"padding-right\": \"10px\" }\n },\n [_vm._v(\"X\")]\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isExpandedSurvey,\n expression: \"isExpandedSurvey\"\n }\n ],\n class: _vm.css.window.body\n },\n [_c(\"survey\", { attrs: { survey: _vm.windowSurvey } })],\n 1\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-62f588b2\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 223 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.root }, [\n _c(\"form\", { attrs: { onsubmit: \"return false;\" } }, [\n !_vm.survey.hasLogo\n ? _c(\"div\", { staticClass: \"sv_custom_header\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.css.container },\n [\n _c(\"survey-header\", { attrs: { survey: _vm.survey } }),\n _vm._v(\" \"),\n _vm.survey.state === \"starting\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isNavigationButtonsShowing === \"top\" ||\n _vm.survey.isNavigationButtonsShowing === \"both\"\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n attrs: {\n id: _vm.survey.startedPage.id,\n survey: _vm.survey,\n page: _vm.survey.startedPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowing === \"bottom\" ||\n _vm.survey.isNavigationButtonsShowing === \"both\"\n ? _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n class: _vm.survey.cssNavigationStart,\n attrs: {\n type: \"button\",\n value: _vm.survey.startSurveyText\n },\n on: { click: _vm.start }\n })\n ])\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"running\" || _vm.survey.state === \"preview\"\n ? [\n _c(\n \"div\",\n { class: _vm.css.body },\n [\n _vm.survey.isShowProgressBarOnTop\n ? _c(\"survey-progress\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnTop\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowing === \"top\" ||\n _vm.survey.isNavigationButtonsShowing === \"both\"\n ? _c(\"survey-navigation\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-page\", {\n attrs: {\n id: _vm.survey.currentPage.id,\n survey: _vm.survey,\n page: _vm.survey.currentPage,\n css: _vm.css\n }\n }),\n _vm._v(\" \"),\n _vm.survey.isTimerPanelShowingOnBottom\n ? _c(\"survey-timerpanel\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isShowProgressBarOnBottom\n ? _c(\"survey-progress\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isNavigationButtonsShowing === \"bottom\" ||\n _vm.survey.isNavigationButtonsShowing === \"both\"\n ? _c(\"survey-navigation\", {\n attrs: { survey: _vm.survey, css: _vm.css }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasCompletedPage\n ? _c(\"div\", [\n _c(\"div\", {\n class: _vm.getCompletedPageClasses(),\n domProps: {\n innerHTML: _vm._s(_vm.getProcessedCompletedHtml())\n }\n }),\n _vm._v(\" \"),\n _vm.survey.completedState != \"\"\n ? _c(\"div\", { class: _vm.css.saveData.root }, [\n _c(\"div\", { class: _vm.getCompletedStateClasses() }, [\n _c(\"span\", [\n _vm._v(_vm._s(_vm.survey.completedStateText))\n ]),\n _vm._v(\" \"),\n _vm.survey.completedState == \"error\"\n ? _c(\"input\", {\n class: _vm.css.saveData.saveAgainButton,\n attrs: {\n type: \"button\",\n value: _vm.survey.getLocString(\n \"saveAgainButton\"\n )\n },\n on: { click: _vm.doTrySaveAgain }\n })\n : _vm._e()\n ])\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"completedbefore\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: {\n innerHTML: _vm._s(_vm.survey.processedCompletedBeforeHtml)\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"loading\"\n ? _c(\"div\", {\n class: _vm.css.body,\n domProps: { innerHTML: _vm._s(_vm.survey.processedLoadingHtml) }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.state === \"empty\"\n ? _c(\"div\", { class: _vm.css.bodyEmpty }, [\n _vm._v(_vm._s(_vm.survey.emptySurveyText))\n ])\n : _vm._e()\n ],\n 2\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-6874e1c8\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 224 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return (_vm.survey.locTitle.renderedHtml.length > 0 &&\n _vm.survey.showTitle) ||\n _vm.survey.hasLogo\n ? _c(\"div\", { class: _vm.survey.css.header }, [\n _vm.survey.isLogoBefore\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth + \"px\"\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight + \"px\"\n : undefined\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.locTitle.renderedHtml.length > 0 && _vm.survey.showTitle\n ? _c(\"div\", { class: _vm.survey.css.headerText }, [\n _c(\n \"h3\",\n { class: _vm.survey.css.title },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locTitle }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"h5\",\n { class: _vm.survey.css.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.survey.locDescription }\n })\n ],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { class: _vm.survey.logoClassNames }, [\n _c(\"img\", {\n class: _vm.survey.css.logoImage,\n style: { objectFit: _vm.survey.logoFit },\n attrs: {\n src: _vm.survey.locLogo.renderedHtml,\n width: _vm.survey.logoWidth\n ? _vm.survey.logoWidth + \"px\"\n : undefined,\n height: _vm.survey.logoHeight\n ? _vm.survey.logoHeight + \"px\"\n : undefined\n }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isLogoAfter\n ? _c(\"div\", { staticClass: \"sv-logo--right-tail\" })\n : _vm._e()\n ])\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-69cff8cf\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 225 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n !_vm.question.isReadOnly\n ? _c(\"div\", { class: _vm.question.cssClasses.selectWrapper }, [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.control,\n attrs: {\n id: _vm.question.inputId,\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n on: {\n change: function($event) {\n _vm.question.renderedValue = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })[0]\n }\n }\n },\n [\n _vm.question.showOptionsCaption\n ? _c(\"option\", { domProps: { value: undefined } }, [\n _vm._v(_vm._s(_vm.question.optionsCaption))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item) {\n return _c(\n \"option\",\n {\n attrs: { disabled: !item.isEnabled },\n domProps: { value: item.value }\n },\n [_vm._v(_vm._s(item.text))]\n )\n })\n ],\n 2\n )\n ])\n : _c(\n \"div\",\n {\n class: _vm.question.cssClasses.control,\n attrs: { disabled: \"\", id: _vm.question.inputId }\n },\n [\n _vm._v(\n _vm._s(\n _vm.isOtherSelected\n ? _vm.question.otherText\n : _vm.question.displayValue\n )\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isOtherSelected,\n expression: \"isOtherSelected\"\n }\n ],\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-6b3215d3\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 226 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\n \"div\",\n { class: _vm.getRootClass(_vm.question) },\n _vm._l(_vm.question.visibleRateValues, function(item, index) {\n return _c(\n \"label\",\n { key: item.value, class: _vm.getCss(_vm.question, item) },\n [\n _c(\"input\", {\n staticClass: \"sv-visuallyhidden\",\n attrs: {\n type: \"radio\",\n name: _vm.question.name,\n id: _vm.question.name + index,\n disabled: _vm.question.isReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": item.locText.text,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: { value: item.value },\n on: { change: _vm.change }\n }),\n _vm._v(\" \"),\n index === 0\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.minText },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locMinRateDescription }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"span\",\n { class: _vm.question.cssClasses.itemText },\n [_c(\"survey-string\", { attrs: { locString: item.locText } })],\n 1\n ),\n _vm._v(\" \"),\n index === _vm.question.visibleRateValues.length - 1\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.maxText },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locMaxRateDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n })\n ),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasOther,\n expression: \"question.hasOther\"\n }\n ],\n class: _vm.question.cssClasses.other,\n attrs: { question: _vm.question }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-7092bfdf\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 227 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: this.cssClass, staticStyle: { clear: \"both\" } }, [\n _c(\"div\", { class: _vm.question.cssClasses.progressContainer }, [\n _c(\"div\", { attrs: { title: _vm.question.panelPrevText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonPrevCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.prevPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ]),\n _vm._v(\" \"),\n _vm.question.isRangeShowing\n ? _c(\"div\", { class: _vm.question.cssClasses.progress }, [\n _c(\"div\", {\n class: _vm.question.cssClasses.progressBar,\n style: { width: _vm.progress },\n attrs: { role: \"progressbar\" }\n })\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { title: _vm.question.panelNextText } }, [\n _c(\n \"svg\",\n {\n class: _vm.getButtonNextCss(_vm.question),\n attrs: { viewBox: \"0 0 10 10\" },\n on: { click: _vm.nextPanelClick }\n },\n [_c(\"polygon\", { attrs: { points: \"2,2 0,4 5,9 10,4 8,2 5,5 \" } })]\n )\n ])\n ]),\n _vm._v(\" \"),\n _vm.question.canAddPanel\n ? _c(\"input\", {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.progressText }, [\n _vm._v(_vm._s(_vm.question.progressText))\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-742bffac\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 228 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.css.footer }, [\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.survey.isFirstPage && _vm.survey.isShowPrevButton,\n expression: \"!survey.isFirstPage && survey.isShowPrevButton\"\n }\n ],\n class: _vm.survey.cssNavigationPrev,\n attrs: { type: \"button\", value: _vm.survey.pagePrevText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.prevPage }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.survey.isLastPage,\n expression: \"!survey.isLastPage\"\n }\n ],\n class: _vm.survey.cssNavigationNext,\n attrs: { type: \"button\", value: _vm.survey.pageNextText },\n on: { mousedown: _vm.nextButtonMouseDown, click: _vm.nextPage }\n }),\n _vm._v(\" \"),\n _vm.survey.isPreviewButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.survey.isLastPage,\n expression: \"survey.isLastPage\"\n }\n ],\n class: _vm.survey.cssNavigationPreview,\n attrs: { type: \"button\", value: _vm.survey.previewText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.showPreview }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.survey.isCompleteButtonVisible\n ? _c(\"input\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.survey.isLastPage,\n expression: \"survey.isLastPage\"\n }\n ],\n class: _vm.survey.cssNavigationComplete,\n attrs: { type: \"button\", value: _vm.survey.completeText },\n on: { mousedown: _vm.buttonMouseDown, click: _vm.completeLastPage }\n })\n : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-75eadfd6\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 229 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"sv-vue-row-additional-div\" },\n _vm._l(_vm.row.elements, function(element) {\n return element.visible\n ? _c(\"survey-element\", {\n key: element.idValue,\n style: {\n paddingLeft: element.paddingLeft,\n paddingRight: element.paddingRight,\n flexBasis: element.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: element.renderWidth,\n minWidth: element.minWidth,\n maxWidth: element.maxWidth,\n display: \"inline-block\"\n },\n attrs: {\n id: element.id,\n role: element.ariaRole,\n \"aria-labelledby\": element.hasTitle ? element.ariaTitleId : null,\n name: element.name,\n element: element,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n : _vm._e()\n })\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-7cc0bd88\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 230 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { class: _vm.question.cssClasses.tableWrapper }, [\n _c(\"fieldset\", [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _c(\"table\", { class: _vm.question.cssClasses.root }, [\n _vm.question.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n [\n _c(\"td\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ]\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(column) {\n return _c(\n \"th\",\n { class: _vm.question.cssClasses.headerCell },\n [\n _c(\"survey-string\", {\n attrs: { locString: column.locText }\n })\n ],\n 1\n )\n })\n ],\n 2\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.question.visibleRows, function(row, rowIndex) {\n return _c(\n \"tr\",\n { class: _vm.question.cssClasses.row },\n [\n _c(\n \"td\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.hasRows,\n expression: \"question.hasRows\"\n }\n ],\n class: _vm.question.cssClasses.cell\n },\n [_c(\"survey-string\", { attrs: { locString: row.locText } })],\n 1\n ),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return _vm.question.hasCellText\n ? _c(\n \"td\",\n {\n class:\n _vm.getItemClass(row, column) +\n \" \" +\n _vm.question.cssClasses.cell,\n on: {\n click: function() {\n _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.question.getCellDisplayLocText(\n row.name,\n column\n ).renderedHtml\n )\n )\n ])\n ]\n )\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleColumns, function(\n column,\n columnIndex\n ) {\n return !_vm.question.hasCellText\n ? _c(\n \"td\",\n {\n class: _vm.question.cssClasses.cell,\n attrs: { headers: column.locText.renderedHtml },\n on: {\n click: function() {\n _vm.cellClick(row, column)\n }\n }\n },\n [\n _c(\n \"label\",\n { class: _vm.getItemClass(row, column) },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: row.value,\n expression: \"row.value\"\n }\n ],\n class: _vm.question.cssClasses.itemValue,\n attrs: {\n type: \"radio\",\n name: row.fullName,\n disabled: _vm.question.isReadOnly,\n id:\n _vm.question.inputId +\n \"_\" +\n row.name +\n \"_\" +\n columnIndex,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\":\n _vm.question.locTitle.renderedHtml\n },\n domProps: {\n value: column.value,\n checked: _vm._q(row.value, column.value)\n },\n on: {\n click: function($event) {\n row.value = column.value\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class:\n _vm.question.cssClasses.materialDecorator\n },\n [\n _c(\n \"svg\",\n {\n class:\n _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"-12 -12 24 24\" }\n },\n [\n _c(\"circle\", {\n attrs: { r: \"6\", cx: \"0\", cy: \"0\" }\n })\n ]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"circle\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" }),\n _vm._v(\" \"),\n _c(\"span\", { style: { display: \"none\" } }, [\n _vm._v(\n _vm._s(_vm.question.locTitle.renderedHtml)\n )\n ])\n ]\n )\n ]\n )\n : _vm._e()\n })\n ],\n 2\n )\n })\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-7fa2f403\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 231 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { class: _vm.question.cssClasses.root },\n _vm._l(_vm.question.getRows(), function(row, rowindex) {\n return _c(\n \"tr\",\n {\n key: _vm.question.inputId + \"rowkey\" + rowindex,\n class: _vm.question.cssClasses.row\n },\n [\n _vm._l(row, function(item) {\n return [\n _c(\n \"td\",\n {\n key: \"label\" + item.editor.id,\n class:\n _vm.question.cssClasses.itemTitle +\n \" \" +\n _vm.question.cssClasses.cell\n },\n [\n item.editor.isRequireTextBeforeTitle ||\n item.editor.isRequireTextOnStart\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-string\", { attrs: { locString: item.locTitle } }),\n _vm._v(\" \"),\n item.editor.isRequireTextAfterTitle\n ? _c(\n \"span\",\n { class: _vm.question.cssClasses.requiredText },\n [_vm._v(_vm._s(item.editor.requiredText))]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"td\",\n {\n key: item.editor.id,\n attrs: { css: _vm.question.cssClasses.cell }\n },\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getWidgetComponentName(item.editor), {\n tag: \"component\",\n attrs: { question: item.editor }\n }),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: item.editor, location: \"bottom\" }\n })\n : _vm._e()\n ],\n 1\n )\n ]\n })\n ],\n 2\n )\n })\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-93fe4c02\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 232 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.question.isVisible\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.panel.container,\n style: _vm.rootStyle\n },\n [\n _c(\n \"h4\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasTitle,\n expression: \"hasTitle\"\n }\n ],\n class: _vm.getTitleStyle(),\n on: { click: _vm.changeExpanded }\n },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locTitle }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIcon,\n expression: \"showIcon\"\n }\n ],\n class: _vm.iconCss\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.question.cssClasses.panel.description },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.question.locDescription }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"survey-errors\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n _c(\n \"f-panel\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ],\n style: { paddingLeft: _vm.question.innerPaddingLeft }\n },\n [\n _c(\"survey-flowpanelelement\", {\n attrs: { node: _vm.rootNode, panel: _vm.question, css: \"css\" }\n })\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-96ae1a78\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 233 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.getRootClass(_vm.element) },\n [\n _vm.element.hasTitleOnLeftTop\n ? _c(\"survey-element-header\", { attrs: { element: _vm.element } })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { class: _vm.getContentClass(_vm.element) },\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"top\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getWidgetComponentName(_vm.element), {\n tag: \"component\",\n attrs: { question: _vm.element, css: _vm.css }\n }),\n _vm._v(\" \"),\n _vm.element.hasComment\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.formGroup },\n [\n _c(\"div\", [_vm._v(_vm._s(_vm.element.commentText))]),\n _vm._v(\" \"),\n _c(\"survey-other-choice\", {\n attrs: {\n commentClass: _vm.css.comment,\n question: _vm.element\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasErrorsOnBottom\n ? _c(\"survey-errors\", {\n attrs: { question: _vm.element, location: \"bottom\" }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.hasDescriptionUnderInput\n ? _c(\n \"div\",\n { class: _vm.element.cssClasses.descriptionUnderInput },\n [\n _c(\"survey-string\", {\n attrs: { locString: _vm.element.locDescription }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.element.hasTitleOnBottom\n ? _c(\"survey-element-header\", { attrs: { element: _vm.element } })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-973472ac\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 234 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { style: { overflowX: _vm.question.horizontalScroll ? \"scroll\" : \"\" } },\n [\n _vm.question.isAddRowOnTop\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"span\", [_vm._v(_vm._s(_vm.question.addRowText))]),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ]\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-matrixtable\", { attrs: { question: _vm.question } }),\n _vm._v(\" \"),\n _vm.question.isAddRowOnBottom\n ? _c(\"div\", { class: _vm.question.cssClasses.footer }, [\n _c(\n \"button\",\n {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonAdd,\n attrs: { type: \"button\" },\n on: { click: _vm.addRowClick }\n },\n [\n _c(\"span\", [_vm._v(_vm._s(_vm.question.addRowText))]),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconAdd })\n ]\n )\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-9a0b88e8\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 235 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n { style: _vm.style },\n [\n !_vm.question\n ? _c(\n _vm.tagName,\n { tag: \"component\" },\n [\n _vm._l(_vm.nodes, function(elNode) {\n return _c(\"survey-flowpanelelement\", {\n key: elNode.elementId,\n attrs: { node: elNode, panel: _vm.panel, css: \"css\" }\n })\n }),\n _vm._v(\"\\n \" + _vm._s(_vm.text) + \"\\n \")\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n !!_vm.question\n ? _c(\n \"span\",\n [\n _c(\"survey-element\", {\n key: _vm.question.idValue,\n style: {\n flexBasis: _vm.question.renderWidth,\n flexGrow: 1,\n flexShrink: 1,\n width: _vm.question.renderWidth,\n minWidth: _vm.question.minWidth,\n maxWidth: _vm.question.maxWidth\n },\n attrs: {\n id: _vm.question.id,\n element: _vm.question,\n survey: _vm.survey,\n css: _vm.css\n }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-9d992c30\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 236 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: _vm.question.cssClasses.root },\n [\n _vm.question.isProgressTopShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.renderedPanels, function(panel) {\n return _c(\n \"div\",\n { key: panel.id },\n [\n _c(\"survey-panel\", { attrs: { question: panel, css: _vm.css } }),\n _vm._v(\" \"),\n _c(\"survey-paneldynamicremove\", {\n attrs: { question: _vm.question, panel: panel }\n }),\n _vm._v(\" \"),\n _c(\"hr\", { class: _vm.question.cssClasses.separator })\n ],\n 1\n )\n }),\n _vm._v(\" \"),\n _vm.question.isProgressBottomShowing\n ? _c(\"survey-paneldynamicprogress\", {\n attrs: { question: _vm.question }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isRenderModeList && _vm.question.canAddPanel\n ? _c(\"input\", {\n class: _vm.getButtonAddCss(_vm.question),\n attrs: { type: \"button\", value: _vm.question.panelAddText },\n on: { click: _vm.addPanelClick }\n })\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-9dda5d06\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 237 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"label\", { class: _vm.getLabelClass(_vm.item) }, [\n _vm.item == _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.isAllSelected,\n expression: \"isAllSelected\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isReadOnly,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.isAllSelected,\n checked: Array.isArray(_vm.isAllSelected)\n ? _vm._i(_vm.isAllSelected, _vm.isAllSelected) > -1\n : _vm.isAllSelected\n },\n on: {\n click: function($event) {\n var $$a = _vm.isAllSelected,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.isAllSelected,\n $$i = _vm._i($$a, $$v)\n if ($$c) {\n $$i < 0 && (_vm.isAllSelected = $$a.concat($$v))\n } else {\n $$i > -1 &&\n (_vm.isAllSelected = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.isAllSelected = $$c\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item != _vm.question.selectAllItem\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.question.renderedValue,\n expression: \"question.renderedValue\"\n }\n ],\n class: _vm.question.cssClasses.itemControl,\n attrs: {\n type: \"checkbox\",\n name: _vm.question.name,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isReadOnly || !_vm.item.isEnabled,\n \"aria-required\": _vm.question.isRequired,\n \"aria-label\": _vm.item.locText.renderedHtml,\n \"aria-invalid\": _vm.question.errors.length > 0,\n \"aria-describedby\":\n _vm.question.errors.length > 0\n ? _vm.question.id + \"_errors\"\n : null\n },\n domProps: {\n value: _vm.item.value,\n checked: Array.isArray(_vm.question.renderedValue)\n ? _vm._i(_vm.question.renderedValue, _vm.item.value) > -1\n : _vm.question.renderedValue\n },\n on: {\n click: function($event) {\n var $$a = _vm.question.renderedValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.item.value,\n $$i = _vm._i($$a, $$v)\n if ($$c) {\n $$i < 0 && (_vm.question.renderedValue = $$a.concat($$v))\n } else {\n $$i > -1 &&\n (_vm.question.renderedValue = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.question.renderedValue = $$c\n }\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.materialDecorator }, [\n _c(\n \"svg\",\n {\n class: _vm.question.cssClasses.itemDecorator,\n attrs: { viewBox: \"0 0 24 24\" }\n },\n [_c(\"path\", { attrs: { d: \"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\" } })]\n ),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"check\" })\n ]),\n _vm._v(\" \"),\n !_vm.hideLabel\n ? _c(\n \"span\",\n {\n class: _vm.question.cssClasses.controlLabel,\n attrs: { title: _vm.item.locText.koRenderedHtml }\n },\n [_c(\"survey-string\", { attrs: { locString: _vm.item.locText } })],\n 1\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm.item.value == _vm.question.otherItem.value\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.hasOther &&\n _vm.question.renderedValue &&\n _vm.question.isOtherSelected,\n expression:\n \"question.hasOther && question.renderedValue && question.isOtherSelected\"\n }\n ],\n attrs: { question: _vm.question }\n })\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-c58c80d0\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 238 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"fieldset\",\n { class: _vm.question.cssClasses.root },\n [\n _c(\"legend\", {\n attrs: { \"aria-label\": _vm.question.locTitle.renderedHtml }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.visibleChoices, function(item, index) {\n return !_vm.question.hasColumns\n ? _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: { question: _vm.question, item: item, index: index }\n })\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm._l(_vm.question.columns, function(column, colIndex) {\n return _vm.question.hasColumns\n ? _c(\n \"div\",\n { class: _vm.question.getColumnClass() },\n _vm._l(column, function(item, index) {\n return _c(\"survey-checkbox-item\", {\n key: item.value,\n class: _vm.getItemClass(item),\n attrs: {\n question: _vm.question,\n item: item,\n index: \"\" + colIndex + index\n }\n })\n })\n )\n : _vm._e()\n })\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-cad276f6\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 239 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm.locString.hasHtml\n ? _c(\"span\", {\n staticStyle: { position: \"static\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) }\n })\n : _c(\"span\", { staticStyle: { position: \"static\" } }, [\n _vm._v(_vm._s(_vm.locString.renderedHtml))\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-d3a3d75a\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 240 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(_vm.getWidgetComponentName(_vm.contentQuestion), {\n tag: \"component\",\n attrs: { question: _vm.contentQuestion, css: _vm.css }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-d4aae09a\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 241 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.isCollapsed,\n expression: \"!isCollapsed\"\n }\n ]\n },\n [\n _vm.question.canRemovePanel && !_vm.question.isReadOnly\n ? _c(\"input\", {\n class:\n _vm.question.cssClasses.button +\n \" \" +\n _vm.question.cssClasses.buttonRemove,\n attrs: { type: \"button\", value: _vm.question.panelRemoveText },\n on: {\n click: function($event) {\n _vm.removePanelClick(_vm.panel)\n }\n }\n })\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-db6b2f7e\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 242 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { class: _vm.question.cssClasses.root },\n [\n _vm.table.showHeader\n ? _c(\"thead\", [\n _c(\n \"tr\",\n _vm._l(_vm.table.headerRow.cells, function(cell) {\n return _c(\n \"th\",\n {\n key: \"header_\" + cell.id,\n class: _vm.question.cssClasses.headerCell,\n style: { minWidth: cell.minWidth, width: cell.width }\n },\n [\n _c(\"survey-string\", { attrs: { locString: cell.locTitle } })\n ],\n 1\n )\n })\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"tbody\",\n _vm._l(_vm.table.rows, function(row) {\n return _c(\n \"tr\",\n { key: _vm.question.inputId + \"_\" + row.id },\n _vm._l(row.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: row.id + \"_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n })\n )\n })\n ),\n _vm._v(\" \"),\n _vm.table.showFooter\n ? _c(\"tfoot\", [\n _c(\n \"tr\",\n _vm._l(_vm.table.footerRow.cells, function(cell, cellIndex) {\n return _c(\"survey-matrixcell\", {\n key: \"footer_\" + cellIndex,\n attrs: { cell: cell, question: _vm.question }\n })\n })\n )\n ])\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-fa197e4a\", { render: render, staticRenderFns: staticRenderFns })\n }\n}\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__chunks_model__ = __webpack_require__(91);\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Version\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"a\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"b\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Helpers\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"c\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"AnswerCountValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"d\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"e\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"NumericValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"f\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"RegexValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"g\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"h\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"TextValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"i\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ValidatorResult\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"j\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ExpressionValidator\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"k\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ValidatorRunner\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"l\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ItemValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"m\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"n\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"o\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"p\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"q\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"r\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"s\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"t\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"u\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"v\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"w\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"x\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"y\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"z\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"A\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"B\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"C\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"D\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"E\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Operand\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"F\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"G\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"H\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"I\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"J\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"K\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"L\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"M\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"N\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"O\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"P\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"Q\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"R\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"S\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"T\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"U\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"V\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"W\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"X\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownCell\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"Y\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"Z\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_0\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_1\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_2\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_3\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_4\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamicRowModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_5\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_6\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MatrixRowModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_7\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MartrixCells\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_8\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_9\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"MultipleTextItemModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_10\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_11\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_12\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_13\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_14\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_15\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_16\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_17\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_18\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionEmptyModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_19\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_20\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_21\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCheckboxModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_22\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCommentModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_23\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionDropdownModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_24\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_25\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_26\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionFileModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_27\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionHtmlModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_28\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionRadiogroupModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_29\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionRatingModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_30\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionExpressionModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_31\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_32\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionBooleanModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_33\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionImagePickerModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_34\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionImageModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_35\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionSignaturePadModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_36\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_37\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_38\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_39\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_40\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_41\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_42\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_43\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_44\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_45\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_46\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_47\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_48\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_49\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_50\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"englishStrings\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_51\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_52\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_53\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_54\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_55\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_56\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_57\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_58\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_59\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return __WEBPACK_IMPORTED_MODULE_0__chunks_model__[\"_60\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__chunks_localization__ = __webpack_require__(90);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__ = __webpack_require__(0);\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"__assign\", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__[\"a\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"__extends\", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__[\"b\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"__decorate\", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__[\"c\"]; });\n/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, \"__spreadArrays\", function() { return __WEBPACK_IMPORTED_MODULE_2__chunks_helpers__[\"d\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__ = __webpack_require__(14);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultStandardCss\", function() { return __WEBPACK_IMPORTED_MODULE_3__defaultCss_cssstandard__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__ = __webpack_require__(87);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapCss\", function() { return __WEBPACK_IMPORTED_MODULE_4__defaultCss_cssbootstrap__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssbootstrapmaterial__ = __webpack_require__(88);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultBootstrapMaterialCss\", function() { return __WEBPACK_IMPORTED_MODULE_5__defaultCss_cssbootstrapmaterial__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssmodern__ = __webpack_require__(89);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"modernCss\", function() { return __WEBPACK_IMPORTED_MODULE_6__defaultCss_cssmodern__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__vue_surveyModel__ = __webpack_require__(18);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Model\", function() { return __WEBPACK_IMPORTED_MODULE_7__vue_surveyModel__[\"a\"]; });\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"WindowModel\", function() { return __WEBPACK_IMPORTED_MODULE_7__vue_surveyModel__[\"b\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__vue_survey_vue__ = __webpack_require__(132);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Survey\", function() { return __WEBPACK_IMPORTED_MODULE_8__vue_survey_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__vue_customwidget_vue__ = __webpack_require__(98);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"CustomWidget\", function() { return __WEBPACK_IMPORTED_MODULE_9__vue_customwidget_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__vue_string_vue__ = __webpack_require__(131);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyString\", function() { return __WEBPACK_IMPORTED_MODULE_10__vue_string_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__vue_element_vue__ = __webpack_require__(100);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementVue\", function() { return __WEBPACK_IMPORTED_MODULE_11__vue_element_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__vue_window_vue__ = __webpack_require__(135);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Window\", function() { return __WEBPACK_IMPORTED_MODULE_12__vue_window_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__vue_page_vue__ = __webpack_require__(120);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Page\", function() { return __WEBPACK_IMPORTED_MODULE_13__vue_page_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__vue_radiogroup_vue__ = __webpack_require__(126);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Radiogroup\", function() { return __WEBPACK_IMPORTED_MODULE_14__vue_radiogroup_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__vue_radiogroupitem_vue__ = __webpack_require__(127);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"RadiogroupItem\", function() { return __WEBPACK_IMPORTED_MODULE_15__vue_radiogroupitem_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__vue_otherChoice_vue__ = __webpack_require__(119);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"OtherChoice\", function() { return __WEBPACK_IMPORTED_MODULE_16__vue_otherChoice_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__vue_rating_vue__ = __webpack_require__(128);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Rating\", function() { return __WEBPACK_IMPORTED_MODULE_17__vue_rating_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__vue_comment_vue__ = __webpack_require__(95);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Comment\", function() { return __WEBPACK_IMPORTED_MODULE_18__vue_comment_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__vue_checkbox_vue__ = __webpack_require__(93);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Checkbox\", function() { return __WEBPACK_IMPORTED_MODULE_19__vue_checkbox_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__vue_checkboxitem_vue__ = __webpack_require__(94);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxItem\", function() { return __WEBPACK_IMPORTED_MODULE_20__vue_checkboxitem_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__vue_text_vue__ = __webpack_require__(133);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Text\", function() { return __WEBPACK_IMPORTED_MODULE_21__vue_text_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__vue_boolean_vue__ = __webpack_require__(92);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Boolean\", function() { return __WEBPACK_IMPORTED_MODULE_22__vue_boolean_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__vue_empty_vue__ = __webpack_require__(102);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Empty\", function() { return __WEBPACK_IMPORTED_MODULE_23__vue_empty_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__vue_multipletext_vue__ = __webpack_require__(117);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MultipleText\", function() { return __WEBPACK_IMPORTED_MODULE_24__vue_multipletext_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__vue_matrix_vue__ = __webpack_require__(112);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Matrix\", function() { return __WEBPACK_IMPORTED_MODULE_25__vue_matrix_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__vue_dropdown_vue__ = __webpack_require__(99);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return __WEBPACK_IMPORTED_MODULE_26__vue_dropdown_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__vue_file_vue__ = __webpack_require__(105);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"File\", function() { return __WEBPACK_IMPORTED_MODULE_27__vue_file_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__vue_matrixcell_vue__ = __webpack_require__(113);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixCell\", function() { return __WEBPACK_IMPORTED_MODULE_28__vue_matrixcell_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__vue_matrixtable_vue__ = __webpack_require__(116);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixTable\", function() { return __WEBPACK_IMPORTED_MODULE_29__vue_matrixtable_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__vue_matrixdropdown_vue__ = __webpack_require__(114);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdown\", function() { return __WEBPACK_IMPORTED_MODULE_30__vue_matrixdropdown_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__vue_matrixdynamic_vue__ = __webpack_require__(115);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"MatrixDynamic\", function() { return __WEBPACK_IMPORTED_MODULE_31__vue_matrixdynamic_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__vue_errors_vue__ = __webpack_require__(103);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Errors\", function() { return __WEBPACK_IMPORTED_MODULE_32__vue_errors_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__vue_html_vue__ = __webpack_require__(109);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Html\", function() { return __WEBPACK_IMPORTED_MODULE_33__vue_html_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__vue_expression_vue__ = __webpack_require__(104);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Expression\", function() { return __WEBPACK_IMPORTED_MODULE_34__vue_expression_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__vue_imagepicker_vue__ = __webpack_require__(111);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"ImagePicker\", function() { return __WEBPACK_IMPORTED_MODULE_35__vue_imagepicker_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__vue_paneldynamic_vue__ = __webpack_require__(122);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamic\", function() { return __WEBPACK_IMPORTED_MODULE_36__vue_paneldynamic_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__vue_paneldynamicremove_vue__ = __webpack_require__(124);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicRemove\", function() { return __WEBPACK_IMPORTED_MODULE_37__vue_paneldynamicremove_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__vue_paneldynamicprogress_vue__ = __webpack_require__(123);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgress\", function() { return __WEBPACK_IMPORTED_MODULE_38__vue_paneldynamicprogress_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__vue_navigation_vue__ = __webpack_require__(118);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Navigation\", function() { return __WEBPACK_IMPORTED_MODULE_39__vue_navigation_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__vue_progress_vue__ = __webpack_require__(125);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Progress\", function() { return __WEBPACK_IMPORTED_MODULE_40__vue_progress_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__vue_timerpanel_vue__ = __webpack_require__(134);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"TimerPanel\", function() { return __WEBPACK_IMPORTED_MODULE_41__vue_timerpanel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__vue_panel_vue__ = __webpack_require__(121);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Panel\", function() { return __WEBPACK_IMPORTED_MODULE_42__vue_panel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__vue_flowpanel_vue__ = __webpack_require__(106);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanel\", function() { return __WEBPACK_IMPORTED_MODULE_43__vue_flowpanel_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__vue_flowpanelelement_vue__ = __webpack_require__(107);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelElement\", function() { return __WEBPACK_IMPORTED_MODULE_44__vue_flowpanelelement_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__vue_row_vue__ = __webpack_require__(129);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Row\", function() { return __WEBPACK_IMPORTED_MODULE_45__vue_row_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__vue_elementheader_vue__ = __webpack_require__(101);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"ElementHeader\", function() { return __WEBPACK_IMPORTED_MODULE_46__vue_elementheader_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__vue_image_vue__ = __webpack_require__(110);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Image\", function() { return __WEBPACK_IMPORTED_MODULE_47__vue_image_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__vue_signaturepad_vue__ = __webpack_require__(130);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"SignaturePad\", function() { return __WEBPACK_IMPORTED_MODULE_48__vue_signaturepad_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__vue_header_vue__ = __webpack_require__(108);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyHeader\", function() { return __WEBPACK_IMPORTED_MODULE_49__vue_header_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__vue_custom_vue__ = __webpack_require__(97);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Custom\", function() { return __WEBPACK_IMPORTED_MODULE_50__vue_custom_vue__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__vue_composite_vue__ = __webpack_require__(96);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"Composite\", function() { return __WEBPACK_IMPORTED_MODULE_51__vue_composite_vue__[\"a\"]; });\n// model\n\n// localization\n\n// helpers\n\n\n// css standard\n\n// css bootstrap\n\n// css bootstrap + material\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAyMTQ4YjExZDY2NzA1MjFiMzM1MyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvaGVscGVycy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5U3RyaW5ncy50cyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiVnVlXCIsXCJjb21tb25qczJcIjpcInZ1ZVwiLFwiY29tbW9uanNcIjpcInZ1ZVwiLFwiYW1kXCI6XCJ2dWVcIn0iLCJ3ZWJwYWNrOi8vLy4vfi92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi92dWUtcHJvcGVydHktZGVjb3JhdG9yLmNvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2pzb25vYmplY3QudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3F1ZXN0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvbnMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Vycm9yLnRzIiwid2VicGFjazovLy8uL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzIiwid2VicGFjazovLy8uL3NyYy9pdGVtdmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmRpdGlvblByb2Nlc3NWYWx1ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemFibGVzdHJpbmcudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdXJ2ZXlNb2RlbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFuZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RleHRQcmVQcm9jZXNzb3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zLnRzIiwid2VicGFjazovLy8uL3NyYy9mdW5jdGlvbnNmYWN0b3J5LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9ubm9udmFsdWUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlc21hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZhbGlkYXRvci50cyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Jvb2xlYW4udnVlP2UxZWQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jaGVja2JveC52dWU/ZmRiYyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWU/NDI4OCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NvbW1lbnQudnVlP2Y4MzkiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlPzNmOWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jdXN0b20udnVlPzgyMDciLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlP2I5Y2MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/ZGUwMyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2VsZW1lbnQudnVlPzFiZWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT9lNzEwIiwid2VicGFjazovLy8uL3NyYy92dWUvZW1wdHkudnVlP2I3OTIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lcnJvcnMudnVlPzE0ZmMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT9mNWIyIiwid2VicGFjazovLy8uL3NyYy92dWUvZmlsZS52dWU/MmFjNSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/NmMzNiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP2I1MTQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9oZWFkZXIudnVlPzQ1NzgiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9odG1sLnZ1ZT8wZjNhIiwid2VicGFjazovLy8uL3NyYy92dWUvaW1hZ2UudnVlP2FmYjkiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/MTlhYSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeC52dWU/ZDdiOSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlPzg4MGQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/YmYyOSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlPzUwZDgiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/OGQxZCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/YTYwMSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL25hdmlnYXRpb24udnVlPzBjMTgiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWU/Mjk3YiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3BhZ2UudnVlPzhmYzkiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbC52dWU/NDk1ZCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/MDZlYiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT9kMTFhIiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT9lYjY2Iiwid2VicGFjazovLy8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2YwM2QiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT8wMTgwIiwid2VicGFjazovLy8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlPzM3OWQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yYXRpbmcudnVlP2I3MmEiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yb3cudnVlPzc2ZGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlPzhkZjYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdHJpbmcudnVlPzA5NjYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdXJ2ZXkudnVlP2Y3ZmMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS90ZXh0LnZ1ZT9lNmUwIiwid2VicGFjazovLy8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/ZDRlMCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3dpbmRvdy52dWU/Mjg2ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY2hvaWNlc1Jlc3RmdWxsLnRzIiwid2VicGFjazovLy8uL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwid2VicGFjazovLy8uL3NyYy9keFN1cnZleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9lbmdsaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9tYXJ0aXhCYXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbkN1c3RvbVdpZGdldHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2Ryb3Bkb3duLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9leHByZXNzaW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl90ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleXRpbWVyLnRzIiwid2VicGFjazovLy8uL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3Nib290c3RyYXBtYXRlcmlhbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVmYXVsdENzcy9jc3Ntb2Rlcm4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9ib29sZWFuLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jb21tZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jdXN0b20udnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2VsZW1lbnQudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lbXB0eS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lcnJvcnMudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvZXhwcmVzc2lvbi52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9maWxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2hlYWRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9odG1sLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2ltYWdlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4dGFibGUudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL25hdmlnYXRpb24udnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcGFnZS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbC52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvcmF0aW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Jvdy52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvc3RyaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3N1cnZleS52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS90ZXh0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlIiwid2VicGFjazovLy8uL3NyYy92dWUvd2luZG93LnZ1ZSIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9tb2Rlcm4uc2NzcyIsIndlYnBhY2s6Ly8vLi9+L3JlZmxlY3QtbWV0YWRhdGEvUmVmbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3NpZ25hdHVyZV9wYWQvZGlzdC9zaWduYXR1cmVfcGFkLm1qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2FsY3VsYXRlZFZhbHVlLnRzIiwid2VicGFjazovLy8uL3NyYy9leHByZXNzaW9uSXRlbXMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V4cHJlc3Npb25zL2V4cHJlc3Npb25QYXJzZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Zsb3dwYW5lbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2FyYWJpYy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2J1bGdhcmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2NhdGFsYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9jemVjaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2R1dGNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZXN0b25pYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ2VvcmdpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9nZXJtYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9ncmVlay50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2hlYnJldy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2h1bmdhcmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2ljZWxhbmRpYy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2luZG9uZXNpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9pdGFsaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vamFwYW5lc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9rb3JlYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9sYXR2aWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vbGl0aHVhbmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL25vcndlZ2lhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vcm9tYW5pYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9ydXNzaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vc3BhbmlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3N3YWhpbGkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9zd2VkaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vdGFqaWsudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi90aGFpLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3R1cmtpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi91a3JhaW5pYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2Jvb2xlYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jb21tZW50LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9jdXN0b20udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX2VtcHR5LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9maWxlLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9pbWFnZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25faW1hZ2VwaWNrZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJpZ2dlci50cyIsIndlYnBhY2s6Ly8vLi9+L3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmNvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/NGIwNSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2VtcHR5LnZ1ZT9mNDg3Iiwid2VicGFjazovLy8uL3NyYy92dWUvcmFkaW9ncm91cC52dWU/NTZmMyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2h0bWwudnVlPzhhNTQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT9mODE1Iiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlPzllOWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbC52dWU/OGI2NSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP2RiYTYiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/NWFmYSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGYwZSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP2ZlZDMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9pbWFnZS52dWU/MjM4NSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/NDFjMiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Jvb2xlYW4udnVlPzUyYjIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9maWxlLnZ1ZT81MWE0Iiwid2VicGFjazovLy8uL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWU/MzZlOCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT80N2M4Iiwid2VicGFjazovLy8uL3NyYy92dWUvb3RoZXJDaG9pY2UudnVlPzhiYTQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT8zMmUxIiwid2VicGFjazovLy8uL3NyYy92dWUvdGV4dC52dWU/M2E0NyIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3BhZ2UudnVlPzdhZWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9lcnJvcnMudnVlPzU0YWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/ZGYxYiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3dpbmRvdy52dWU/NzFkZiIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL3N1cnZleS52dWU/MGM0ZCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2hlYWRlci52dWU/YTdjYSIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT80ZDViIiwid2VicGFjazovLy8uL3NyYy92dWUvcmF0aW5nLnZ1ZT9hNzQ5Iiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP2FmNjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZT9hNjBkIiwid2VicGFjazovLy8uL3NyYy92dWUvcm93LnZ1ZT9kNzVmIiwid2VicGFjazovLy8uL3NyYy92dWUvbWF0cml4LnZ1ZT8xMDJjIiwid2VicGFjazovLy8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9kZDdjIiwid2VicGFjazovLy8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT82YzA5Iiwid2VicGFjazovLy8uL3NyYy92dWUvZWxlbWVudC52dWU/MWQ4OCIsIndlYnBhY2s6Ly8vLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlPzBjMjQiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT9lYWM3Iiwid2VicGFjazovLy8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT9kZDMzIiwid2VicGFjazovLy8uL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT8xMWRhIiwid2VicGFjazovLy8uL3NyYy92dWUvY2hlY2tib3gudnVlP2RkOTUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9zdHJpbmcudnVlP2U2NDIiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9jdXN0b20udnVlP2E1ODMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP2UxZWMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/NTA2NCIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL3Z1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDaEVPLElBQUksUUFBUSxHQUNYLE1BQU8sQ0FBQyxRQUFRLENBQUM7SUFDdkIsVUFBUyxNQUFXO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsS0FBSyxJ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QUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVHQUF1RztBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsdUJBQXVCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELDBCQUEwQjtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLGFBQWE7QUFDaEYscUVBQXFFLGFBQWE7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsMEJBQTBCLEVBQUU7QUFDbEU7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixvREFBb0QsK0NBQStDO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFVBQVU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsMERBQTBEO0FBQzVHLG9EQUFvRCw0REFBNEQ7QUFDaEgscURBQXFELDREQUE0RDtBQUNqSCwyREFBMkQsdUJBQXVCO0FBQ2xGLDZEQUE2RCx1QkFBdUI7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsdUJBQXVCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixzREFBc0QsNkJBQTZCO0FBQ25GLHNEQUFzRCwwQ0FBMEM7QUFDaEcseURBQXlELGdDQUFnQztBQUN6RixtREFBbUQsbUJBQW1CO0FBQ3RFLGtEQUFrRCx5QkFBeUI7QUFDM0Usb0RBQW9ELDJCQUEyQjtBQUMvRSxxREFBcUQsNEJBQTRCO0FBQ2pGLDJEQUEyRCxvQkFBb0I7QUFDL0UsNkRBQTZELG9CQUFvQjtBQUNqRjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCwwQkFBMEI7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsVUFBVTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxvQkFBb0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQywwQkFBMEI7Ozs7Ozs7OztBQzFtQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkYsYUFBYTtBQUN4RztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEOztBQUU5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTtBQUNaLFlBQVk7O0FBRVo7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxpQkFBaUIsZUFBZTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6Qzs7QUFFQTtBQUNBLHFCQUFxQixrQkFBa0I7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7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IjoiLi9wYWNrYWdlcy9zdXJ2ZXktdnVlL3N1cnZleS52dWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJTdXJ2ZXlcIiwgW1widnVlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5XCJdID0gZmFjdG9yeShyb290W1wiVnVlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI0NCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMjE0OGIxMWQ2NjcwNTIxYjMzNTMiLCJleHBvcnQgdmFyIF9fYXNzaWduID1cbiAgKDxhbnk+T2JqZWN0KVtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3M6IGFueSwgYmFzZUNsYXNzOiBhbnkpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3ICg8YW55Pl9fKSgpKTtcbn1cblxuZGVjbGFyZSB2YXIgUmVmbGVjdDphbnk7XG5cbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uKFxuICBkZWNvcmF0b3JzOiBhbnksXG4gIHRhcmdldDogYW55LFxuICBrZXk6IGFueSxcbiAgZGVzYzogYW55XG4pIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgIHIgPVxuICAgICAgYyA8IDNcbiAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgOiBkZXNjID09PSBudWxsXG4gICAgICAgICAgPyAoZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpKVxuICAgICAgICAgIDogZGVzYyxcbiAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIGlmICgoZCA9IGRlY29yYXRvcnNbaV0pKVxuICAgICAgICByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lbnRyaWVzL2NodW5rcy9oZWxwZXJzLnRzIiwiaW1wb3J0IHsgZW5nbGlzaFN0cmluZ3MgfSBmcm9tIFwiLi9sb2NhbGl6YXRpb24vZW5nbGlzaFwiO1xuXG5leHBvcnQgdmFyIHN1cnZleUxvY2FsaXphdGlvbiA9IHtcbiAgY3VycmVudExvY2FsZVZhbHVlOiBcIlwiLFxuICBkZWZhdWx0TG9jYWxlVmFsdWU6IFwiZW5cIixcbiAgbG9jYWxlczogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgbG9jYWxlTmFtZXM6IDx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+e30sXG4gIHN1cHBvcnRlZExvY2FsZXM6IDxBcnJheTxhbnk+PltdLFxuICBnZXQgY3VycmVudExvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TG9jYWxlVmFsdWUgPT09IHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlXG4gICAgICA/IFwiXCJcbiAgICAgIDogdGhpcy5jdXJyZW50TG9jYWxlVmFsdWU7XG4gIH0sXG4gIHNldCBjdXJyZW50TG9jYWxlKHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKHZhbCA9PT0gXCJjelwiKSB2YWwgPSBcImNzXCI7XG4gICAgdGhpcy5jdXJyZW50TG9jYWxlVmFsdWUgPSB2YWw7XG4gIH0sXG4gIGdldCBkZWZhdWx0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRMb2NhbGVWYWx1ZTtcbiAgfSxcbiAgc2V0IGRlZmF1bHRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsID09PSBcImN6XCIpIHZhbCA9IFwiY3NcIjtcbiAgICB0aGlzLmRlZmF1bHRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgfSxcbiAgZ2V0TG9jYWxlU3RyaW5ncyhsb2M6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlc1tsb2NdO1xuICB9LFxuICBnZXRDdXJyZW50U3RyaW5ncygpOiBhbnkge1xuICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhbGVcbiAgICAgID8gdGhpcy5sb2NhbGVzW3RoaXMuY3VycmVudExvY2FsZV1cbiAgICAgIDogdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgaWYgKCFsb2MpIGxvYyA9IHRoaXMubG9jYWxlc1t0aGlzLmRlZmF1bHRMb2NhbGVdO1xuICAgIHJldHVybiBsb2M7XG4gIH0sXG4gIGdldFN0cmluZzogZnVuY3Rpb24gKHN0ck5hbWU6IHN0cmluZykge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldEN1cnJlbnRTdHJpbmdzKCk7XG4gICAgaWYgKCFsb2Nbc3RyTmFtZV0pIGxvYyA9IHRoaXMubG9jYWxlc1t0aGlzLmRlZmF1bHRMb2NhbGVdO1xuICAgIHZhciByZXN1bHQgPSBsb2Nbc3RyTmFtZV07XG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmxvY2FsZXNbXCJlblwiXVtzdHJOYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbiAgZ2V0TG9jYWxlczogZnVuY3Rpb24gKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICByZXMucHVzaChcIlwiKTtcbiAgICBpZiAodGhpcy5zdXBwb3J0ZWRMb2NhbGVzICYmIHRoaXMuc3VwcG9ydGVkTG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3VwcG9ydGVkTG9jYWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMucHVzaCh0aGlzLnN1cHBvcnRlZExvY2FsZXNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5sb2NhbGVzKSB7XG4gICAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlcy5zb3J0KCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbn07XG5cbmV4cG9ydCB2YXIgc3VydmV5U3RyaW5ncyA9IGVuZ2xpc2hTdHJpbmdzO1xuKDxhbnk+c3VydmV5TG9jYWxpemF0aW9uKS5sb2NhbGVzW1wiZW5cIl0gPSBlbmdsaXNoU3RyaW5ncztcbig8YW55PnN1cnZleUxvY2FsaXphdGlvbikubG9jYWxlTmFtZXNbXCJlblwiXSA9IFwiZW5nbGlzaFwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleVN0cmluZ3MudHMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlZ1ZVwiLFwiY29tbW9uanMyXCI6XCJ2dWVcIixcImNvbW1vbmpzXCI6XCJ2dWVcIixcImFtZFwiOlwidnVlXCJ9XG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBWdWUgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndnVlJykpO1xudmFyIFZ1ZUNsYXNzQ29tcG9uZW50ID0gcmVxdWlyZSgndnVlLWNsYXNzLWNvbXBvbmVudCcpO1xudmFyIFZ1ZUNsYXNzQ29tcG9uZW50X19kZWZhdWx0ID0gX2ludGVyb3BEZWZhdWx0KFZ1ZUNsYXNzQ29tcG9uZW50KTtcbnJlcXVpcmUoJ3JlZmxlY3QtbWV0YWRhdGEnKTtcblxuLyoqIHZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IgdmVyc29uIDQuMC4wIE1JVCBMSUNFTlNFIGNvcHlyaWdodCAyMDE3IGthb3J1bjM0MyAqL1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gaW5qZWN0XG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvclxuICovXG5mdW5jdGlvbiBJbmplY3Qoa2V5KSB7XG4gICAgcmV0dXJuIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50T3B0aW9ucy5pbmplY3QpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtrXSA9IGtleSB8fCBrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIGRlY29yYXRvciBvZiBtb2RlbFxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmZ1bmN0aW9uIE1vZGVsKGV2ZW50KSB7XG4gICAgcmV0dXJuIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgcHJvcCkge1xuICAgICAgICBjb21wb25lbnRPcHRpb25zLm1vZGVsID0geyBwcm9wOiBwcm9wLCBldmVudDogZXZlbnQgfTtcbiAgICB9KTtcbn1cbi8qKlxuICogQGJyaWVmICBNYWtlcyBhIGRlY29yYXRvciBmb3IgcHJvcC5cbiAqXG4gKiBAcGFyYW0gIG9wdGlvbnMgIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0gIHRhcmdldCAgIFRoZSB0YXJnZXRcbiAqIEBwYXJhbSAga2V5ICAgICAgVGhlIGtleVxuICpcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gbWFrZVByb3BEZWNvcmF0b3Iob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgJiYgdHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCB0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFZ1ZUNsYXNzQ29tcG9uZW50LmNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaykge1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgfHwgKGNvbXBvbmVudE9wdGlvbnMucHJvcHMgPSB7fSkpW2tdID0gb3B0aW9ucztcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG5mdW5jdGlvbiBQcm9wKG9wdGlvbnMsIGtleSkge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBWdWUpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VQcm9wRGVjb3JhdG9yKCkob3B0aW9ucywga2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBtYWtlUHJvcERlY29yYXRvcihvcHRpb25zKTtcbiAgICB9XG59XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHdhdGNoIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHBhdGggdGhlIHBhdGggb3IgdGhlIGV4cHJlc3Npb24gdG8gb2JzZXJ2ZVxuICogQHBhcmFtICBXYXRjaE9wdGlvblxuICogQHJldHVybiBNZXRob2REZWNvcmF0b3JcbiAqL1xuZnVuY3Rpb24gV2F0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIF9hID0gb3B0aW9ucy5kZWVwLCBkZWVwID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5pbW1lZGlhdGUsIGltbWVkaWF0ZSA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBWdWVDbGFzc0NvbXBvbmVudC5jcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnRPcHRpb25zLndhdGNoICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50T3B0aW9ucy53YXRjaFtwYXRoXSA9IHsgaGFuZGxlcjogaGFuZGxlciwgZGVlcDogZGVlcCwgaW1tZWRpYXRlOiBpbW1lZGlhdGUgfTtcbiAgICB9KTtcbn1cbnZhciBwcm9wID0gUHJvcDtcbnZhciB3YXRjaCA9IFdhdGNoO1xudmFyIENvbXBvbmVudCA9IFZ1ZUNsYXNzQ29tcG9uZW50X19kZWZhdWx0O1xuXG5leHBvcnRzLkluamVjdCA9IEluamVjdDtcbmV4cG9ydHMuTW9kZWwgPSBNb2RlbDtcbmV4cG9ydHMuUHJvcCA9IFByb3A7XG5leHBvcnRzLldhdGNoID0gV2F0Y2g7XG5leHBvcnRzLnByb3AgPSBwcm9wO1xuZXhwb3J0cy53YXRjaCA9IHdhdGNoO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvdnVlLXByb3BlcnR5LWRlY29yYXRvci5jb21tb24uanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgc2NyaXB0RXhwb3J0cyA9IHNjcmlwdEV4cG9ydHMgfHwge31cblxuICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG4gIHZhciB0eXBlID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNjcmlwdEV4cG9ydHMgPSBzY3JpcHRFeHBvcnRzLmRlZmF1bHRcbiAgfVxuXG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzKHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXIuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uT2JqZWN0UHJvcGVydHkgaW1wbGVtZW50cyBJT2JqZWN0IHtcbiAgcHVibGljIHN0YXRpYyBnZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlOiAodmFsOiBhbnkpID0+IGFueTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBtZXJnYWJsZVZhbHVlcyA9IFtcbiAgICBcInR5cGVWYWx1ZVwiLFxuICAgIFwiY2hvaWNlc1ZhbHVlXCIsXG4gICAgXCJiYXNlVmFsdWVcIixcbiAgICBcInJlYWRPbmx5VmFsdWVcIixcbiAgICBcInZpc2libGVWYWx1ZVwiLFxuICAgIFwiaXNTZXJpYWxpemFibGVcIixcbiAgICBcImlzTGlnaHRTZXJpYWxpemFibGVcIixcbiAgICBcImlzQ3VzdG9tXCIsXG4gICAgXCJpc0R5bmFtaWNDaG9pY2VzXCIsXG4gICAgXCJpc0xvY2FsaXphYmxlVmFsdWVcIixcbiAgICBcImNsYXNzTmFtZVwiLFxuICAgIFwiYWx0ZXJuYXRpdmVOYW1lXCIsXG4gICAgXCJsYXlvdXRcIixcbiAgICBcImNsYXNzTmFtZVBhcnRcIixcbiAgICBcImJhc2VDbGFzc05hbWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZVwiLFxuICAgIFwic2VyaWFsaXphdGlvblByb3BlcnR5XCIsXG4gICAgXCJvbkdldFZhbHVlXCIsXG4gICAgXCJvblNldFZhbHVlXCIsXG4gICAgXCJkaXNwbGF5TmFtZVwiLFxuICAgIFwiY2F0ZWdvcnlcIixcbiAgICBcImNhdGVnb3J5SW5kZXhcIixcbiAgICBcInZpc2libGVJbmRleFwiLFxuICAgIFwibmV4dFRvUHJvcGVydHlcIixcbiAgICBcInNob3dNb2RlXCIsXG4gICAgXCJkZXBlbmRlZFByb3BlcnRpZXNcIixcbiAgICBcInZpc2libGVJZlwiLFxuICAgIFwib25Qcm9wZXJ0eUVkaXRvclVwZGF0ZVwiLFxuICAgIFwibWF4TGVuZ3RoXCIsXG4gICAgXCJtYXhWYWx1ZVwiLFxuICAgIFwibWluVmFsdWVcIixcbiAgXTtcbiAgcHJpdmF0ZSBjbGFzc0luZm9WYWx1ZTogSnNvbk1ldGFkYXRhQ2xhc3M7XG4gIHByaXZhdGUgdHlwZVZhbHVlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIGNob2ljZXNWYWx1ZTogQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgYmFzZVZhbHVlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGlzUmVxdWlyZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0xvY2FsaXphYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKG9iajogYW55LCBjaG9pY2VzQ2FsbGJhY2s6IGFueSkgPT4gQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgZGVwZW5kZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIGlzU2VyaWFsaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzTGlnaHRTZXJpYWxpemFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgaXNDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRHluYW1pY0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTsgLy9UT0RPIG9ic29sZXRlLCB1c2UgZGVwZW5kc09uIGF0dHJpYnV0ZVxuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgYWx0ZXJuYXRpdmVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2xhc3NOYW1lUGFydDogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBkZWZhdWx0VmFsdWVWYWx1ZTogYW55ID0gbnVsbDtcbiAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2F0ZWdvcnk6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjYXRlZ29yeUluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIHZpc2libGVJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBuZXh0VG9Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIHNob3dNb2RlOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG1heFZhbHVlOiBhbnk7XG4gIHB1YmxpYyBtaW5WYWx1ZTogYW55O1xuICBwdWJsaWMgbGF5b3V0OiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgb25HZXRWYWx1ZTogKG9iajogYW55KSA9PiBhbnkgPSBudWxsO1xuICBwdWJsaWMgb25TZXRWYWx1ZTogKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkgPT4gYW55ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVJZjogKG9iajogYW55KSA9PiBib29sZWFuID0gbnVsbDtcbiAgcHVibGljIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IChvYmo6IGFueSwgcHJvcEVkaXRvcjogYW55KSA9PiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xhc3NJbmZvOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLmNsYXNzSW5mb1ZhbHVlID0gY2xhc3NJbmZvO1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsYXNzSW5mbygpOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NJbmZvVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHlwZVZhbHVlID8gdGhpcy50eXBlVmFsdWUgOiBcInN0cmluZ1wiO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSBcIml0ZW12YWx1ZXNcIikgdmFsdWUgPSBcIml0ZW12YWx1ZVtdXCI7XG4gICAgdGhpcy50eXBlVmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50eXBlVmFsdWUuaW5kZXhPZihcIltdXCIpID09PSB0aGlzLnR5cGVWYWx1ZS5sZW5ndGggLSAyKSB7XG4gICAgICB0aGlzLmlzQXJyYXkgPSB0cnVlO1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLnR5cGVWYWx1ZS5zdWJzdHIoMCwgdGhpcy50eXBlVmFsdWUubGVuZ3RoIC0gMik7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpc0FycmF5ID0gZmFsc2U7XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNSZXF1aXJlZFZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkdldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICB9XG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IHRoaXMuZGVmYXVsdFZhbHVlVmFsdWU7XG4gICAgaWYgKFxuICAgICAgISFKc29uT2JqZWN0UHJvcGVydHkuZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZSAmJlxuICAgICAgSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZih0aGlzLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIilcbiAgICApIHtcbiAgICAgIHJlc3VsdCA9IEpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlKFxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlIHx8IFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0RlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSkpXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPT0gdmFsdWU7XG4gICAgcmV0dXJuIChcbiAgICAgICh2YWx1ZSA9PT0gZmFsc2UgJiYgKHRoaXMudHlwZSA9PSBcImJvb2xlYW5cIiB8fCB0aGlzLnR5cGUgPT0gXCJzd2l0Y2hcIikpIHx8XG4gICAgICB2YWx1ZSA9PT0gXCJcIiB8fFxuICAgICAgSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uR2V0VmFsdWUpIHJldHVybiB0aGlzLm9uR2V0VmFsdWUob2JqKTtcbiAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xuICAgIHJldHVybiBvYmpbdGhpcy5uYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNMb2NhbGl6YWJsZSkge1xuICAgICAgcmV0dXJuICEhb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XVxuICAgICAgICA/IG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dFxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKG9iaik7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9uU2V0VmFsdWUgfHwgdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkge1xuICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcbiAgICAgIHRoaXMub25TZXRWYWx1ZShvYmosIHZhbHVlLCBqc29uQ29udik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0pXG4gICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialt0aGlzLm5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRPYmpUeXBlKG9ialR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jbGFzc05hbWVQYXJ0KSByZXR1cm4gb2JqVHlwZTtcbiAgICByZXR1cm4gb2JqVHlwZS5yZXBsYWNlKHRoaXMuY2xhc3NOYW1lUGFydCwgXCJcIik7XG4gIH1cbiAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNsYXNzTmFtZSkgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NOYW1lUGFydCAmJiBjbGFzc05hbWUuaW5kZXhPZih0aGlzLmNsYXNzTmFtZVBhcnQpIDwgMFxuICAgICAgPyBjbGFzc05hbWUgKyB0aGlzLmNsYXNzTmFtZVBhcnRcbiAgICAgIDogY2xhc3NOYW1lO1xuICB9XG4gIC8qKlxuICAgKiBEZXByaWNhdGVkLCBwbGVhc2UgdXNlIGdldENob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzKG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNob2ljZXNWYWx1ZSB8fCAhIXRoaXMuY2hvaWNlc2Z1bmM7XG4gIH1cbiAgcHVibGljIGdldENob2ljZXMob2JqOiBhbnksIGNob2ljZXNDYWxsYmFjazogYW55ID0gbnVsbCk6IEFycmF5PGFueT4ge1xuICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XG4gICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMob2JqLCBjaG9pY2VzQ2FsbGJhY2spO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIHZhbHVlRnVuYzogKG9iajogYW55KSA9PiBBcnJheTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XG4gIH1cbiAgcHVibGljIGdldEJhc2VWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5iYXNlVmFsdWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0eXBlb2YgdGhpcy5iYXNlVmFsdWUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdGhpcy5iYXNlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldEJhc2VWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuYmFzZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHlWYWx1ZSAhPSBudWxsID8gdGhpcy5yZWFkT25seVZhbHVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGlzVmlzaWJsZShsYXlvdXQ6IHN0cmluZywgb2JqOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTGF5b3V0ID0gIXRoaXMubGF5b3V0IHx8IHRoaXMubGF5b3V0ID09IGxheW91dDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCAhaXNMYXlvdXQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVJZiAmJiAhIW9iaikgcmV0dXJuIHRoaXMudmlzaWJsZUlmKG9iaik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVWYWx1ZSAhPSBudWxsID8gdGhpcy52aXNpYmxlVmFsdWUgOiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9jYWxpemFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2NhbGl6YWJsZVZhbHVlICE9IG51bGwgPyB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNMb2NhbGl6YWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgbWVyZ2VXaXRoKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHZhciB2YWx1ZXNOYW1lcyA9IEpzb25PYmplY3RQcm9wZXJ0eS5tZXJnYWJsZVZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1lcmdlVmFsdWUocHJvcCwgdmFsdWVzTmFtZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWRkRGVwZW5kZWRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXBlbmRlZFByb3BlcnRpZXMuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgIHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREZXBlbmRlZFByb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPyB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA6IFtdO1xuICB9XG4gIHByaXZhdGUgbWVyZ2VWYWx1ZShwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXNbdmFsdWVOYW1lXSA9PSBudWxsICYmIHByb3BbdmFsdWVOYW1lXSAhPSBudWxsKSB7XG4gICAgICB0aGlzW3ZhbHVlTmFtZV0gPSBwcm9wW3ZhbHVlTmFtZV07XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ge1xuICBwcml2YXRlIHN0YXRpYyBwcm9wZXJ0aWVzOiBJT2JqZWN0ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHBhcmVudENsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgcHVibGljIHN0YXRpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHk6IGFueSkge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBwcm9wc1tjbGFzc05hbWVdID0gW107XG4gICAgfVxuICAgIHByb3BzW2NsYXNzTmFtZV0ucHVzaChwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZW1vdmVQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmICghcHJvcHNbY2xhc3NOYW1lXSkgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHByb3BzW2NsYXNzTmFtZV0uc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBhZGRDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcGFyZW50Q2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocGFyZW50Q2xhc3NOYW1lKSB7XG4gICAgICBwYXJlbnRDbGFzc05hbWUgPSBwYXJlbnRDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdID0gcGFyZW50Q2xhc3NOYW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIHdoaWxlIChjbGFzc05hbWUpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbY2xhc3NOYW1lXTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzc05hbWUgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKG9iajogYW55KSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm47XG4gICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBvYmouZ2V0VHlwZSgpKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmo6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcHMgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wcm9wZXJ0aWVzO1xuICAgIGlmIChwcm9wc1tjbGFzc05hbWVdKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzSW5PYmoob2JqLCBwcm9wc1tjbGFzc05hbWVdKTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucGFyZW50Q2xhc3Nlc1tjbGFzc05hbWVdO1xuICAgIGlmIChwYXJlbnRDbGFzcykge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydGllc0NvcmUob2JqLCBwYXJlbnRDbGFzcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNJbk9iaihvYmo6IGFueSwgcHJvcGVydGllczogYW55W10pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnR5SW5PYmoob2JqLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvcGVydHlJbk9iaihvYmo6IGFueSwgcHJvcDogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKG9ialtwcm9wLm5hbWVdIHx8IG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgcHJvcC5pc0xvY2FsaXphYmxlICYmXG4gICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJlxuICAgICAgIW9ialtwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0gJiZcbiAgICAgIG9iai5jcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9ialxuICAgICkge1xuICAgICAgb2JqLmNyZWF0ZUN1c3RvbUxvY2FsaXphYmxlT2JqKHByb3AubmFtZSk7XG4gICAgICB2YXIgbG9jRGVzYyA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5nZXRMb2NhbGl6YWJsZVN0cmluZyhwcm9wLm5hbWUpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5LCBsb2NEZXNjKTtcbiAgICAgIHZhciBkZXNjID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHByb3AuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodjogYW55KSB7XG4gICAgICAgICAgb2JqLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChwcm9wLm5hbWUsIHYpO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AubmFtZSwgZGVzYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZihwcm9wLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIikgJiZcbiAgICAgICAgdHlwZW9mIG9iai5jcmVhdGVOZXdBcnJheSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgb2JqLmNyZWF0ZU5ld0FycmF5KHByb3AubmFtZSwgZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICAgIGl0ZW0ubG9jT3duZXIgPSBvYmo7XG4gICAgICAgICAgaXRlbS5vd25lclByb3BlcnR5TmFtZSA9IHByb3AubmFtZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iai5zZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghIW9iai5nZXRQcm9wZXJ0eVZhbHVlICYmICEhb2JqLnNldFByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3Aub25HZXRWYWx1ZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHY6IGFueSkge1xuICAgICAgICAgICAgaWYgKCEhcHJvcC5vblNldFZhbHVlKSB7XG4gICAgICAgICAgICAgIHByb3Aub25TZXRWYWx1ZShvYmosIHYsIG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqLnNldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLm5hbWUsIGRlc2MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICBzdGF0aWMgcmVxdWlyZWRTeW1ib2wgPSBcIiFcIjtcbiAgc3RhdGljIHR5cGVTeW1ib2wgPSBcIjpcIjtcbiAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogQXJyYXk8YW55PixcbiAgICBwdWJsaWMgY3JlYXRvcjogKGpzb24/OiBhbnkpID0+IGFueSA9IG51bGwsXG4gICAgcHVibGljIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGhpcy5wYXJlbnROYW1lKSB7XG4gICAgICB0aGlzLnBhcmVudE5hbWUgPSB0aGlzLnBhcmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZENsYXNzKG5hbWUsIHRoaXMucGFyZW50TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHRoaXMuY3JlYXRlUHJvcGVydHkocHJvcGVydGllc1tpXSk7XG4gICAgICBpZiAocHJvcCkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGZpbmQobmFtZTogc3RyaW5nKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucHJvcGVydGllc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVQcm9wZXJ0eShwcm9wSW5mbzogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gdHlwZW9mIHByb3BJbmZvID09PSBcInN0cmluZ1wiID8gcHJvcEluZm8gOiBwcm9wSW5mby5uYW1lO1xuICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnR5VHlwZSA9IG51bGw7XG4gICAgdmFyIHR5cGVJbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKEpzb25NZXRhZGF0YUNsYXNzLnR5cGVTeW1ib2wpO1xuICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xuICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyh0eXBlSW5kZXggKyAxKTtcbiAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgdHlwZUluZGV4KTtcbiAgICB9XG4gICAgdmFyIGlzUmVxdWlyZWQgPVxuICAgICAgdGhpcy5nZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZSkgfHwgISFwcm9wSW5mby5pc1JlcXVpcmVkO1xuICAgIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG4gICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCk7XG4gICAgaWYgKHByb3BlcnR5VHlwZSkge1xuICAgICAgcHJvcC50eXBlID0gcHJvcGVydHlUeXBlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BJbmZvID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAocHJvcEluZm8udHlwZSkge1xuICAgICAgICBwcm9wLnR5cGUgPSBwcm9wSW5mby50eXBlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5kZWZhdWx0KSkge1xuICAgICAgICBwcm9wLmRlZmF1bHRWYWx1ZSA9IHByb3BJbmZvLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzU2VyaWFsaXphYmxlKSkge1xuICAgICAgICBwcm9wLmlzU2VyaWFsaXphYmxlID0gcHJvcEluZm8uaXNTZXJpYWxpemFibGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzTGlnaHRTZXJpYWxpemFibGUpKSB7XG4gICAgICAgIHByb3AuaXNMaWdodFNlcmlhbGl6YWJsZSA9IHByb3BJbmZvLmlzTGlnaHRTZXJpYWxpemFibGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heExlbmd0aCkpIHtcbiAgICAgICAgcHJvcC5tYXhMZW5ndGggPSBwcm9wSW5mby5tYXhMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRpc3BsYXlOYW1lKSkge1xuICAgICAgICBwcm9wLmRpc3BsYXlOYW1lID0gcHJvcEluZm8uZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5KSkge1xuICAgICAgICBwcm9wLmNhdGVnb3J5ID0gcHJvcEluZm8uY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5SW5kZXgpKSB7XG4gICAgICAgIHByb3AuY2F0ZWdvcnlJbmRleCA9IHByb3BJbmZvLmNhdGVnb3J5SW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm5leHRUb1Byb3BlcnR5KSkge1xuICAgICAgICBwcm9wLm5leHRUb1Byb3BlcnR5ID0gcHJvcEluZm8ubmV4dFRvUHJvcGVydHk7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnZpc2libGVJbmRleCkpIHtcbiAgICAgICAgcHJvcC52aXNpYmxlSW5kZXggPSBwcm9wSW5mby52aXNpYmxlSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnNob3dNb2RlKSkge1xuICAgICAgICBwcm9wLnNob3dNb2RlID0gcHJvcEluZm8uc2hvd01vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heFZhbHVlKSkge1xuICAgICAgICBwcm9wLm1heFZhbHVlID0gcHJvcEluZm8ubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1pblZhbHVlKSkge1xuICAgICAgICBwcm9wLm1pblZhbHVlID0gcHJvcEluZm8ubWluVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzRHluYW1pY0Nob2ljZXMpKSB7XG4gICAgICAgIHByb3AuaXNEeW5hbWljQ2hvaWNlcyA9IHByb3BJbmZvLmlzRHluYW1pY0Nob2ljZXM7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8udmlzaWJsZSA9PT0gdHJ1ZSB8fCBwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICBwcm9wLnZpc2libGUgPSBwcm9wSW5mby52aXNpYmxlO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8udmlzaWJsZUlmKSB7XG4gICAgICAgIHByb3AudmlzaWJsZUlmID0gcHJvcEluZm8udmlzaWJsZUlmO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8ub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSkge1xuICAgICAgICBwcm9wLm9uUHJvcGVydHlFZGl0b3JVcGRhdGUgPSBwcm9wSW5mby5vblByb3BlcnR5RWRpdG9yVXBkYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLnJlYWRPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgIHByb3AucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNob2ljZXMpIHtcbiAgICAgICAgdmFyIGNob2ljZXNGdW5jID1cbiAgICAgICAgICB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyA9PT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XG4gICAgICAgIHZhciBjaG9pY2VzVmFsdWUgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzICE9PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcbiAgICAgICAgcHJvcC5zZXRDaG9pY2VzKGNob2ljZXNWYWx1ZSwgY2hvaWNlc0Z1bmMpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8uYmFzZVZhbHVlKSB7XG4gICAgICAgIHByb3Auc2V0QmFzZVZhbHVlKHByb3BJbmZvLmJhc2VWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ub25HZXRWYWx1ZSkge1xuICAgICAgICBwcm9wLm9uR2V0VmFsdWUgPSBwcm9wSW5mby5vbkdldFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLm9uU2V0VmFsdWUpIHtcbiAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XG4gICAgICAgIHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IFwibG9jXCIgKyBwcm9wLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ID0gcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICAgICAgICB2YXIgczogc3RyaW5nO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiZcbiAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eS5pbmRleE9mKFwibG9jXCIpID09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcHJvcC5pc0xvY2FsaXphYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgcHJvcC5pc0xvY2FsaXphYmxlID0gcHJvcEluZm8uaXNMb2NhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWUpIHtcbiAgICAgICAgcHJvcC5jbGFzc05hbWUgPSBwcm9wSW5mby5jbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uYmFzZUNsYXNzTmFtZSkge1xuICAgICAgICBwcm9wLmJhc2VDbGFzc05hbWUgPSBwcm9wSW5mby5iYXNlQ2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcbiAgICAgICAgcHJvcC5jbGFzc05hbWVQYXJ0ID0gcHJvcEluZm8uY2xhc3NOYW1lUGFydDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWUpIHtcbiAgICAgICAgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPSBwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ubGF5b3V0KSB7XG4gICAgICAgIHByb3AubGF5b3V0ID0gcHJvcEluZm8ubGF5b3V0O1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmRlcGVuZHNPbikge1xuICAgICAgICB0aGlzLmFkZERlcGVuZHNPblByb3BlcnRpZXMocHJvcCwgcHJvcEluZm8uZGVwZW5kc09uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3A7XG4gIH1cbiAgcHJpdmF0ZSBhZGREZXBlbmRzT25Qcm9wZXJ0aWVzKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgZGVwZW5kc09uOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRzT24pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZHNPbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFkZERlcGVuZHNPblByb3BlcnR5KHByb3AsIGRlcGVuZHNPbltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGREZXBlbmRzT25Qcm9wZXJ0eShwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIGRlcGVuZHNPbjogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kKGRlcGVuZHNPbik7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgcHJvcGVydHkgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLnBhcmVudE5hbWUsIGRlcGVuZHNPbik7XG4gICAgfVxuICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcbiAgICBwcm9wZXJ0eS5hZGREZXBlbmRlZFByb3BlcnR5KHByb3AubmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BlcnR5TmFtZS5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wZXJ0eU5hbWVbMF0gPT0gSnNvbk1ldGFkYXRhQ2xhc3MucmVxdWlyZWRTeW1ib2xcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWUpKSByZXR1cm4gcHJvcGVydHlOYW1lO1xuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhIHtcbiAgcHJpdmF0ZSBjbGFzc2VzOiBIYXNoVGFibGU8SnNvbk1ldGFkYXRhQ2xhc3M+ID0ge307XG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVOYW1lczogSGFzaFRhYmxlPHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSBjaGlsZHJlbkNsYXNzZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4+ID0ge307XG4gIHByaXZhdGUgY2xhc3NQcm9wZXJ0aWVzOiBIYXNoVGFibGU8QXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Pj4gPSB7fTtcbiAgcHJpdmF0ZSBjbGFzc0hhc2hQcm9wZXJ0aWVzOiBIYXNoVGFibGU8SGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XG4gIHB1YmxpYyBhZGRDbGFzcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogQXJyYXk8YW55PixcbiAgICBjcmVhdG9yOiAoanNvbj86IGFueSkgPT4gYW55ID0gbnVsbCxcbiAgICBwYXJlbnROYW1lOiBzdHJpbmcgPSBudWxsXG4gICk6IEpzb25NZXRhZGF0YUNsYXNzIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gbmV3IEpzb25NZXRhZGF0YUNsYXNzKFxuICAgICAgbmFtZSxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBjcmVhdG9yLFxuICAgICAgcGFyZW50TmFtZVxuICAgICk7XG4gICAgdGhpcy5jbGFzc2VzW25hbWVdID0gbWV0YURhdGFDbGFzcztcbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdO1xuICAgICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV0ucHVzaChtZXRhRGF0YUNsYXNzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1ldGFEYXRhQ2xhc3M7XG4gIH1cbiAgcHVibGljIHJlbW92ZUNsYXNzKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBtZXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuO1xuICAgIGRlbGV0ZSB0aGlzLmNsYXNzZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIW1ldGFDbGFzcy5wYXJlbnROYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1ttZXRhQ2xhc3MucGFyZW50TmFtZV0uaW5kZXhPZihtZXRhQ2xhc3MpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbkNsYXNzZXNbbWV0YUNsYXNzLnBhcmVudE5hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcmUobmFtZTogc3RyaW5nLCBjcmVhdG9yOiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLm92ZXJyaWRlQ2xhc3NDcmVhdG9yKG5hbWUsIGNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZUNsYXNzQ3JlYXRvcihuYW1lOiBzdHJpbmcsIGNyZWF0b3I6ICgpID0+IGFueSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAobWV0YURhdGFDbGFzcykge1xuICAgICAgbWV0YURhdGFDbGFzcy5jcmVhdG9yID0gY3JlYXRvcjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgbWV0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFDbGFzcykgcmV0dXJuIFtdO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIXByb3BlcnRpZXMpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhtZXRhQ2xhc3MubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgfVxuICBwcml2YXRlIGdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogSGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBtZXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghbWV0YUNsYXNzKSByZXR1cm4ge307XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICAgIGlmICghIXByb3BlcnRpZXMpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXNGb3JDbGFzcyhtZXRhQ2xhc3MubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NIYXNoUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gIH1cbiAgcHJpdmF0ZSBmaWxsUHJvcGVydGllc0ZvckNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIHZhciBoYXNoUHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZmlsbFByb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzLCBoYXNoUHJvcGVydGllcyk7XG4gICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbY2xhc3NOYW1lXSA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW2NsYXNzTmFtZV0gPSBoYXNoUHJvcGVydGllcztcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllc0J5T2JqKG9iajogYW55KTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm4gW107XG4gICAgdmFyIHJlczogYW55ID0ge307XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXRUeXBlKCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc1twcm9wc1tpXS5uYW1lXSA9IHByb3BzW2ldO1xuICAgIH1cbiAgICB2YXIgZHluYW1pY1Byb3BzID0gISFvYmouZ2V0RHluYW1pY1R5cGVcbiAgICAgID8gdGhpcy5nZXRQcm9wZXJ0aWVzKG9iai5nZXREeW5hbWljVHlwZSgpKVxuICAgICAgOiBudWxsO1xuICAgIGlmIChkeW5hbWljUHJvcHMgJiYgZHluYW1pY1Byb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluYW1pY1Byb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBkUHJvcCA9IGR5bmFtaWNQcm9wc1tpXTtcbiAgICAgICAgaWYgKCEhcmVzW2RQcm9wLm5hbWVdKSBjb250aW51ZTtcbiAgICAgICAgcmVzW2RQcm9wLm5hbWVdID0gZFByb3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMpLm1hcCgoa2V5KSA9PiByZXNba2V5XSk7XG4gIH1cbiAgcHVibGljIGdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmooXG4gICAgb2JqOiBhbnksXG4gICAgZHluYW1pY1R5cGU6IHN0cmluZyA9IG51bGxcbiAgKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlIHx8ICghb2JqLmdldER5bmFtaWNUeXBlICYmICFkeW5hbWljVHlwZSkpXG4gICAgICByZXR1cm4gW107XG4gICAgdmFyIGRUeXBlID0gISFkeW5hbWljVHlwZSA/IGR5bmFtaWNUeXBlIDogb2JqLmdldER5bmFtaWNUeXBlKCk7XG4gICAgaWYgKCFkVHlwZSkgcmV0dXJuIFtdO1xuICAgIHZhciBkeW5hbWljUHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMoZFR5cGUpO1xuICAgIGlmICghZHluYW1pY1Byb3BzIHx8IGR5bmFtaWNQcm9wcy5sZW5ndGggPT0gMCkgcmV0dXJuIFtdO1xuICAgIHZhciBoYXNoOiBhbnkgPSB7fTtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgaGFzaFtwcm9wc1tpXS5uYW1lXSA9IHByb3BzW2ldO1xuICAgIH1cbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkeW5hbWljUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBkUHJvcCA9IGR5bmFtaWNQcm9wc1tpXTtcbiAgICAgIGlmICghaGFzaFtkUHJvcC5uYW1lXSkge1xuICAgICAgICByZXMucHVzaChkUHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGZpbmRQcm9wZXJ0eShcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xuICApOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBoYXNoID0gdGhpcy5nZXRIYXNoUHJvcGVydGllcyhjbGFzc05hbWUpO1xuICAgIHZhciByZXMgPSBoYXNoW3Byb3BlcnR5TmFtZV07XG4gICAgcmV0dXJuICEhcmVzID8gcmVzIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZmluZFByb3BlcnRpZXMoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlOYW1lczogQXJyYXk8c3RyaW5nPlxuICApOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGhhc2ggPSB0aGlzLmdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IGhhc2hbcHJvcGVydHlOYW1lc1tpXV07XG4gICAgICBpZiAocHJvcCkge1xuICAgICAgICByZXN1bHQucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsUHJvcGVydGllc0J5TmFtZShcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xuICApOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4oKTtcbiAgICB2YXIgY2xhc3NlcyA9IHRoaXMuZ2V0QWxsQ2xhc3NlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNsYXNzSW5mbyA9IHRoaXMuZmluZENsYXNzKGNsYXNzZXNbaV0pO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc0luZm8ucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoY2xhc3NJbmZvLnByb3BlcnRpZXNbal0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICByZXMucHVzaChjbGFzc0luZm8ucHJvcGVydGllc1tqXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0QWxsQ2xhc3NlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuY2xhc3Nlcykge1xuICAgICAgcmVzLnB1c2gobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUNsYXNzKG5hbWU6IHN0cmluZywganNvbjogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MobmFtZSk7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobWV0YURhdGFDbGFzcy5jcmVhdG9yKSByZXR1cm4gbWV0YURhdGFDbGFzcy5jcmVhdG9yKGpzb24pO1xuICAgIHZhciBwYXJlbnROYW1lID0gbWV0YURhdGFDbGFzcy5wYXJlbnROYW1lO1xuICAgIHdoaWxlIChwYXJlbnROYW1lKSB7XG4gICAgICBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MocGFyZW50TmFtZSk7XG4gICAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgICAgcGFyZW50TmFtZSA9IG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZTtcbiAgICAgIGlmIChtZXRhRGF0YUNsYXNzLmNyZWF0b3IpXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUN1c3RvbVR5cGUobmFtZSwgbWV0YURhdGFDbGFzcy5jcmVhdG9yLCBqc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21UeXBlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVhdG9yOiBhbnksXG4gICAganNvbjogYW55ID0gdW5kZWZpbmVkXG4gICk6IGFueSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzID0gY3JlYXRvcihqc29uKTtcbiAgICB2YXIgY3VzdG9tVHlwZU5hbWUgPSBuYW1lO1xuICAgIHZhciBjdXN0b21UZW1wbGF0ZU5hbWUgPSByZXMuZ2V0VGVtcGxhdGVcbiAgICAgID8gcmVzLmdldFRlbXBsYXRlKClcbiAgICAgIDogcmVzLmdldFR5cGUoKTtcbiAgICByZXMuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXN0b21UeXBlTmFtZTtcbiAgICB9O1xuICAgIHJlcy5nZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZW1wbGF0ZU5hbWU7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q2hpbGRyZW5DbGFzc2VzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKG5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRSZXF1aXJlZFByb3BlcnRpZXMobmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMobmFtZSk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnRpZXNbaV0uaXNSZXF1aXJlZCkge1xuICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzSW5mb3M6IEFycmF5PGFueT4pIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tUHJvcGVydHlDb3JlKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnRpZXNJbmZvc1tpXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShjbGFzc05hbWU6IHN0cmluZywgcHJvcGVydHlJbmZvOiBhbnkpOiBKc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVByb3BlcnR5Q29yZSh0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpLCBwcm9wZXJ0eUluZm8pO1xuICB9XG4gIHByaXZhdGUgYWRkQ3VzdG9tUHJvcGVydHlDb3JlKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5SW5mbzogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFtZXRhRGF0YUNsYXNzKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5SW5mbyk7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eS5pc0N1c3RvbSA9IHRydWU7XG4gICAgICB0aGlzLmFkZFByb3BlcnR5VG9DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XG4gICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZFByb3BlcnR5KG1ldGFEYXRhQ2xhc3MubmFtZSwgcHJvcGVydHkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJvcGVydHkgPSBtZXRhRGF0YUNsYXNzLmZpbmQocHJvcGVydHlOYW1lKTtcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MobWV0YURhdGFDbGFzcywgcHJvcGVydHkpO1xuICAgICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzcyk7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5yZW1vdmVQcm9wZXJ0eShcbiAgICAgICAgbWV0YURhdGFDbGFzcy5uYW1lLFxuICAgICAgICBwcm9wZXJ0eU5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHlUb0NsYXNzKFxuICAgIG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHlcbiAgKSB7XG4gICAgaWYgKG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eS5uYW1lKSAhPSBudWxsKSByZXR1cm47XG4gICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICB9XG4gIHByaXZhdGUgcmVtb3ZlUHJvcGVydHlGcm9tQ2xhc3MoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICB2YXIgaW5kZXggPSBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMuaW5kZXhPZihwcm9wZXJ0eSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3M6IEpzb25NZXRhZGF0YUNsYXNzKSB7XG4gICAgdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XG4gICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFEYXRhQ2xhc3MubmFtZV0gPSBudWxsO1xuICAgIHZhciBjaGlsZENsYXNzZXMgPSB0aGlzLmdldENoaWxkcmVuQ2xhc3NlcyhtZXRhRGF0YUNsYXNzLm5hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjaGlsZENsYXNzZXNbaV0ubmFtZV0gPSBudWxsO1xuICAgICAgdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbENoaWxkcmVuQ2xhc3NlcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FuQmVDcmVhdGVkOiBib29sZWFuLFxuICAgIHJlc3VsdDogQXJyYXk8SnNvbk1ldGFkYXRhQ2xhc3M+XG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW25hbWVdO1xuICAgIGlmICghY2hpbGRyZW4pIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWNhbkJlQ3JlYXRlZCB8fCBjaGlsZHJlbltpXS5jcmVhdG9yKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsbENoaWxkcmVuQ2xhc3NlcyhjaGlsZHJlbltpXS5uYW1lLCBjYW5CZUNyZWF0ZWQsIHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmaW5kQ2xhc3MobmFtZTogc3RyaW5nKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xhc3Nlc1tuYW1lXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmFsdGVybmF0aXZlTmFtZXNbbmFtZV07XG4gICAgICBpZiAoISFuZXdOYW1lICYmIG5ld05hbWUgIT0gbmFtZSkgcmV0dXJuIHRoaXMuZmluZENsYXNzKG5ld05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBpc0Rlc2NlbmRhbnRPZihjbGFzc05hbWU6IHN0cmluZywgYW5jZXN0b3JDbGFzc05hbWU6IHN0cmluZykge1xuICAgIGlmICghY2xhc3NOYW1lIHx8ICFhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBhbmNlc3RvckNsYXNzTmFtZSA9IGFuY2VzdG9yQ2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGNsYXNzXyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFjbGFzc18pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHBhcmVudENsYXNzID0gY2xhc3NfO1xuICAgIGRvIHtcbiAgICAgIGlmIChwYXJlbnRDbGFzcy5uYW1lID09PSBhbmNlc3RvckNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENsYXNzID0gdGhpcy5jbGFzc2VzW3BhcmVudENsYXNzLnBhcmVudE5hbWVdO1xuICAgIH0gd2hpbGUgKCEhcGFyZW50Q2xhc3MpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQWx0ZXJOYXRpdmVDbGFzc05hbWUobmFtZTogc3RyaW5nLCBhbHRlcm5hdGl2ZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuYWx0ZXJuYXRpdmVOYW1lc1thbHRlcm5hdGl2ZU5hbWUudG9Mb3dlckNhc2UoKV0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcHJpdmF0ZSBmaWxsUHJvcGVydGllcyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbGlzdDogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PixcbiAgICBoYXNoOiBIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5PlxuICApIHtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xuICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuO1xuICAgIGlmIChtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWUpIHtcbiAgICAgIHRoaXMuZmlsbFByb3BlcnRpZXMobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lLCBsaXN0LCBoYXNoKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzW2ldO1xuICAgICAgdGhpcy5hZGRQcm9wZXJ0eUNvcmUocHJvcCwgbGlzdCwgaGFzaCk7XG4gICAgICBoYXNoW3Byb3AubmFtZV0gPSBwcm9wO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZFByb3BlcnR5Q29yZShcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIGxpc3Q6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAgaGFzaDogSGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT5cbiAgKSB7XG4gICAgaWYgKCFoYXNoW3Byb3BlcnR5Lm5hbWVdKSB7XG4gICAgICBsaXN0LnB1c2gocHJvcGVydHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT0gcHJvcGVydHkubmFtZSkge1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9wZXJ0eS5tZXJnZVdpdGgobGlzdFtpbmRleF0pO1xuICAgIGxpc3RbaW5kZXhdID0gcHJvcGVydHk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uRXJyb3Ige1xuICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBhdDogTnVtYmVyID0gLTE7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBzdHJpbmcsIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHt9XG4gIHB1YmxpYyBnZXRGdWxsRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgKHRoaXMuZGVzY3JpcHRpb24gPyBcIlxcblwiICsgdGhpcy5kZXNjcmlwdGlvbiA6IFwiXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nLCBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwidW5rbm93bnByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSAnXCIgK1xuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICBcIicgaW4gY2xhc3MgJ1wiICtcbiAgICAgICAgY2xhc3NOYW1lICtcbiAgICAgICAgXCInIGlzIHVua25vd24uXCJcbiAgICApO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGFyZTogXCI7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBwcm9wZXJ0aWVzW2ldLm5hbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSBleHRlbmRzIEpzb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHR5cGU6IHN0cmluZyxcbiAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHR5cGUsIG1lc3NhZ2UpO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGF2YWlsYWJsZTogXCI7XG4gICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCInXCIgKyB0eXBlc1tpXS5uYW1lICsgXCInXCI7XG4gICAgfVxuICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIuXCI7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYmFzZUNsYXNzTmFtZSxcbiAgICAgIFwibWlzc2luZ3R5cGVwcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBtaXNzaW5nIGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICtcbiAgICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgICAgXCInLlwiXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IgZXh0ZW5kcyBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGJhc2VDbGFzc05hbWUsXG4gICAgICBcImluY29ycmVjdHR5cGVwcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBpbmNvcnJlY3QgaW4gdGhlIG9iamVjdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHByb3BlcnR5OiAnXCIgK1xuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgICBcIicuXCJcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvciBleHRlbmRzIEpzb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcInJlcXVpcmVkcHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5ICdcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiJyBpcyByZXF1aXJlZCBpbiBjbGFzcyAnXCIgK1xuICAgICAgICBjbGFzc05hbWUgK1xuICAgICAgICBcIicuXCJcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uT2JqZWN0IHtcbiAgcHJpdmF0ZSBzdGF0aWMgdHlwZVByb3BlcnR5TmFtZSA9IFwidHlwZVwiO1xuICBwcml2YXRlIHN0YXRpYyBwb3NpdGlvblByb3BlcnR5TmFtZSA9IFwicG9zXCI7XG4gIHByaXZhdGUgc3RhdGljIG1ldGFEYXRhVmFsdWUgPSBuZXcgSnNvbk1ldGFkYXRhKCk7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IG1ldGFEYXRhKCkge1xuICAgIHJldHVybiBKc29uT2JqZWN0Lm1ldGFEYXRhVmFsdWU7XG4gIH1cbiAgcHVibGljIGVycm9ycyA9IG5ldyBBcnJheTxKc29uRXJyb3I+KCk7XG4gIHB1YmxpYyBsaWdodFNlcmlhbGl6aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0b0pzb25PYmplY3Qob2JqOiBhbnksIHN0b3JlRGVmYXVsdHMgPSBmYWxzZSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uT2JqZWN0Q29yZShvYmosIG51bGwsIHN0b3JlRGVmYXVsdHMpO1xuICB9XG4gIHB1YmxpYyB0b09iamVjdChqc29uT2JqOiBhbnksIG9iajogYW55KSB7XG4gICAgdGhpcy50b09iamVjdENvcmUoanNvbk9iaiwgb2JqKTtcbiAgICBpZiAoISFvYmouZ2V0VHlwZSkge1xuICAgICAgdmFyIGVycm9yID0gdGhpcy5nZXRSZXF1aXJlZEVycm9yKGpzb25PYmosIG9iai5nZXRUeXBlKCkpO1xuICAgICAgaWYgKCEhZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGROZXdFcnJvcihlcnJvciwganNvbk9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0b09iamVjdENvcmUoanNvbk9iajogYW55LCBvYmo6IGFueSkge1xuICAgIGlmICghanNvbk9iaikgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbnVsbDtcbiAgICB2YXIgb2JqVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgbmVlZEFkZEVycm9ycyA9IHRydWU7XG4gICAgaWYgKG9iai5nZXRUeXBlKSB7XG4gICAgICBvYmpUeXBlID0gb2JqLmdldFR5cGUoKTtcbiAgICAgIHByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqVHlwZSk7XG4gICAgICBuZWVkQWRkRXJyb3JzID1cbiAgICAgICAgISFvYmpUeXBlICYmICFKc29uT2JqZWN0Lm1ldGFEYXRhLmlzRGVzY2VuZGFudE9mKG9ialR5cGUsIFwiaXRlbXZhbHVlXCIpO1xuICAgIH1cbiAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybjtcbiAgICBpZiAob2JqLnN0YXJ0TG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBvYmouc3RhcnRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB9XG4gICAgcHJvcGVydGllcyA9IHRoaXMuYWRkRHluYW1pY1Byb3BlcnRpZXMob2JqLCBqc29uT2JqLCBwcm9wZXJ0aWVzKTtcbiAgICBmb3IgKHZhciBrZXkgaW4ganNvbk9iaikge1xuICAgICAgaWYgKGtleSA9PT0gSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXkgPT09IEpzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgb2JqW2tleV0gPSBqc29uT2JqW2tleV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kUHJvcGVydHkocHJvcGVydGllcywga2V5KTtcbiAgICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgICAgaWYgKG5lZWRBZGRFcnJvcnMpIHtcbiAgICAgICAgICB0aGlzLmFkZE5ld0Vycm9yKFxuICAgICAgICAgICAgbmV3IEpzb25Vbmtub3duUHJvcGVydHlFcnJvcihrZXkudG9TdHJpbmcoKSwgb2JqVHlwZSksXG4gICAgICAgICAgICBqc29uT2JqXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWVUb09iaihqc29uT2JqW2tleV0sIG9iaiwgcHJvcGVydHkpO1xuICAgIH1cbiAgICBpZiAob2JqLmVuZExvYWRpbmdGcm9tSnNvbikge1xuICAgICAgb2JqLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdG9Kc29uT2JqZWN0Q29yZShcbiAgICBvYmo6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIHN0b3JlRGVmYXVsdHMgPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmICghb2JqIHx8ICFvYmouZ2V0VHlwZSkgcmV0dXJuIG9iajtcbiAgICBpZiAodHlwZW9mIG9iai5nZXREYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBvYmouZ2V0RGF0YSgpO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiAhcHJvcGVydHkuY2xhc3NOYW1lKSB7XG4gICAgICAoPGFueT5yZXN1bHQpW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eS5nZXRPYmpUeXBlKFxuICAgICAgICBvYmouZ2V0VHlwZSgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnByb3BlcnRpZXNUb0pzb24oXG4gICAgICBvYmosXG4gICAgICBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSksXG4gICAgICByZXN1bHQsXG4gICAgICBzdG9yZURlZmF1bHRzXG4gICAgKTtcbiAgICB0aGlzLnByb3BlcnRpZXNUb0pzb24oXG4gICAgICBvYmosXG4gICAgICB0aGlzLmdldER5bmFtaWNQcm9wZXJ0aWVzKG9iaiksXG4gICAgICByZXN1bHQsXG4gICAgICBzdG9yZURlZmF1bHRzXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqOiBhbnkpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKG9iaik7XG4gIH1cbiAgcHJpdmF0ZSBhZGREeW5hbWljUHJvcGVydGllcyhcbiAgICBvYmo6IGFueSxcbiAgICBqc29uT2JqOiBhbnksXG4gICAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PlxuICApOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICBpZiAoIW9iai5nZXREeW5hbWljUHJvcGVydHlOYW1lKSByZXR1cm4gcHJvcGVydGllcztcbiAgICB2YXIgZHluYW1pY1Byb3BOYW1lID0gb2JqLmdldER5bmFtaWNQcm9wZXJ0eU5hbWUoKTtcbiAgICBpZiAoIWR5bmFtaWNQcm9wTmFtZSkgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgaWYgKGpzb25PYmpbZHluYW1pY1Byb3BOYW1lXSkge1xuICAgICAgb2JqW2R5bmFtaWNQcm9wTmFtZV0gPSBqc29uT2JqW2R5bmFtaWNQcm9wTmFtZV07XG4gICAgfVxuICAgIHZhciBkeW5hbWljUHJvcGVydGllcyA9IHRoaXMuZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkeW5hbWljUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goZHluYW1pY1Byb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgcHJvcGVydGllc1RvSnNvbihcbiAgICBvYmo6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGpzb246IGFueSxcbiAgICBzdG9yZURlZmF1bHRzID0gZmFsc2VcbiAgKSB7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmFsdWVUb0pzb24ob2JqLCBqc29uLCBwcm9wZXJ0aWVzW2ldLCBzdG9yZURlZmF1bHRzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHZhbHVlVG9Kc29uKFxuICAgIG9iajogYW55LFxuICAgIHJlc3VsdDogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc3RvcmVEZWZhdWx0cyA9IGZhbHNlXG4gICkge1xuICAgIGlmIChcbiAgICAgIHByb3BlcnR5LmlzU2VyaWFsaXphYmxlID09PSBmYWxzZSB8fFxuICAgICAgKHByb3BlcnR5LmlzTGlnaHRTZXJpYWxpemFibGUgPT09IGZhbHNlICYmIHRoaXMubGlnaHRTZXJpYWxpemluZylcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIHZhbHVlID0gcHJvcGVydHkuZ2V0VmFsdWUob2JqKTtcbiAgICBpZiAoIXN0b3JlRGVmYXVsdHMgJiYgcHJvcGVydHkuaXNEZWZhdWx0VmFsdWUodmFsdWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUFycmF5KHZhbHVlKSkge1xuICAgICAgdmFyIGFyclZhbHVlID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyclZhbHVlLnB1c2godGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlW2ldLCBwcm9wZXJ0eSwgc3RvcmVEZWZhdWx0cykpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSBhcnJWYWx1ZS5sZW5ndGggPiAwID8gYXJyVmFsdWUgOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMudG9Kc29uT2JqZWN0Q29yZSh2YWx1ZSwgcHJvcGVydHksIHN0b3JlRGVmYXVsdHMpO1xuICAgIH1cbiAgICB2YXIgaGFzVmFsdWUgPVxuICAgICAgdHlwZW9mIG9ialtcImdldFByb3BlcnR5VmFsdWVcIl0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgb2JqW1wiZ2V0UHJvcGVydHlWYWx1ZVwiXShwcm9wZXJ0eS5uYW1lLCBudWxsKSAhPT0gbnVsbDtcbiAgICBpZiAoKHN0b3JlRGVmYXVsdHMgJiYgaGFzVmFsdWUpIHx8ICFwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdFtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVUb09iaih2YWx1ZTogYW55LCBvYmo6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5yZW1vdmVQb3MocHJvcGVydHksIHZhbHVlKTtcbiAgICBpZiAocHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5oYXNUb1VzZVNldFZhbHVlKSB7XG4gICAgICBwcm9wZXJ0eS5zZXRWYWx1ZShvYmosIHZhbHVlLCB0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUFycmF5KHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZVRvQXJyYXkodmFsdWUsIG9iaiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmV3T2JqID0gdGhpcy5jcmVhdGVOZXdPYmoodmFsdWUsIHByb3BlcnR5KTtcbiAgICBpZiAobmV3T2JqLm5ld09iaikge1xuICAgICAgdGhpcy50b09iamVjdENvcmUodmFsdWUsIG5ld09iai5uZXdPYmopO1xuICAgICAgdmFsdWUgPSBuZXdPYmoubmV3T2JqO1xuICAgIH1cbiAgICBpZiAoIW5ld09iai5lcnJvcikge1xuICAgICAgaWYgKHByb3BlcnR5ICE9IG51bGwpIHtcbiAgICAgICAgcHJvcGVydHkuc2V0VmFsdWUob2JqLCB2YWx1ZSwgdGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbcHJvcGVydHkubmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVQb3MocHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSwgdmFsdWU6IGFueSkge1xuICAgIGlmICghcHJvcGVydHkgfHwgIXByb3BlcnR5LnR5cGUgfHwgcHJvcGVydHkudHlwZS5pbmRleE9mKFwidmFsdWVcIikgPCAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMucmVtb3ZlUG9zRnJvbU9iaih2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVQb3NGcm9tT2JqKG9iajogYW55KSB7XG4gICAgaWYgKCFvYmopIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnJlbW92ZVBvc0Zyb21PYmoob2JqW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhb2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XG4gICAgICBkZWxldGUgb2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzVmFsdWVBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTmV3T2JqKHZhbHVlOiBhbnksIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IHsgbmV3T2JqOiBudWxsLCBlcnJvcjogbnVsbCB9O1xuICAgIHZhciBjbGFzc05hbWUgPSB2YWx1ZVtKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWVdO1xuICAgIGlmICghY2xhc3NOYW1lICYmIHByb3BlcnR5ICE9IG51bGwgJiYgcHJvcGVydHkuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgPSBwcm9wZXJ0eS5jbGFzc05hbWU7XG4gICAgfVxuICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmdldENsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIHJlc3VsdC5uZXdPYmogPSBjbGFzc05hbWVcbiAgICAgID8gSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyhjbGFzc05hbWUsIHZhbHVlKVxuICAgICAgOiBudWxsO1xuICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY2hlY2tOZXdPYmplY3RPbkVycm9ycyhcbiAgICAgIHJlc3VsdC5uZXdPYmosXG4gICAgICB2YWx1ZSxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgY2hlY2tOZXdPYmplY3RPbkVycm9ycyhcbiAgICBuZXdPYmo6IGFueSxcbiAgICB2YWx1ZTogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgKTogSnNvbkVycm9yIHtcbiAgICB2YXIgZXJyb3IgPSBudWxsO1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGVycm9yID0gdGhpcy5nZXRSZXF1aXJlZEVycm9yKHZhbHVlLCBjbGFzc05hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcGVydHkuYmFzZUNsYXNzTmFtZSkge1xuICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgIGVycm9yID0gbmV3IEpzb25NaXNzaW5nVHlwZUVycm9yKFxuICAgICAgICAgICAgcHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgIHByb3BlcnR5LmJhc2VDbGFzc05hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yID0gbmV3IEpzb25JbmNvcnJlY3RUeXBlRXJyb3IoXG4gICAgICAgICAgICBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHkuYmFzZUNsYXNzTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBwcml2YXRlIGdldFJlcXVpcmVkRXJyb3IodmFsdWU6IGFueSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBKc29uRXJyb3Ige1xuICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgaWYgKCFyZXF1aXJlZFByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXZhbHVlW3JlcXVpcmVkUHJvcGVydGllc1tpXV0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHJlcXVpcmVkUHJvcGVydGllc1tpXSwgY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBhZGROZXdFcnJvcihlcnJvcjogSnNvbkVycm9yLCBqc29uT2JqOiBhbnkpIHtcbiAgICBpZiAoanNvbk9iaiAmJiBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdKSB7XG4gICAgICBlcnJvci5hdCA9IGpzb25PYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0uc3RhcnQ7XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICB9XG4gIHByaXZhdGUgdmFsdWVUb0FycmF5KFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIG9iajogYW55LFxuICAgIGtleTogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHlcbiAgKSB7XG4gICAgaWYgKG9ialtrZXldICYmIHZhbHVlLmxlbmd0aCA+IDApIG9ialtrZXldLnNwbGljZSgwLCBvYmpba2V5XS5sZW5ndGgpO1xuICAgIGlmICghb2JqW2tleV0pIG9ialtrZXldID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdPYmoodmFsdWVbaV0sIHByb3BlcnR5KTtcbiAgICAgIGlmIChuZXdWYWx1ZS5uZXdPYmopIHtcbiAgICAgICAgaWYgKCEhdmFsdWVbaV0ubmFtZSkge1xuICAgICAgICAgIG5ld1ZhbHVlLm5ld09iai5uYW1lID0gdmFsdWVbaV0ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XG4gICAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xuICAgICAgICAgIG9ialtrZXldLnB1c2godmFsdWVbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmluZFByb3BlcnR5KFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAga2V5OiBhbnlcbiAgKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgaWYgKHByb3AubmFtZSA9PSBrZXkgfHwgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPT0ga2V5KSByZXR1cm4gcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IHZhciBTZXJpYWxpemVyID0gSnNvbk9iamVjdC5tZXRhRGF0YTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9qc29ub2JqZWN0LnRzIiwiZXhwb3J0IGludGVyZmFjZSBIYXNoVGFibGU8VD4ge1xuICBba2V5OiBzdHJpbmddOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgSGVscGVycyB7XG4gIC8qKlxuICAgKiBBIHN0YXRpYyBtZXRob2RzIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgdW5kZXJmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoISF2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAhdmFsdWUgJiYgdmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNBcnJheUNvbnRhaW5zRXF1YWwoeDogYW55LCB5OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeCkgfHwgIUFycmF5LmlzQXJyYXkoeSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaiA9IDA7XG4gICAgICBmb3IgKDsgaiA8IHkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4W2ldLCB5W2pdKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0geS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0FycmF5c0VxdWFsKFxuICAgIHg6IGFueSxcbiAgICB5OiBhbnksXG4gICAgaWdub3JlT3JkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeCkgfHwgIUFycmF5LmlzQXJyYXkoeSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlnbm9yZU9yZGVyKSB7XG4gICAgICB2YXIgeFNvcnRlZCA9IFtdO1xuICAgICAgdmFyIHlTb3J0ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U29ydGVkLnB1c2goeFtpXSk7XG4gICAgICAgIHlTb3J0ZWQucHVzaCh5W2ldKTtcbiAgICAgIH1cbiAgICAgIHhTb3J0ZWQuc29ydCgpO1xuICAgICAgeVNvcnRlZC5zb3J0KCk7XG4gICAgICB4ID0geFNvcnRlZDtcbiAgICAgIHkgPSB5U29ydGVkO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHhbaV0sIHlbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNUd29WYWx1ZUVxdWFscyhcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGlnbm9yZU9yZGVyOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHggPT09IHkpIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkgJiYgeC5sZW5ndGggPT09IDAgJiYgdHlwZW9mIHkgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSAmJiB5Lmxlbmd0aCA9PT0gMCAmJiB0eXBlb2YgeCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICgoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwpICYmICh5ID09PSBcInVuZGVmaW5lZFwiIHx8IHkgPT09IFwiXCIpKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCh5ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gbnVsbCkgJiYgKHggPT09IFwidW5kZWZpbmVkXCIgfHwgeCA9PT0gXCJcIikpXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSByZXR1cm4geCA9PSB5O1xuXG4gICAgaWYgKEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHgpICYmIEhlbHBlcnMuaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHkpKSB7XG4gICAgICBpZiAocGFyc2VJbnQoeCkgPT09IHBhcnNlSW50KHkpICYmIHBhcnNlRmxvYXQoeCkgPT09IHBhcnNlRmxvYXQoeSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh5KSkgfHxcbiAgICAgIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh4KSAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkoeSkpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICgoeCA9PT0gdHJ1ZSB8fCB4ID09PSBmYWxzZSkgJiYgdHlwZW9mIHkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHgudG9TdHJpbmcoKSA9PT0geS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoKHkgPT09IHRydWUgfHwgeSA9PT0gZmFsc2UpICYmIHR5cGVvZiB4ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB5LnRvU3RyaW5nKCkgPT09IHgudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgJiYgISh5IGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIHggPT0geTtcbiAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHhbXCJlcXVhbHNcIl0pIHJldHVybiB4LmVxdWFscyh5KTtcbiAgICBpZiAoISF4LnRvSlNPTiAmJiAhIXkudG9KU09OKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHgudG9KU09OKCksIHkudG9KU09OKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSAmJiBBcnJheS5pc0FycmF5KHkpKVxuICAgICAgcmV0dXJuIEhlbHBlcnMuaXNBcnJheXNFcXVhbCh4LCB5LCBpZ25vcmVPcmRlcik7XG5cbiAgICBmb3IgKHZhciBwIGluIHgpIHtcbiAgICAgIGlmICgheC5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWU7XG4gICAgICBpZiAoIXkuaGFzT3duUHJvcGVydHkocCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4W3BdID09PSB5W3BdKSBjb250aW51ZTtcbiAgICAgIGlmICh0eXBlb2YgeFtwXSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMoeFtwXSwgeVtwXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChwIGluIHkpIHtcbiAgICAgIGlmICh5Lmhhc093blByb3BlcnR5KHApICYmICF4Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByYW5kb21pemVBcnJheTxUPihhcnJheTogQXJyYXk8VD4pOiBBcnJheTxUPiB7XG4gICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICB2YXIgdGVtcCA9IGFycmF5W2ldO1xuICAgICAgYXJyYXlbaV0gPSBhcnJheVtqXTtcbiAgICAgIGFycmF5W2pdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIC8vZG8gbm90IHJldHVybiB0aGUgc2FtZSBvYmplY3QgaW5zdGFuY2UhISFcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUNvcHkob2JqOiBhbnkpIHtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIHJlcztcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICByZXNba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNDb252ZXJ0aWJsZVRvTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgIWlzTmFOKHZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgJiZcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgIHZhbHVlLmluZGV4T2YoXCIweFwiKSA9PSAwICYmXG4gICAgICB2YWx1ZS5sZW5ndGggPiAzMlxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRNYXhMZW5ndGgobWF4TGVuZ3RoOiBudW1iZXIsIHN1cnZleUxlbmd0aDogbnVtYmVyKTogYW55IHtcbiAgICBpZiAobWF4TGVuZ3RoIDwgMCkge1xuICAgICAgbWF4TGVuZ3RoID0gc3VydmV5TGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gbWF4TGVuZ3RoID4gMCA/IG1heExlbmd0aCA6IG51bGw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXROdW1iZXJCeUluZGV4KGluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXhTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHN0YXJ0SW5kZXggPSAxO1xuICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgIHZhciBwb3N0Zml4ID0gXCIuXCI7XG4gICAgdmFyIGlzTnVtZXJpYyA9IHRydWU7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgaWYgKCEhc3RhcnRJbmRleFN0cikge1xuICAgICAgc3RyID0gc3RhcnRJbmRleFN0cjtcbiAgICAgIHZhciBpbmQgPSBzdHIubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBoYXNEaWdpdCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKEhlbHBlcnMuaXNDaGFyRGlnaXQoc3RyW2ldKSkge1xuICAgICAgICAgIGhhc0RpZ2l0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoZWNrTGV0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChoYXNEaWdpdCAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaW5kXSkpIHx8XG4gICAgICAgICAgSGVscGVycy5pc0NoYXJOb3RMZXR0ZXJBbmREaWdpdChzdHJbaW5kXSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICB3aGlsZSAoaW5kID49IDAgJiYgY2hlY2tMZXR0ZXIoKSkgaW5kLS07XG4gICAgICB2YXIgbmV3UG9zdGZpeCA9IFwiXCI7XG4gICAgICBpZiAoaW5kIDwgc3RyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgbmV3UG9zdGZpeCA9IHN0ci5zdWJzdHIoaW5kICsgMSk7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgaW5kICsgMSk7XG4gICAgICB9XG4gICAgICBpZiAoISFzdHIpIHtcbiAgICAgICAgdmFyIGluZCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmQgPCBzdHIubGVuZ3RoICYmIGNoZWNrTGV0dGVyKCkpIGluZCsrO1xuICAgICAgICBpZiAoaW5kID4gMCkge1xuICAgICAgICAgIHByZWZpeCA9IHN0ci5zdWJzdHIoMCwgaW5kKTtcbiAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKGluZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghIW5ld1Bvc3RmaXggfHwgISFwcmVmaXgpIHtcbiAgICAgICAgcG9zdGZpeCA9IG5ld1Bvc3RmaXg7XG4gICAgICB9XG4gICAgICBpZiAoISFzdHIpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KHN0cikpIHN0YXJ0SW5kZXggPSBwYXJzZUludChzdHIpO1xuICAgICAgICBlbHNlIGlmIChzdHIubGVuZ3RoID09IDEpIGlzTnVtZXJpYyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNOdW1lcmljKSByZXR1cm4gcHJlZml4ICsgKGluZGV4ICsgc3RhcnRJbmRleCkudG9TdHJpbmcoKSArIHBvc3RmaXg7XG4gICAgcmV0dXJuIHByZWZpeCArIFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoMCkgKyBpbmRleCkgKyBwb3N0Zml4O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNDaGFyTm90TGV0dGVyQW5kRGlnaXQoY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjaC50b1VwcGVyQ2FzZSgpID09IGNoLnRvTG93ZXJDYXNlKCkgJiYgIUhlbHBlcnMuaXNDaGFyRGlnaXQoY2gpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNDaGFyRGlnaXQoY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIjtcbiAgfVxufVxuaWYgKCEoPGFueT5TdHJpbmcucHJvdG90eXBlKVtcImZvcm1hdFwiXSkge1xuICAoPGFueT5TdHJpbmcucHJvdG90eXBlKVtcImZvcm1hdFwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2g6IGFueSwgbnVtYmVyOiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICB9KTtcbiAgfTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9oZWxwZXJzLnRzIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuXG4vL1RPRE8gcmVwbGFjZSBjb21wbGV0ZWx5IHdpdGggRWxlbWVudEZhY3RvcnlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUXVlc3Rpb25GYWN0b3J5KCk7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDaG9pY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKSArIFwiMVwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKSArIFwiMlwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob2ljZXNfSXRlbVwiKSArIFwiM1wiXG4gICAgXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q29sdW1zKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgY29sTmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpICsgXCIgXCI7XG4gICAgcmV0dXJuIFtjb2xOYW1lICsgXCIxXCIsIGNvbE5hbWUgKyBcIjJcIiwgY29sTmFtZSArIFwiM1wiXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Um93cygpOiBzdHJpbmdbXSB7XG4gICAgdmFyIHJvd05hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKSArIFwiIFwiO1xuICAgIHJldHVybiBbcm93TmFtZSArIFwiMVwiLCByb3dOYW1lICsgXCIyXCJdO1xuICB9XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBRdWVzdGlvbj4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uXG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlckVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRWxlbWVudEZhY3RvcnkgPSBuZXcgRWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IElFbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIHJlbW92ZUZyb21TZXJpYWxpemVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgZGVsZXRlIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS51bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZSk7XG4gICAgaWYgKHJlbW92ZUZyb21TZXJpYWxpemVyKSB7XG4gICAgICBTZXJpYWxpemVyLnJlbW92ZUNsYXNzKGVsZW1lbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbClcbiAgICAgIHJldHVybiBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oZWxlbWVudFR5cGUsIG5hbWUpO1xuICAgIHJldHVybiBjcmVhdG9yKG5hbWUpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25mYWN0b3J5LnRzIiwiaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBRdWVzdGlvblZ1ZTxUIGV4dGVuZHMgUXVlc3Rpb24+IGV4dGVuZHMgVnVlIHtcbiAgcHVibGljIGlubmVyVmFsdWU6IGFueSA9IG51bGw7XG5cbiAgQFByb3AgcXVlc3Rpb246IFQ7XG4gIC8vIGNzcyBwcm9wIG5lZWQgb25seSBmb3IgcGFuZWwuIFdoZW4gcGFuZWwgd2lsbCBoYXZlIGNzc0NsYXNzZXMgcHJvcGVydHkgdGhpcyBwcm9wIHdpbGwgbmVlZCB0byByZW1vdmVcbiAgQFByb3AgY3NzOiBhbnk7XG5cbiAgQFdhdGNoKFwicXVlc3Rpb25cIilcbiAgY2hhbmdlUXVlc3Rpb24obmV3X3ZhbDogVCwgb2xkX3ZhbDogVCkge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IG51bGw7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudCh0aGlzLiRlbCk7XG4gICAgfVxuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uYmVmb3JlRGVzdG95UXVlc3Rpb25FbGVtZW50KHRoaXMuJGVsKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvblZ1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy92dWUvcXVlc3Rpb24udHMiLCJpbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24sXG4gIEpzb25PYmplY3QsXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlEYXRhIHtcbiAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xuICBzZXRWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBsb2NOb3RpZmljYXRpb246IGFueSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZD86IGJvb2xlYW5cbiAgKTogYW55O1xuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnk7XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IHZvaWQ7XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgbG9jTm90aWZpY2F0aW9uOiBhbnkpOiBhbnk7XG4gIGdldEFsbFZhbHVlcygpOiBhbnk7XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueTtcbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRleHRQcm9jZXNzb3Ige1xuICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcsIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbik6IHN0cmluZztcbiAgcHJvY2Vzc1RleHRFeChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW5cbiAgKTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5RXJyb3JPd25lciBleHRlbmRzIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXkgZXh0ZW5kcyBJVGV4dFByb2Nlc3NvciwgSVN1cnZleUVycm9yT3duZXIge1xuICBjdXJyZW50UGFnZTogSVBhZ2U7XG4gIHBhZ2VzOiBBcnJheTxJUGFnZT47XG4gIGdldENzcygpOiBhbnk7XG4gIGlzUGFnZVN0YXJ0ZWQocGFnZTogSVBhZ2UpOiBib29sZWFuO1xuICBwYWdlVmlzaWJpbGl0eUNoYW5nZWQocGFnZTogSVBhZ2UsIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBwYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHBhbmVsOiBJUGFuZWwsIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKTogYW55O1xuICBxdWVzdGlvbnNPcmRlcjogc3RyaW5nO1xuICBxdWVzdGlvbkNyZWF0ZWQocXVlc3Rpb246IElRdWVzdGlvbik6IGFueTtcbiAgcXVlc3Rpb25BZGRlZChcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFyZW50UGFuZWw6IGFueSxcbiAgICByb290UGFuZWw6IGFueVxuICApOiBhbnk7XG4gIHBhbmVsQWRkZWQoXG4gICAgcGFuZWw6IElFbGVtZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFyZW50UGFuZWw6IGFueSxcbiAgICByb290UGFuZWw6IGFueVxuICApOiBhbnk7XG4gIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYW55O1xuICBwYW5lbFJlbW92ZWQocGFuZWw6IElFbGVtZW50KTogYW55O1xuICBxdWVzdGlvblJlbmFtZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBvbGROYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWVOYW1lOiBzdHJpbmdcbiAgKTogYW55O1xuICB2YWxpZGF0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBTdXJ2ZXlFcnJvcjtcbiAgdmFsaWRhdGVQYW5lbChwYW5lbDogSVBhbmVsKTogU3VydmV5RXJyb3I7XG4gIGhhc1Zpc2libGVRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgcXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFN1cnZleU1hcmtkb3duSHRtbChlbGVtZW50OiBCYXNlLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmc7XG4gIGlzRGlzcGxheU1vZGU6IGJvb2xlYW47XG4gIGlzRGVzaWduTW9kZTogYm9vbGVhbjtcbiAgYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nOiBib29sZWFuO1xuICBhcmVFbXB0eUVsZW1lbnRzSGlkZGVuOiBib29sZWFuO1xuICBpc0xvYWRpbmdGcm9tSnNvbjogYm9vbGVhbjtcbiAgaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZzogYm9vbGVhbjtcblxuICBzdGF0ZTogc3RyaW5nO1xuICBjYW5jZWxQcmV2aWV3QnlQYWdlKHBhbmVsOiBJUGFuZWwpOiBhbnk7XG5cbiAgcmVxdWlyZWRUZXh0OiBzdHJpbmc7XG4gIGJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+XG4gICk6IHZvaWQ7XG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuOiBzdHJpbmc7XG4gIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgcXVlc3Rpb25TdGFydEluZGV4OiBzdHJpbmc7XG4gIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogc3RyaW5nO1xuICBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb246IHN0cmluZztcbiAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBzdHJpbmc7XG4gIHN0b3JlT3RoZXJzQXNDb21tZW50OiBib29sZWFuO1xuXG4gIG1heFRleHRMZW5ndGg6IG51bWJlcjtcbiAgbWF4T3RoZXJzTGVuZ3RoOiBudW1iZXI7XG4gIGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtczogYm9vbGVhbjtcblxuICB1cGxvYWRGaWxlcyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmaWxlczogRmlsZVtdLFxuICAgIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICk6IGFueTtcbiAgZG93bmxvYWRGaWxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKTogYW55O1xuICBjbGVhckZpbGVzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgY2xlYXJDYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApOiBhbnk7XG4gIHVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgY2hvaWNlczogQXJyYXk8YW55PixcbiAgICBzZXJ2ZXJSZXN1bHQ6IGFueVxuICApOiBBcnJheTxhbnk+O1xuICB1cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocXVlc3Rpb246IElRdWVzdGlvbiwgY3NzQ2xhc3NlczogYW55KTogYW55O1xuICB1cGRhdGVQYW5lbENzc0NsYXNzZXMocGFuZWw6IElQYW5lbCwgY3NzQ2xhc3NlczogYW55KTogYW55O1xuICB1cGRhdGVQYWdlQ3NzQ2xhc3NlcyhwYW5lbDogSVBhbmVsLCBjc3NDbGFzc2VzOiBhbnkpOiBhbnk7XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGFueSk6IGFueTtcbiAgYWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0KHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50OiBhbnkpOiBhbnk7XG4gIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudDogYW55KTogYW55O1xuICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQ6IGFueSk6IGFueTtcblxuICBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KFxuICAgIHZhbHVlTmFtZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IElRdWVzdGlvbjtcbiAgbWF0cml4Um93QWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93OiBhbnkpOiBhbnk7XG4gIG1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnM6IHtcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uO1xuICAgIGNhbkFkZFJvdzogYm9vbGVhbjtcbiAgfSk6IGFueTtcbiAgbWF0cml4Um93UmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCByb3dJbmRleDogbnVtYmVyLCByb3c6IGFueSk6IGFueTtcbiAgbWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHJvdzogYW55XG4gICk6IGJvb2xlYW47XG4gIG1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgbWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgbWF0cml4Q2VsbFZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpOiBhbnk7XG4gIG1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcbiAgbWF0cml4Q2VsbFZhbGlkYXRlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IFN1cnZleUVycm9yO1xuICBkeW5hbWljUGFuZWxBZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYW55O1xuICBkeW5hbWljUGFuZWxSZW1vdmVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFuZWxJbmRleDogbnVtYmVyLFxuICAgIHBhbmVsOiBJUGFuZWxcbiAgKTogYW55O1xuICBkeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IGFueTtcblxuICBkcmFnQW5kRHJvcEFsbG93KG9wdGlvbnM6IGFueSk6IGJvb2xlYW47XG5cbiAgc2Nyb2xsRWxlbWVudFRvVG9wKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFnZTogSVBhZ2UsXG4gICAgaWQ6IHN0cmluZ1xuICApOiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlJbXBsIHtcbiAgZ2VTdXJ2ZXlEYXRhKCk6IElTdXJ2ZXlEYXRhO1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3Nvcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmRpdGlvblJ1bm5lciB7XG4gIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pik6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUVsZW1lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgaXNSZWFkT25seTogYm9vbGVhbjtcbiAgaXNQYWdlOiBib29sZWFuO1xuICBpc1BhbmVsOiBib29sZWFuO1xuICBjb250YWluc0Vycm9yczogYm9vbGVhbjtcbiAgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpOiBhbnk7XG4gIG9uU3VydmV5TG9hZCgpOiBhbnk7XG4gIG9uRmlyc3RSZW5kZXJpbmcoKTogYW55O1xuICBnZXRUeXBlKCk6IHN0cmluZztcbiAgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpOiBudW1iZXI7XG4gIGxvY1N0cnNDaGFuZ2VkKCk6IGFueTtcbiAgZGVsZXRlKCk6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUVsZW1lbnQgZXh0ZW5kcyBJQ29uZGl0aW9uUnVubmVyLCBJU3VydmV5RWxlbWVudCB7XG4gIHZpc2libGU6IGJvb2xlYW47XG4gIHBhcmVudDogSVBhbmVsO1xuICByZW5kZXJXaWR0aDogc3RyaW5nO1xuICB3aWR0aDogc3RyaW5nO1xuICBtaW5XaWR0aD86IHN0cmluZztcbiAgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIHJpZ2h0SW5kZW50OiBudW1iZXI7XG4gIHN0YXJ0V2l0aE5ld0xpbmU6IGJvb2xlYW47XG4gIGdldFBhbmVsKCk6IElQYW5lbDtcbiAgZ2V0TGF5b3V0VHlwZSgpOiBzdHJpbmc7XG4gIGlzTGF5b3V0VHlwZVN1cHBvcnRlZChsYXlvdXRUeXBlOiBzdHJpbmcpOiBib29sZWFuO1xuICByZW1vdmVFbGVtZW50KGVsOiBJRWxlbWVudCk6IGJvb2xlYW47XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgdXBkYXRlQ3VzdG9tV2lkZ2V0cygpOiBhbnk7XG4gIGNsZWFySW5jb3JyZWN0VmFsdWVzKCk6IGFueTtcbiAgY2xlYXJFcnJvcnMoKTogYW55O1xuICBkaXNwb3NlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uIGV4dGVuZHMgSUVsZW1lbnQsIElTdXJ2ZXlFcnJvck93bmVyIHtcbiAgaGFzVGl0bGU6IGJvb2xlYW47XG4gIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSk6IGFueTtcbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpOiBhbnk7XG4gIHVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpOiBhbnk7XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW47XG4gIGNsZWFyVW51c2VkVmFsdWVzKCk6IGFueTtcbiAgZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnk7XG4gIGdldFZhbHVlTmFtZSgpOiBzdHJpbmc7XG4gIGNsZWFyVmFsdWUoKTogYW55O1xuICBjbGVhclZhbHVlSWZJbnZpc2libGUoKTogYW55O1xuICBpc0Fuc3dlckNvcnJlY3QoKTogYm9vbGVhbjtcbiAgdXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTogYW55O1xuICBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb247XG4gIHZhbHVlOiBhbnk7XG4gIHN1cnZleTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBJUGFyZW50RWxlbWVudCB7XG4gIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpOiBhbnk7XG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuO1xuICBpc1JlYWRPbmx5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQYW5lbCBleHRlbmRzIElTdXJ2ZXlFbGVtZW50LCBJUGFyZW50RWxlbWVudCB7XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmc7XG4gIGdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmc7XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmc7XG4gIHBhcmVudDogSVBhbmVsO1xuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCk6IGFueTtcbiAgaW5kZXhPZihlbDogSUVsZW1lbnQpOiBudW1iZXI7XG4gIGVsZW1lbnRzOiBBcnJheTxJRWxlbWVudD47XG59XG5leHBvcnQgaW50ZXJmYWNlIElQYWdlIGV4dGVuZHMgSVBhbmVsLCBJQ29uZGl0aW9uUnVubmVyIHtcbiAgaXNTdGFydGVkOiBib29sZWFuO1xufVxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgU3VydmV5SlMgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2Uge1xuICBwdWJsaWMgc3RhdGljIGdldCBjb21tZW50UHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgY29tbWVudFByZWZpeCh2YWw6IHN0cmluZykge1xuICAgIHNldHRpbmdzLmNvbW1lbnRQcmVmaXggPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVJdGVtVmFsdWU6IChpdGVtOiBhbnksIHR5cGU/OiBzdHJpbmcpID0+IGFueTtcbiAgcHVibGljIHN0YXRpYyBpdGVtVmFsdWVMb2NTdHJDaGFuZ2VkOiAoYXJyOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xuICAvKipcbiAgICogQSBzdGF0aWMgbWV0aG9kcyB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIHVuZGVyZmluZWQsIG51bGwsIGVtcHR5IHN0cmluZyBvciBlbXB0eSBhcnJheS5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBJc1Byb3BlcnR5RW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gXCJcIiAmJiB0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHByb3BlcnR5SGFzaDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgbG9jYWxpemFibGVTdHJpbmdzOiB7IFtpbmRleDogc3RyaW5nXTogTG9jYWxpemFibGVTdHJpbmcgfTtcbiAgcHJpdmF0ZSBhcnJheXNJbmZvOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH07XG4gIHByaXZhdGUgb25Qcm9wQ2hhbmdlRnVuY3Rpb25zOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZ1bmM6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbiAgICBrZXk6IHN0cmluZztcbiAgfT47XG4gIHByb3RlY3RlZCBpc0xvYWRpbmdGcm9tSnNvblZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2FkaW5nT3duZXI6IEJhc2UgPSBudWxsO1xuICAvKipcbiAgICogRXZlbnQgdGhhdCByYWlzZSBvbiBwcm9wZXJ0eSBjaGFuZ2Ugb2YgdGhlIHNlbmRlciBvYmplY3RcbiAgICogc2VuZGVyIC0gdGhlIG9iamVjdCB0aGF0IG93bnMgdGhlIHByb3BlcnR5XG4gICAqIG9wdGlvbnMubmFtZSAtIHRoZSBwcm9wZXJ0eSBuYW1lIHRoYXQgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm9sZFZhbHVlIC0gb2xkIHZhbHVlLiBQbGVhc2Ugbm90ZSwgaXQgZXF1YWxzIHRvIG9wdGlvbnMubmV3VmFsdWUgaWYgcHJvcGVydHkgaXMgYW4gYXJyYXlcbiAgICogb3B0aW9ucy5uZXdWYWx1ZSAtIG5ldyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogQmFzZSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogQmFzZSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgcmFpc2VkIG9uIGNoYW5naW5nIHByb3BlcnR5IG9mIHRoZSBJdGVtVmFsdWUgb2JqZWN0LlxuICAgKiBzZW5kZXIgLSB0aGUgb2JqZWN0IHRoYXQgb3ducyB0aGUgcHJvcGVydHlcbiAgICogb3B0aW9ucy5wcm9wZXJ0eU5hbWUgLSB0aGUgcHJvcGVydHkgbmFtZSB0byB3aGljaCBJdGVtVmFsdWUgYXJyYXkgaXMgYmVsb25nLiBJdCBjYW4gYmUgXCJjaG9pY2VzXCIgZm9yIGRyb3Bkb3duIHF1ZXN0aW9uXG4gICAqIG9wdGlvbnMub2JqIC0gdGhlIGluc3RhbmNlIG9mIEl0ZW1WYWx1ZSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm5hbWUgLSB0aGUgcHJvcGVydHkgb2YgSXRlbU9iamVjdCB0aGF0IGhhcyBiZWVuIGNoYW5nZWRcbiAgICogb3B0aW9ucy5vbGRWYWx1ZSAtIG9sZCB2YWx1ZVxuICAgKiBvcHRpb25zLm5ld1ZhbHVlIC0gbmV3IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgb25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG5cbiAgZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBhbnk7XG5cbiAgc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyOiAoXG4gICAgcHJvcGVydGllc0hhc2g6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsOiBhbnlcbiAgKSA9PiB2b2lkO1xuICBjcmVhdGVBcnJheUNvcmVIYW5kbGVyOiAocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSA9PiBBcnJheTxhbnk+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIHRoaXMub25CYXNlQ3JlYXRpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CYXNlQ3JlYXRpbmcoKSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uIEl0IHNob3VsZCBiZSBpbiBsb3djYXNlLlxuICAgKi9cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiYXNlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgdGVtcGxhdGUgbmFtZSB3aXRob3V0IHByZWZpeC4gVHlwaWNhbGx5IGl0IGVxdWFscyB0byBnZXRUeXBlKCkuXG4gICAqIEBzZWUgZ2V0VHlwZVxuICAgKi9cbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBsb2FkaW5nIGZyb20gSnNvbiBhdCB0aGUgY3VycmVudCBtb21lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldElzTG9hZGluZ0Zyb21Kc29uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMubG9hZGluZ093bmVyICYmIHRoaXMubG9hZGluZ093bmVyLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlO1xuICB9XG5cbiAgc3RhcnRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gdHJ1ZTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvblZhbHVlID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplZCB0aGUgY3VycmVudCBvYmplY3QgaW50byBKU09OXG4gICAqIEBzZWUgZnJvbUpTT05cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICByZXR1cm4gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWQgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGVsZW1lbnRzLiBJdCBkb2Vzbid0IHJlc2V0IHByb3BlcnRpZXMgdGhhdCB3YXMgY2hhbmdlZCBiZWZvcmUgYW5kIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBqc29uIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIGpzb24gdGhlIG9iamVjdCBKU09OIGRlZmluaXRpb25cbiAgICogQHNlZSB0b0pTT05cbiAgICovXG4gIHB1YmxpYyBmcm9tSlNPTihqc29uOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIGNsb25lIG9mIHRoZSBleGlzdGluZyBvYmplY3QuIENyZWF0ZSBhIG5ldyBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgbG9hZCBhbGwgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgKi9cbiAgcHVibGljIGNsb25lKCk6IEJhc2Uge1xuICAgIHZhciBjbG9uZWRPYmogPSA8QmFzZT5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHRoaXMuZ2V0VHlwZSgpKTtcbiAgICBjbG9uZWRPYmouZnJvbUpTT04odGhpcy50b0pTT04oKSk7XG4gICAgcmV0dXJuIGNsb25lZE9iajtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5hcnJheXNJbmZvW2tleV07XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0uaXNJdGVtVmFsdWVzKSB7XG4gICAgICAgICAgdmFyIGFyciA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgIGlmIChhcnIgJiYgISFCYXNlLml0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQpXG4gICAgICAgICAgICBCYXNlLml0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQoYXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhrZXkpO1xuICAgICAgICBpZiAoaXRlbSkgaXRlbS5zdHJDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZSBieSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIHByb3BlcnR5IG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSk7XG4gICAgaWYgKHRoaXMuSXNQcm9wZXJ0eUVtcHR5KHJlcykpIHtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIHZhciBwcm9wID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkodGhpcy5nZXRUeXBlKCksIG5hbWUpO1xuICAgICAgdmFyIHNlclZhbHVlID0gISFwcm9wICYmICFwcm9wLmlzQ3VzdG9tID8gcHJvcC5kZWZhdWx0VmFsdWUgOiBudWxsO1xuICAgICAgaWYgKCF0aGlzLklzUHJvcGVydHlFbXB0eShzZXJWYWx1ZSkpIHJldHVybiBzZXJWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvcGVydHlWYWx1ZUNvcmUocHJvcGVydGllc0hhc2g6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKHByb3BlcnRpZXNIYXNoLCBuYW1lKTtcbiAgICBlbHNlIHJldHVybiBwcm9wZXJ0aWVzSGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2VWYWx1ZUZyb21IYXNoKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlIYXNoW1widmFsdWVcIl07XG4gIH1cbiAgcHJvdGVjdGVkIHNldFByb3BlcnR5VmFsdWVDb3JlKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIpXG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICBlbHNlIHByb3BlcnRpZXNIYXNoW25hbWVdID0gdmFsO1xuICB9XG4gIHB1YmxpYyBpdGVyYXRlUHJvcGVydGllc0hhc2goZnVuYzogKGhhc2g6IGFueSwga2V5OiBhbnkpID0+IHZvaWQpIHtcbiAgICB2YXIga2V5czogYW55W10gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0eUhhc2gpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4gZnVuYyh0aGlzLnByb3BlcnR5SGFzaCwga2V5KSk7XG4gIH1cbiAgLyoqXG4gICAqIHNldCBwcm9wZXJ0eSB2YWx1ZVxuICAgKiBAcGFyYW0gbmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB2YWwgbmV3IHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc2V0UHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xuICAgIGlmIChvbGRWYWx1ZSAmJiBBcnJheS5pc0FycmF5KG9sZFZhbHVlKSkge1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgdmFsKSkgcmV0dXJuO1xuICAgICAgdmFyIGFycmF5SW5mbyA9IHRoaXMuYXJyYXlzSW5mb1tuYW1lXTtcbiAgICAgIHRoaXMuc2V0QXJyYXkoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9sZFZhbHVlLFxuICAgICAgICB2YWwsXG4gICAgICAgIGFycmF5SW5mbyA/IGFycmF5SW5mby5pc0l0ZW1WYWx1ZXMgOiBmYWxzZSxcbiAgICAgICAgYXJyYXlJbmZvID8gYXJyYXlJbmZvLm9uUHVzaCA6IG51bGxcbiAgICAgICk7XG4gICAgICAvL3RoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgdmFsKTtcbiAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBzZW5kZXI6IEJhc2UsXG4gICAgYXJyYXlDaGFuZ2VzOiBBcnJheUNoYW5nZXNcbiAgKSB7fVxuICBwdWJsaWMgaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBvYmo6IGl0ZW0sXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgcHJvcGVydHlOYW1lOiBpdGVtLm93bmVyUHJvcGVydHlOYW1lLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBvblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7fVxuICBwcm90ZWN0ZWQgcHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBhcnJheUNoYW5nZXM/OiBBcnJheUNoYW5nZXMsXG4gICAgdGFyZ2V0PzogQmFzZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2sgJiZcbiAgICAgIHRoaXMuZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgICBuYW1lLFxuICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIGFycmF5Q2hhbmdlcyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcblxuICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV0ubmFtZSA9PSBuYW1lKVxuICAgICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9uc1tpXS5mdW5jKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRvUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIGFycmF5Q2hhbmdlcz86IEFycmF5Q2hhbmdlcyxcbiAgICB0YXJnZXQ/OiBCYXNlXG4gICkge1xuICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB0aGlzO1xuICAgIGxldCBwYXJlbnRCYXNlID0gdGhpcy5nZXRPd25lckZvclByb3BlcnR5Q2hhbmdlZCgpO1xuICAgIGlmICghIXBhcmVudEJhc2UpIHtcbiAgICAgIHBhcmVudEJhc2UuZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgICAgICBuYW1lLFxuICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIGFycmF5Q2hhbmdlcyxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGFycmF5Q2hhbmdlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRPd25lckZvclByb3BlcnR5Q2hhbmdlZCgpOiBCYXNlIHtcbiAgICB2YXIgdGVzdFByb3BzID0gW1wiY29sT3duZXJcIiwgXCJsb2NPd25lclwiLCBcInN1cnZleVwiLCBcIm93bmVyXCIsIFwiZXJyb3JPd25lclwiXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSB0ZXN0UHJvcHNbaV07XG4gICAgICB2YXIgdGVzdE9iaiA9ICg8YW55PnRoaXMpW3Byb3BdO1xuICAgICAgaWYgKCEhdGVzdE9iaiAmJiAhIXRlc3RPYmouZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKSByZXR1cm4gdGVzdE9iajtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGEgcHJvcGVydHkgdmFsdWUgY2hhbmdlZC5cbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZnVuYzogYW55LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zKSB7XG4gICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucyA9IFtdO1xuICAgIH1cbiAgICBpZiAoa2V5KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICAgIGlmIChpdGVtLm5hbWUgPT0gbmFtZSAmJiBpdGVtLmtleSA9PSBrZXkpIHtcbiAgICAgICAgICBpdGVtLmZ1bmMgPSBmdW5jO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5wdXNoKHsgbmFtZTogbmFtZSwgZnVuYzogZnVuYywga2V5OiBrZXkgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQgZnJvbSB0aGUgbmFtZXMgbGlzdC5cbiAgICogQHBhcmFtIG5hbWVzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgbmFtZXNcbiAgICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHByb3BlcnR5IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBrZXkgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVnaXN0ZXJlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIGtleSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lc1tpXSwgZnVuYywga2V5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgbm90aWZpY2F0aW9uIG9uIHByb3BlcnR5IHZhbHVlIGNoYW5nZWRcbiAgICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHBhcmFtIGtleSB0aGUga2V5IHdpdGggd2hpY2ggeW91IGhhdmUgcmVnaXN0ZXJlZCB0aGUgbm90aWZpY2F0aW9uIGZvciB0aGlzIHByb3BlcnR5LiBJdCBjYW4gYmUgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB1blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnNbaV07XG4gICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUgJiYgaXRlbS5rZXkgPT0ga2V5KSB7XG4gICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVW5yZWdpc3RlciBub3RpZmljYXRpb24gb24gcHJvcGVydHkgdmFsdWUgY2hhbmdlZCBmb3IgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG5hbWVzIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG5hbWVzXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB3aXRoIHdoaWNoIHlvdSBoYXZlIHJlZ2lzdGVyZWQgdGhlIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eS4gSXQgY2FuIGJlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgIG5hbWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIGtleTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZXNbaV0sIGtleSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVDdXN0b21Mb2NhbGl6YWJsZU9iaihuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAobG9jU3RyIHx8ICEoPGFueT50aGlzKS5nZXRMb2NhbGUpIHJldHVybjtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKG5hbWUsIDxJTG9jYWxpemFibGVPd25lcj4oPGFueT50aGlzKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvd25lcjogSUxvY2FsaXphYmxlT3duZXIsXG4gICAgdXNlTWFya0Rvd246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgdmFyIGxvY1N0ciA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhvd25lciwgdXNlTWFya0Rvd24pO1xuICAgIGlmICghdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIHRoaXMubG9jYWxpemFibGVTdHJpbmdzID0ge307XG4gICAgfVxuICAgIHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdID0gbG9jU3RyO1xuICAgIHJldHVybiBsb2NTdHI7XG4gIH1cbiAgcHVibGljIGdldExvY2FsaXphYmxlU3RyaW5nKG5hbWU6IHN0cmluZyk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncyA/IHRoaXMubG9jYWxpemFibGVTdHJpbmdzW25hbWVdIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZWZhdWx0U3RyOiBzdHJpbmcgPSBcIlwiXG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKCFsb2NTdHIpIHJldHVybiBcIlwiO1xuICAgIHZhciByZXMgPSBsb2NTdHIudGV4dDtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogZGVmYXVsdFN0cjtcbiAgfVxuICBwdWJsaWMgc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHZhciBsb2NTdHIgPSB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKG5hbWUpO1xuICAgIGlmICghbG9jU3RyKSByZXR1cm47XG4gICAgdmFyIG9sZFZhbHVlID0gbG9jU3RyLnRleHQ7XG4gICAgaWYgKG9sZFZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGxvY1N0ci50ZXh0ID0gdmFsdWU7XG4gICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhpdGVtLCBsb2NhbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmFkZFVzZWRMb2NhbGVzKSB7XG4gICAgICAgICAgICBpdGVtLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIGxvY2FsZXM6IEFycmF5PHN0cmluZz5cbiAgKSB7XG4gICAgdmFyIGxvY3MgPSBsb2NTdHIuZ2V0TG9jYWxlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxvY2FsZXMuaW5kZXhPZihsb2NzW2ldKSA8IDApIHtcbiAgICAgICAgbG9jYWxlcy5wdXNoKGxvY3NbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlSXRlbVZhbHVlcyhuYW1lOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3JlYXRlTmV3QXJyYXkobmFtZSwgZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgaXRlbS5sb2NPd25lciA9IHNlbGY7XG4gICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gbmFtZTtcbiAgICB9KTtcbiAgICB0aGlzLmFycmF5c0luZm9bbmFtZV0uaXNJdGVtVmFsdWVzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgbm90aWZ5QXJyYXlDaGFuZ2VkKGFyOiBhbnkpIHtcbiAgICAhIWFyLm9uQXJyYXlDaGFuZ2VkICYmIGFyLm9uQXJyYXlDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld0FycmF5Q29yZShuYW1lOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLmNyZWF0ZUFycmF5Q29yZUhhbmRsZXIpIHtcbiAgICAgIHJlcyA9IHRoaXMuY3JlYXRlQXJyYXlDb3JlSGFuZGxlcih0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSk7XG4gICAgfVxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3QXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uUHVzaDogYW55ID0gbnVsbCxcbiAgICBvblJlbW92ZTogYW55ID0gbnVsbFxuICApOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgbmV3QXJyYXkgPSB0aGlzLmNyZWF0ZU5ld0FycmF5Q29yZShuYW1lKTtcbiAgICBpZiAoIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgdGhpcy5hcnJheXNJbmZvID0ge307XG4gICAgfVxuICAgIHRoaXMuYXJyYXlzSW5mb1tuYW1lXSA9IHsgb25QdXNoOiBvblB1c2gsIGlzSXRlbVZhbHVlczogZmFsc2UgfTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgbmV3QXJyYXkucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5wdXNoLmNhbGwobmV3QXJyYXksIHZhbHVlKTtcbiAgICAgIGlmIChvblB1c2gpIG9uUHVzaCh2YWx1ZSwgbmV3QXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgICBuZXdBcnJheS5sZW5ndGggLSAxLFxuICAgICAgICAwLFxuICAgICAgICBbdmFsdWVdLFxuICAgICAgICBbXVxuICAgICAgKTtcbiAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnVuc2hpZnQgPSBmdW5jdGlvbiAodmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkudW5zaGlmdC5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBpZiAob25QdXNoKSBvblB1c2godmFsdWUsIG5ld0FycmF5Lmxlbmd0aCAtIDEpO1xuICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcygwLCAwLCBbdmFsdWVdLCBbXSk7XG4gICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS5wb3AgPSBmdW5jdGlvbiAoKTogbnVtYmVyIHtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnBvcC5jYWxsKG5ld0FycmF5KTtcbiAgICAgIGlmIChvblJlbW92ZSkgb25SZW1vdmUocmVzdWx0KTtcbiAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMobmV3QXJyYXkubGVuZ3RoIC0gMSwgMSwgW10sIFtdKTtcbiAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnNwbGljZSA9IGZ1bmN0aW9uIChcbiAgICAgIHN0YXJ0PzogbnVtYmVyLFxuICAgICAgZGVsZXRlQ291bnQ/OiBudW1iZXIsXG4gICAgICAuLi5pdGVtczogYW55W11cbiAgICApOiBhbnlbXSB7XG4gICAgICBpZiAoIXN0YXJ0KSBzdGFydCA9IDA7XG4gICAgICBpZiAoIWRlbGV0ZUNvdW50KSBkZWxldGVDb3VudCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5zcGxpY2UuY2FsbChcbiAgICAgICAgbmV3QXJyYXksXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgaWYgKG9uUmVtb3ZlICYmIHJlc3VsdCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG9uUmVtb3ZlKHJlc3VsdFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvblB1c2gpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG9uUHVzaChpdGVtc1tpXSwgc3RhcnQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKHN0YXJ0LCBkZWxldGVDb3VudCwgaXRlbXMsIHJlc3VsdCk7XG4gICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNldEFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzcmM6IGFueVtdLFxuICAgIGRlc3Q6IGFueVtdLFxuICAgIGlzSXRlbVZhbHVlczogYm9vbGVhbixcbiAgICBvblB1c2g6IGFueVxuICApIHtcbiAgICB2YXIgZGVsZXRlZEl0ZW1zID0gW10uY29uY2F0KHNyYyk7XG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykuc3BsaWNlLmNhbGwoc3JjLCAwLCBzcmMubGVuZ3RoKTtcbiAgICBpZiAoISFkZXN0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBkZXN0W2ldO1xuICAgICAgICBpZiAoaXNJdGVtVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKCEhQmFzZS5jcmVhdGVJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBCYXNlLmNyZWF0ZUl0ZW1WYWx1ZShpdGVtLCB0aGlzLmdldEl0ZW1WYWx1ZVR5cGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihzcmMpLnB1c2guY2FsbChzcmMsIGl0ZW0pO1xuICAgICAgICBpZiAob25QdXNoKSBvblB1c2goc3JjW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhcbiAgICAgIDAsXG4gICAgICBkZWxldGVkSXRlbXMubGVuZ3RoLFxuICAgICAgc3JjLFxuICAgICAgZGVsZXRlZEl0ZW1zXG4gICAgKTtcbiAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIGRlbGV0ZWRJdGVtcywgc3JjLCBhcnJheUNoYW5nZXMpO1xuICAgIHRoaXMubm90aWZ5QXJyYXlDaGFuZ2VkKHNyYyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVHdvVmFsdWVFcXVhbHMoXG4gICAgeDogYW55LFxuICAgIHk6IGFueSxcbiAgICBjYXNlSW5TZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY2FzZUluU2Vuc2l0aXZlKSB7XG4gICAgICB4ID0gdGhpcy5nZXRWYWx1ZUluTG93Q2FzZSh4KTtcbiAgICAgIHkgPSB0aGlzLmdldFZhbHVlSW5Mb3dDYXNlKHkpO1xuICAgIH1cbiAgICByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHgsIHkpO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGNvcHlPYmplY3QoZHN0OiBhbnksIHNyYzogYW55KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgdmFyIHNvdXJjZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc291cmNlID0ge307XG4gICAgICAgIHRoaXMuY29weU9iamVjdChzb3VyY2UsIHNyY1trZXldKTtcbiAgICAgIH1cbiAgICAgIGRzdFtrZXldID0gc291cmNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY29weUNzc0NsYXNzZXMoZGVzdDogYW55LCBzb3VyY2U6IGFueSkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIgfHwgc291cmNlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBkZXN0W1wicm9vdFwiXSA9IHNvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgU3VydmV5RWxlbWVudC5jb3B5T2JqZWN0KGRlc3QsIHNvdXJjZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVJbkxvd0Nhc2UodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXZhbCAmJiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHJldHVybiB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheUNoYW5nZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICBwdWJsaWMgZGVsZXRlQ291bnQ6IG51bWJlcixcbiAgICBwdWJsaWMgaXRlbXNUb0FkZDogYW55W10sXG4gICAgcHVibGljIGRlbGV0ZWRJdGVtczogYW55W11cbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5RXJyb3Ige1xuICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHt9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpIHtcbiAgICBpZiAoIXRoaXMubG9jVGV4dFZhbHVlKSB7XG4gICAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLmVycm9yT3duZXIsIHRydWUpO1xuICAgICAgdGhpcy5sb2NUZXh0VmFsdWUudGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy50ZXh0O1xuICAgIGlmICghcmVzKSByZXMgPSB0aGlzLmdldERlZmF1bHRUZXh0KCk7XG4gICAgaWYgKCEhdGhpcy5lcnJvck93bmVyKSB7XG4gICAgICByZXMgPSB0aGlzLmVycm9yT3duZXIuZ2V0RXJyb3JDdXN0b21UZXh0KHJlcywgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJhc2VcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJU3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgc3VydmV5SW1wbFZhbHVlOiBJU3VydmV5SW1wbDtcbiAgcHJpdmF0ZSBzdXJ2ZXlEYXRhVmFsdWU6IElTdXJ2ZXlEYXRhO1xuICBwcml2YXRlIHN1cnZleVZhbHVlOiBJU3VydmV5O1xuICBwcml2YXRlIHRleHRQcm9jZXNzb3JWYWx1ZTogSVRleHRQcm9jZXNzb3I7XG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZTogU3VydmV5RWxlbWVudCA9IHRoaXM7XG4gIHB1YmxpYyByZWFkT25seUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwdWJsaWMgc3RhdGljIFNjcm9sbEVsZW1lbnRUb1RvcChlbGVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudElkKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBlbGVtVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGlmIChlbGVtVG9wIDwgMCkgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICByZXR1cm4gZWxlbVRvcCA8IDA7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBHZXRGaXJzdE5vblRleHRFbGVtZW50KFxuICAgIGVsZW1lbnRzOiBhbnksXG4gICAgcmVtb3ZlU3BhY2VzOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoIHx8IGVsZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICBpZiAocmVtb3ZlU3BhY2VzKSB7XG4gICAgICB2YXIgdEVsID0gZWxlbWVudHNbMF07XG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09PSBcIiN0ZXh0XCIpIHRFbC5kYXRhID0gXCJcIjtcbiAgICAgIHRFbCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKHRFbC5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiN0ZXh0XCIgJiYgZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjY29tbWVudFwiKVxuICAgICAgICByZXR1cm4gZWxlbWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgRm9jdXNFbGVtZW50KGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50SWQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuZm9jdXMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBDcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkaXNhYmxlRGVzaWduQWN0aW9uczogYm9vbGVhbiA9XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImVycm9yc1wiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVhZE9ubHlcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHRoaXMuc3VydmV5SW1wbFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLnN1cnZleUltcGxWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5RGF0YVZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2VTdXJ2ZXlEYXRhKCk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFN1cnZleSgpO1xuICAgIHRoaXMudGV4dFByb2Nlc3NvclZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0VGV4dFByb2Nlc3NvcigpO1xuICAgIHRoaXMub25TZXREYXRhKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXlJbXBsKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleUltcGxWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzLnN1cnZleURhdGFWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3VydmV5IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIGlmICghIXRoaXMuc3VydmV5VmFsdWUpIHJldHVybiB0aGlzLnN1cnZleVZhbHVlO1xuICAgIGlmICghIXRoaXMuc3VydmV5SW1wbFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cnZleVZhbHVlID0gdGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZTtcbiAgfVxuICBwdWJsaWMgaXNDb250ZW50RWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZ2V0IGFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nICYmXG4gICAgICAhdGhpcy5pc0NvbnRlbnRFbGVtZW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBtYWtlIGFuIGVsZW1lbnQgcXVlc3Rpb24vcGFuZWwvcGFnZSByZWFkb25seS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGVuYWJsZUlmXG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVhZE9ubHlcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgdGhpcy5pc1JlYWRPbmx5KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MoKSB7fVxuICBwcm90ZWN0ZWQgZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzTG9hZGluZ0Zyb21Kc29uKCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzTG9hZGluZ0Zyb21Kc29uIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgYSBzdXJ2ZXkgZWxlbWVudCAtIHF1ZXN0aW9uIG9yIHBhbmVsLlxuICAgKiBAc2VlIHZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5uYW1lO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgISFvbGRWYWx1ZSkge1xuICAgICAgdGhpcy5vbk5hbWVDaGFuZ2VkKG9sZFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZykge31cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVycm9ycy4gSXQgaXMgY3JlYXRlZCBieSBjYWxsaWcgaGFzRXJyb3JzIGZ1bmN0aW9uc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGdldCBlcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXJyb3JzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXJyb3JzKHZhbDogQXJyYXk8U3VydmV5RXJyb3I+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXJyb3JzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIHF1ZXN0aW9uIG9yIGEgY29udGFpbmVyIChwYW5lbC9wYWdlKSBvciB0aGVpciBjaGlkcmVuIGhhdmUgYW4gZXJyb3IuXG4gICAqIFRoZSB2YWx1ZSBjYW4gYmUgb3V0IG9mIGRhdGUuIGhhc0Vycm9ycyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ29udGFpbnNFcnJvcnMoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29udGFpbnNFcnJvcnNcIiwgdGhpcy5nZXRDb250YWluc0Vycm9ycygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZEVsZW1lbnRJbkRlc2lnbigpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24odmFsOiBTdXJ2ZXlFbGVtZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXRzKCkge31cblxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge31cbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7fVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUGFnZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBmYWxzZSBpZiBpdCBpcyBub3QgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkZWxldGUoKSB7fVxuICBwcm90ZWN0ZWQgcmVtb3ZlU2VsZkZyb21MaXN0KGxpc3Q6IEFycmF5PGFueT4pIHtcbiAgICBpZiAoIWxpc3QgfHwgIUFycmF5LmlzQXJyYXkobGlzdCkpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2YodGhpcyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb2Nlc3NlZEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWwgfHwgIXRoaXMudGV4dFByb2Nlc3NvcikgcmV0dXJuIGh0bWw7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dChodG1sLCB0cnVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge31cbiAgcHJvdGVjdGVkIGdldFBhZ2UocGFyZW50OiBJUGFuZWwpOiBJUGFnZSB7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50KSBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIDxJUGFnZT4oPGFueT5wYXJlbnQpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBtb3ZlVG9CYXNlKFxuICAgIHBhcmVudDogSVBhbmVsLFxuICAgIGNvbnRhaW5lcjogSVBhbmVsLFxuICAgIGluc2VydEJlZm9yZTogYW55ID0gbnVsbFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIGZhbHNlO1xuICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSk7XG4gICAgdmFyIGluZGV4ID0gLTE7XG4gICAgaWYgKEhlbHBlcnMuaXNOdW1iZXIoaW5zZXJ0QmVmb3JlKSkge1xuICAgICAgaW5kZXggPSBwYXJzZUludChpbnNlcnRCZWZvcmUpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT0gLTEgJiYgISFpbnNlcnRCZWZvcmUgJiYgISFpbnNlcnRCZWZvcmUuZ2V0VHlwZSkge1xuICAgICAgaW5kZXggPSBjb250YWluZXIuaW5kZXhPZihpbnNlcnRCZWZvcmUpO1xuICAgIH1cbiAgICBjb250YWluZXIuYWRkRWxlbWVudCg8SUVsZW1lbnQ+KDxhbnk+dGhpcyksIGluZGV4KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQYWdlKHBhcmVudDogSVBhbmVsLCB2YWw6IElQYWdlKSB7XG4gICAgdmFyIG9sZFBhZ2UgPSB0aGlzLmdldFBhZ2UocGFyZW50KTtcbiAgICBpZiAob2xkUGFnZSA9PT0gdmFsKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpKTtcbiAgICBpZiAodmFsKSB7XG4gICAgICB2YWwuYWRkRWxlbWVudCg8SUVsZW1lbnQ+KDxhbnk+dGhpcyksIC0xKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50PFQgZXh0ZW5kcyBGdW5jdGlvbiwgT3B0aW9ucz4ge1xuICBwcm90ZWN0ZWQgY2FsbGJhY2tzOiBBcnJheTxUPjtcbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrcyA9PSBudWxsIHx8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBmaXJlKHNlbmRlcjogYW55LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2tzID09IG51bGwpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsbFJlc3VsdCA9IHRoaXMuY2FsbGJhY2tzW2ldKHNlbmRlciwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBhZGQoZnVuYzogVCkge1xuICAgIGlmICh0aGlzLmhhc0Z1bmMoZnVuYykpIHJldHVybjtcbiAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkge1xuICAgICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgQXJyYXk8VD4oKTtcbiAgICB9XG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChmdW5jKTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlKGZ1bmM6IFQpIHtcbiAgICBpZiAodGhpcy5oYXNGdW5jKGZ1bmMpKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApO1xuICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Z1bmMoZnVuYzogVCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNhbGxiYWNrcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCkgPiAtMTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2UudHMiLCIvKipcbiAqIEdsb2JhbCBzdXJ2ZXkgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IHZhciBzZXR0aW5ncyA9IHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyB7cXVlc3Rpb25OYW1lfSArIHtjb21tZW50UHJlZml4fS5cbiAgICogVGhlIGRlZmF1bHRcbiAgICovXG4gIGNvbW1lbnRQcmVmaXg6IFwiLUNvbW1lbnRcIixcbiAgLyoqXG4gICAqIEVuY29kZSBwYXJhbWV0ZXIgb24gY2FsbGluZyByZXN0ZnVsbCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogZGVmYXVsdCBsb2NhbGUgbmFtZSBmb3IgbG9jYWxpemFibGUgc3RyaW5ncyB0aGF0IHVzZXMgZHVyaW5nIHNlcmlhbGl6YXRpb24sIHtcImRlZmF1bHRcIjogXCJNeSB0ZXh0XCIsIFwiZGVcIjogXCJNZWluIFRleHRcIn1cbiAgICovXG4gIGRlZmF1bHRMb2NhbGVOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgcm93IG5hbWUgZm9yIG1hdHJpeCAoc2luZ2xlIGNob2ljZSlcbiAgICovXG4gIG1hdHJpeERlZmF1bHRSb3dOYW1lOiBcImRlZmF1bHRcIixcbiAgLyoqXG4gICAqIERlZmF1bHQgY2VsbCB0eXBlIGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlc1xuICAgKi9cbiAgbWF0cml4RGVmYXVsdENlbGxUeXBlOiBcImRyb3Bkb3duXCIsXG4gIC8qKlxuICAgKiBUb3RhbCB2YWx1ZSBwb3N0Zml4IGZvciBkcm9wZG93biBhbmQgZHluYW1pYyBtYXRyaWNlcy4gVGhlIHRvdGFsIHZhbHVlIHN0b3JlcyBhczoge21hdHJpeE5hbWV9ICsge3Bvc3RmaXh9XG4gICAqL1xuICBtYXRyaXhUb3RhbFZhbHVlUG9zdEZpeDogXCItdG90YWxcIixcbiAgLyoqXG4gICAqIE1heGltdW0gcm93IGNvdW50IGluIGR5bmFtaWMgbWF0cml4XG4gICAqL1xuICBtYXRyaXhNYXhpbXVtUm93Q291bnQ6IDEwMDAsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHBhbmVsIGNvdW50IGluIGR5bmFtaWMgcGFuZWxcbiAgICovXG4gIHBhbmVsTWF4aW11bVBhbmVsQ291bnQ6IDEwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcmF0ZSB2YWx1ZSBjb3VudCBpbiByYXRpbmcgcXVlc3Rpb25cbiAgICovXG4gIHJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudDogMjAsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBxdWVzdGlvbiB3aGlsZSBjaG9pY2VzIGFyZSBnZXR0aW5nIGZyb20gdGhlIHdlYiBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWI6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNlcmlhbGl6ZSB0aGUgbG9jYWxpemF0aW9uIHN0cmluZyBhcyBvYmplY3QgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBmb3IgZGVmYXVsdCBsb2NhbGUuIEluc3RlYWQgb2Ygc3RyaW5nIFwiTXlTdHJcIiBzZXJpYWxpemUgYXMge2RlZmF1bHQ6IFwiTXlTdHJcIn1cbiAgICovXG4gIHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBleGVjdXRlIHRoZSBjb21wbGV0ZSB0cmlnZ2VyIG9uIHZhbHVlIGNoYW5nZSBpbnN0ZWFkIG9mIG9uIG5leHQgcGFnZS5cbiAgICovXG4gIGV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiIChkZWZhdWx0KSBvciAoZGl2KVxuICAgKi9cbiAgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiLFxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiwgc2V0IHlvdXIgZnVuY3Rpb24sIGlmIHlvdSB3YW50IHRvIHNob3cgeW91ciBvd24gZGlhbG9nIGNvbmZpcm0gd2luZG93IGluc3RlYWQgb2Ygc3RhbmRhcmQgYnJvd3NlciB3aW5kb3cuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24gKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xuICB9LFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtaW5XaWR0aDogXCIzMDBweFwiLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtYXhXaWR0aDogXCJpbml0aWFsXCIsXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3NldHRpbmdzLnRzIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7XG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBJRWxlbWVudCxcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElDb25kaXRpb25SdW5uZXIsXG4gIElTdXJ2ZXlJbXBsLFxuICBJUGFnZSxcbiAgRXZlbnQsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IEFuc3dlclJlcXVpcmVkRXJyb3IsIEN1c3RvbUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IFN1cnZleVZhbGlkYXRvciwgSVZhbGlkYXRvck93bmVyLCBWYWxpZGF0b3JSdW5uZXIgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IFRleHRQcmVQcm9jZXNzb3IsIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkN1c3RvbVdpZGdldCB9IGZyb20gXCIuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuaW1wb3J0IHsgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25kaXRpb25PYmplY3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xufVxuXG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgYWxsIHF1ZXN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudFxuICBpbXBsZW1lbnRzIElRdWVzdGlvbiwgSUNvbmRpdGlvblJ1bm5lciwgSUxvY2FsaXphYmxlT3duZXIsIElWYWxpZGF0b3JPd25lciB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwcml2YXRlIHN0YXRpYyBUZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwID0ge1xuICAgIHRpdGxlOiBcInByb2Nlc3NlZFRpdGxlXCIsXG4gICAgcmVxdWlyZTogXCJyZXF1aXJlZFRleHRcIixcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcXVlc3Rpb25Db3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRRdWVzdGlvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3FfXCIgKyBRdWVzdGlvbi5xdWVzdGlvbkNvdW50ZXIrKztcbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0N1c3RvbVdpZGdldFJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1c3RvbVdpZGdldFZhbHVlOiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcbiAgY3VzdG9tV2lkZ2V0RGF0YSA9IHsgaXNOZWVkUmVuZGVyOiB0cnVlIH07XG4gIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHN1cnZleUxvYWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29uZGl0aW9uRW5hYmVsUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uUmVxdWlyZWRSdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHZhbGlkYXRlVmFsdWVDYWxsYmFjazogKCkgPT4gU3VydmV5RXJyb3I7XG4gIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZUNhbGxiYWNrOiAoKSA9PiBzdHJpbmc7XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjazogKHF1ZXN0aW9uOiBRdWVzdGlvbiwgZWxlbWVudDogYW55KSA9PiBhbnk7XG4gIHByaXZhdGUgbG9jUHJvY2Vzc2VkVGl0bGU6IExvY2FsaXphYmxlU3RyaW5nO1xuICBwcm90ZWN0ZWQgaXNSZWFkeVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gaXNSZWFkeSBwcm9wZXJ0eSBvZiBxdWVzdGlvbiBpcyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIC0gdGhlIHF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuaXNSZWFkeSAtIGN1cnJlbnQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZElzUmVhZHkgLSBvbGQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKi9cbiAgcHVibGljIG9uUmVhZHlDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBRdWVzdGlvbiwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG5cbiAgcHVibGljIGlzUmVhZE9ubHlSZW5kZXJEaXYoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkT25seSAmJiBzZXR0aW5ncy5yZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlID09PSBcImRpdlwiO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuaWQgPSBRdWVzdGlvbi5nZXRRdWVzdGlvbklkKCk7XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2YWxpZGF0b3JzXCIsIGZ1bmN0aW9uICh2YWxpZGF0b3I6IGFueSkge1xuICAgICAgdmFsaWRhdG9yLmVycm9yT3duZXIgPSBzZWxmO1xuICAgIH0pO1xuICAgIHZhciBsb2NUaXRsZVZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIGxvY1RpdGxlVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSBzZWxmLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAoIXNlbGYuc3VydmV5KSByZXR1cm4gdGV4dDtcbiAgICAgIHJldHVybiBzZWxmLnN1cnZleS5nZXRVcGRhdGVkUXVlc3Rpb25UaXRsZSh0aGlzLCB0ZXh0KTtcbiAgICB9O1xuICAgIHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5sb2NQcm9jZXNzZWRUaXRsZS5zaGFyZWREYXRhID0gbG9jVGl0bGVWYWx1ZTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gICAgdmFyIGxvY0NvbW1lbnRUZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwiY29tbWVudFRleHRcIixcbiAgICAgIHRoaXMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBsb2NDb21tZW50VGV4dC5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIndpZHRoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlRWxlbWVudENzcygpO1xuICAgICAgaWYgKCEhc2VsZi5wYXJlbnQpIHtcbiAgICAgICAgc2VsZi5wYXJlbnQuZWxlbWVudFdpZHRoQ2hhbmdlZChzZWxmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJpbmRlbnRcIiwgXCJyaWdodEluZGVudFwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzQ29tbWVudFwiLCBcImhhc090aGVyXCJdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmluaXRDb21tZW50RnJvbVN1cnZleSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMudmFsdWVOYW1lKSByZXR1cm4gdGhpcy52YWx1ZU5hbWUudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSBpZiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgcXVlc3Rpb24gcmVzdWx0IGluIHRoZSBuYW1lIGRpZmZlcmVudCBmcm9tIHRoZSBxdWVzdGlvbiBuYW1lLlxuICAgKiBRdWVzdGlvbiBuYW1lIHNob3VsZCBiZSB1bmlxdWUgaW4gdGhlIHN1cnZleSBhbmQgdmFsdWVOYW1lIGNvdWxkIGJlIG5vdCB1bmlxdWUuIEl0IGFsbG93cyB0byBzaGFyZSBkYXRhIGJldHdlZW4gc2V2ZXJhbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZU5hbWUuXG4gICAqIFRoZSBsaWJyYXJ5IHNldCB0aGUgdmFsdWUgYXV0b21hdGljYWxseSBpZiB0aGUgcXVlc3Rpb24ubmFtZSBwcm9wZXJ0eSBpcyBub3QgdmFsaWQuIEZvciBleGFtcGxlLCBpZiBpdCBjb250YWlucyB0aGUgcGVyaW9kICcuJyBzeW1ib2wuXG4gICAqIEluIHRoaXMgY2FzZSBpZiB5b3Ugc2V0IHRoZSBxdWVzdGlvbi5uYW1lIHByb3BlcnR5IHRvICd4LnknIHRoZW4gdGhlIHZhbHVlTmFtZSBiZWNvbWVzICd4IHknLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9ucyB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHZhciBvbGRWYWx1ZU5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlTmFtZVwiLCB2YWwpO1xuICAgIHRoaXMub25WYWx1ZU5hbWVDaGFuZ2VkKG9sZFZhbHVlTmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVOYW1lQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uUmVuYW1lZChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICAhIW9sZFZhbHVlID8gb2xkVmFsdWUgOiB0aGlzLm5hbWVcbiAgICApO1xuICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbmFtZWQoXG4gICAgICB0aGlzLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICB0aGlzLnZhbHVlTmFtZSA/IHRoaXMudmFsdWVOYW1lIDogb2xkVmFsdWVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBpcyBxdWVzdGlvbiByZWFkeSB0byB1c2VcbiAgICovXG4gIHB1YmxpYyBjaG9pY2VzTG9hZGVkKCk6IHZvaWQge31cbiAgLyoqXG4gICAqIEdldC9zZXQgdGhlIHBhZ2Ugd2hlcmUgdGhlIHF1ZXN0aW9uIGlzIGxvY2F0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2UoKTogSVBhZ2Uge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2UodGhpcy5wYXJlbnQpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFnZSh2YWw6IElQYWdlKSB7XG4gICAgdGhpcy5zZXRQYWdlKHRoaXMucGFyZW50LCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBkZWxldGUoKSB7XG4gICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2VsZkZyb21MaXN0KHRoaXMucGFyZW50LmVsZW1lbnRzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0Zsb3dMYXlvdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF5b3V0VHlwZSgpID09PSBcImZsb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXlvdXRUeXBlICE9PSBcImZsb3dcIjtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldC9zZXQgdGhlIHF1ZXN0aW9uIHZpc2liaWxpdHkuXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUgJiYgdGhpcy5lcnJvcnMgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBjaG9vc2UgaG93IG90aGVyIHF1ZXN0aW9uIHZhbHVlcyB3aWxsIGJlIHJlbmRlcmVkIGluIHRpdGxlIGlmIHJlZmVyZW5jZWQgaW4ge30uXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgdXNlRGlzcGxheVZhbHVlc0luVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXNlRGlzcGxheVZhbHVlc0luVGl0bGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIHZpc2libGUgYW5kIGlmIGl0IHJldHVybnMgZmFsc2UgdGhlIFF1ZXN0aW9uIGJlY29tZXMgaW52aXNpYmxlLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gdmlzaWJsZSBwcm9wZXJ0eSBpcyB1c2VkLlxuICAgKiBAc2VlIHZpc2libGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGlzIHZpc2libGUgb3Igc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5hcmVFbXB0eUVsZW1lbnRzSGlkZGVuICYmIHRoaXMuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgfHwgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuIEl0IGNhbiBiZSBmcm9tIDAgdG8gYWxsIHZpc2libGUgcXVlc3Rpb25zIGNvdW50IC0gMVxuICAgKiBUaGUgdmlzaWJsZUluZGV4IGlzIC0xIGlmIHRoZSB0aXRsZSBpcyAnaGlkZGVuJyBvciBoaWRlTnVtYmVyIGlzIHRydWVcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgaGlkZU51bWJlclxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGhpZGVOdW1iZXIgdG8gdHJ1ZSB0byBzdG9wIHNob3dpbmcgdGhlIG51bWJlciBmb3IgdGhpcyBxdWVzdGlvbi4gVGhlIHF1ZXN0aW9uIHdpbGwgbm90IGJlIGNvdW50ZXJcbiAgICogQHNlZSB2aXNpYmxlSW5kZXhcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVOdW1iZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVOdW1iZXJcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZU51bWJlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoaWRlTnVtYmVyXCIsIHZhbCk7XG4gICAgdGhpcy5ub3RpZnlTdXJ2ZXlWaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIG1heSBoYXZlIGEgdGl0bGUgbG9jYXRlZCBvbiB0aGUgbGVmdFxuICAgKi9cbiAgcHVibGljIGdldCBpc0FsbG93VGl0bGVMZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYXMgYSBzdHJpbmcgYXMgaXQgcmVwcmVzZW50cyBpbiB0aGUganNvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicXVlc3Rpb25cIjtcbiAgfVxuICAvKipcbiAgICogTW92ZSBxdWVzdGlvbiB0byBhIG5ldyBjb250YWluZXIgUGFnZS9QYW5lbC4gQWRkIGFzIGEgbGFzdCBlbGVtZW50IGlmIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgbm90IHVzZWQgb3IgaW5zZXJ0ZWQgaW50byB0aGUgZ2l2ZW4gaW5kZXgsXG4gICAqIGlmIGluc2VydCBwYXJhbWV0ZXIgaXMgbnVtYmVyLCBvciBiZWZvcmUgdGhlIGdpdmVuIGVsZW1lbnQsIGlmIHRoZSBpbnNlcnRCZWZvcmUgcGFyYW1ldGVyIGlzIGEgcXVlc3Rpb24gb3IgcGFuZWxcbiAgICogQHBhcmFtIGNvbnRhaW5lciBQYWdlIG9yIFBhbmVsIHRvIHdoZXJlIGEgcXVlc3Rpb24gaXMgcmVsb2NhdGVkLlxuICAgKiBAcGFyYW0gaW5zZXJ0QmVmb3JlIFVzZSBpdCBpZiB5b3Ugd2FudCB0byBzZXQgdGhlIHF1ZXN0aW9uIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24uIFlvdSBtYXkgdXNlIGEgbnVtYmVyICh1c2UgMCB0byBpbnNlcnQgaW50IHRoZSBiZWdpbm5pbmcpIG9yIGVsZW1lbnQsIGlmIHlvdSB3YW50IHRvIGluc2VydCBiZWZvcmUgdGhpcyBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIG1vdmVUbyhjb250YWluZXI6IElQYW5lbCwgaW5zZXJ0QmVmb3JlOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvQmFzZSh0aGlzLnBhcmVudCwgY29udGFpbmVyLCBpbnNlcnRCZWZvcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zKCkge1xuICAgIGlmICh0aGlzLmRhdGEgJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgIXRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLnJ1bkNvbmRpdGlvbihcbiAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICk7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCkge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25DcmVhdGVkKHRoaXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlICYmICF0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIHB1YmxpYyBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCkgOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBBIHBhcmVudCBlbGVtZW50LiBJdCBjYW4gYmUgcGFuZWwgb3IgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIHRoaXMub25QYXJlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUGFyZW50Q2hhbmdlZCgpIHt9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYSB0aXRsZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGU6IFF1ZXN0aW9uSHRtbE1vZGVsLCBvciB0aXRsZUxvY2F0aW9uIHByb3BlcnR5IGVxdWFscyB0byBcImhpZGRlblwiXG4gICAqIEBzZWUgdGl0bGVMb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCkgIT09IFwiaGlkZGVuXCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IGRpZmZlcmVudCBmcm9tIFwiZGVmYXVsdFwiIHRvIHNldCB0aGUgc3BlY2lmaWMgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24gZm9yIHRoaXMgcGFuZWwvcGFnZS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGlzVmlzaWJpbGl0eUNoYW5nZWQgPVxuICAgICAgdGhpcy50aXRsZUxvY2F0aW9uID09IFwiaGlkZGVuXCIgfHwgdmFsdWUgPT0gXCJoaWRkZW5cIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgfVxuICAgIGlmIChpc1Zpc2liaWxpdHlDaGFuZ2VkKSB7XG4gICAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLmlzVmlzaWJsZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGl0bGUgbG9jYXRpb24gYmFzZWQgb24gcXVlc3Rpb24gdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBhbmQgUXVlc3Rpb25UaXRsZUxvY2F0aW9uIG9mIGl0J3MgcGFyZW50c1xuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGbG93TGF5b3V0KSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLmdldFRpdGxlTG9jYXRpb25Db3JlKCk7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImxlZnRcIiAmJiAhdGhpcy5pc0FsbG93VGl0bGVMZWZ0KSBsb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRUaXRsZUxvY2F0aW9uQ29yZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRpdGxlTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy50aXRsZUxvY2F0aW9uO1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gICAgcmV0dXJuIFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25MZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1RpdGxlICYmIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpID09PSBcImxlZnRcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJ0b3BcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJib3R0b21cIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkxlZnRUb3AoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc1RpdGxlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5nZXRUaXRsZUxvY2F0aW9uKCk7XG4gICAgcmV0dXJuIGxvY2F0aW9uID09PSBcImxlZnRcIiB8fCBsb2NhdGlvbiA9PT0gXCJ0b3BcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gOiBcInRvcFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBxdWVzdGlvbiBkb2Vzbid0IGhhdmUgYW4gaW5wdXQgZWxlbWVudCwgZm9yIGV4YW1wbGU6IFF1ZXN0aW9uSHRtbE1vZGVsXG4gICAqIEBzZWUgaGFzU2luZ2xlSW5wdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHF1ZXN0aW9uIGRvZXNuJ3QgaGF2ZSBhbiBpbnB1dCBlbGVtZW50IG9yIGhhdmUgbXVsdGlwbGUgaW5wdXRzOiBtYXRyaWNlcyBvciBwYW5lbCBkeW5hbWljXG4gICAqIEBzZWUgaGFzSW5wdXRcbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSW5wdXQ7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQgKyBcImlcIjtcbiAgfVxuICAvKipcbiAgICogUXVlc3Rpb24gdGl0bGUuIFVzZSBzdXJ2ZXkgcXVlc3Rpb25UaXRsZVRlbXBsYXRlIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgdGl0bGUgcXVlc3Rpb24gaXMgcmVuZGVyZWQuIElmIGl0IGlzIGVtcHR5LCB0aGVuIHF1ZXN0aW9uIG5hbWUgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlVGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB0aGlzLm5hbWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIC8qKlxuICAgKiBRdWVzdGlvbiBkZXNjcmlwdGlvbi4gSXQgcmVuZGVycyB1bmRlciBxdWVzdGlvbiB0aXRsZSBieSB1c2luZyBzbWFsbGVyIGZvbnQuIFVubGlrZSB0aGUgdGl0bGUsIGRlc2NyaXB0aW9uIGNhbiBiZSBlbXB0eS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSB0aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImRlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImRlc2NyaXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0Rlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImRlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBRdWVzdGlvbiBkZXNjcmlwdGlvbiBsb2NhdGlvbi4gQnkgZGVmYXVsdCwgdmFsdWUgaXMgXCJkZWZhdWx0XCIgYW5kIGl0IGRlcGVuZHMgb24gc3VydmV5IHF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbiBwcm9wZXJ0eVxuICAgKiBZb3UgbWF5IGNoYW5nZSBpdCB0byBcInVuZGVySW5wdXRcIiB0byByZW5kZXIgaXQgdW5kZXIgcXVlc3Rpb24gaW5wdXQgb3IgXCJ1bmRlclRpdGxlXCIgdG8gcmVuZGVyZWQgaXQgdW5kZXIgdGl0bGUuXG4gICAqIEBzZWUgZGVzY3JpcHRpb25cbiAgICogQHNlZSBTdXJ2ZXkucXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlclRpdGxlXCI7XG4gIH1cbiAgZ2V0IGhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkgPT0gXCJ1bmRlcklucHV0XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXREZXNjcmlwdGlvbkxvY2F0aW9uKCkge1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbkxvY2F0aW9uO1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblxuICAgICAgOiBcInVuZGVyVGl0bGVcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGN1c3RvbSB0ZXh0IHRoYXQgd2lsbCBiZSBzaG93biBvbiByZXF1aXJlZCBlcnJvci4gVXNlIHRoaXMgcHJvcGVydHksIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBkZWZhdWx0IHRleHQuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCBvciBzZXQgdGhlIGNvbW1lbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbW1lbnRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21tZW50VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbW1lbnRUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0NvbW1lbnRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbW1lbnRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29weSBvZiBxdWVzdGlvbiBlcnJvcnMgc3VydmV5LiBGb3Igc29tZSBxdWVzdGlvbnMgbGlrZSBtYXRyaXggYW5kIHBhbmVsIGR5bmFtaWMgaXQgaW5jbHVkZXMgdGhlIGVycm9ycyBvZiBuZXN0ZWQgcXVlc3Rpb25zLlxuICAgKi9cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5zbGljZSgpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGluayB0byB0aGUgY3VzdG9tIHdpZGdldC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VzdG9tV2lkZ2V0KCk6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcbiAgICBpZiAoIXRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgJiYgIXRoaXMuY3VzdG9tV2lkZ2V0VmFsdWUpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tV2lkZ2V0VmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUN1c3RvbVdpZGdldCgpIHtcbiAgICB0aGlzLmN1c3RvbVdpZGdldFZhbHVlID0gQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXN0b21XaWRnZXQoXG4gICAgICB0aGlzXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5oYXNTaW5nbGVJbnB1dCkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dCh0aGlzLCBlbCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJRdWVzdGlvbih0aGlzLCBlbCk7XG4gICAgaWYgKCEhdGhpcy5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrKHRoaXMsIGVsKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGJlZm9yZURlc3RveVF1ZXN0aW9uRWxlbWVudChlbDogYW55KSB7fVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVuZHJlZCBxdWVzdGlvbiB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUudGV4dE9ySHRtbDtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogdGhpcy5uYW1lO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0aXRsZSBhZnRlciBwcm9jZXNzaW5nIHRoZSBxdWVzdGlvbiB0ZW1wbGF0ZS5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlVGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVBhdHRlcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVQYXR0ZXJuIDogXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRPblN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9PSBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9PSBcIm51bVJlcXVpcmVUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnF1ZXN0aW9uVGl0bGVQYXR0ZXJuID09IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBRdWVzdGlvbiByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcXVlc3Rpb24gdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRXaXRoTmV3TGluZSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGNzcyBjbGFzc2VzIHRoYXQgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBxdWVzdGlvbi4gWW91IG1heSB1c2Ugc3VydmV5LnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyBldmVudCB0byBvdmVycmlkZSBjc3MgY2xhc3NlcyBmb3IgYSBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC51cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICB2YXIgY2xhc3NlcyA9IHsgZXJyb3I6IHt9IH07XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLCBjc3MucXVlc3Rpb24pO1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3Nlcy5lcnJvciwgY3NzLmVycm9yKTtcbiAgICB0aGlzLnVwZGF0ZUNzc0NsYXNzZXMoY2xhc3NlcywgY3NzKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZShjbGFzc2VzKTtcbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1Jvb3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzUm9vdFwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzUm9vdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1Jvb3RcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzUm9vdChjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPVxuICAgICAgdGhpcy5pc0Zsb3dMYXlvdXQgJiYgIXRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgID8gY3NzQ2xhc3Nlcy5mbG93Um9vdFxuICAgICAgICA6IGNzc0NsYXNzZXMubWFpblJvb3Q7XG4gICAgaWYgKCFyZXMpIHJlcyA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNGbG93TGF5b3V0ICYmXG4gICAgICB0aGlzLmhhc1RpdGxlT25MZWZ0ICYmXG4gICAgICAhIWNzc0NsYXNzZXMudGl0bGVMZWZ0Um9vdFxuICAgICkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZUxlZnRSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5lcnJvcnMubGVuZ3RoID4gMCAmJiAhIWNzc0NsYXNzZXMuaGFzRXJyb3IpIHtcbiAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuaGFzRXJyb3I7XG4gICAgfVxuICAgIGlmIChjc3NDbGFzc2VzLnNtYWxsICYmICF0aGlzLndpZHRoKSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLnNtYWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzSGVhZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0hlYWRlcihjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBjc3NDbGFzc2VzLmhlYWRlciB8fCBcIlwiO1xuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Ub3AgJiYgISFjc3NDbGFzc2VzLmhlYWRlclRvcCkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJUb3A7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25MZWZ0ICYmICEhY3NzQ2xhc3Nlcy5oZWFkZXJMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmhlYWRlckxlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpdGxlT25Cb3R0b20gJiYgISFjc3NDbGFzc2VzLmhlYWRlckJvdHRvbSkge1xuICAgICAgcmVzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5oZWFkZXJCb3R0b207XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBjc3NDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0NvbnRlbnRcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0NvbnRlbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gY3NzQ2xhc3Nlcy5jb250ZW50IHx8IFwiXCI7XG4gICAgaWYgKHRoaXMuaGFzVGl0bGVPbkxlZnQgJiYgISFjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0KSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmNvbnRlbnRMZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc1RpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzVGl0bGVcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVGl0bGUoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzdWx0ID0gY3NzQ2xhc3Nlcy50aXRsZTtcbiAgICBpZiAodGhpcy5jb250YWluc0Vycm9ycykge1xuICAgICAgaWYgKCEhY3NzQ2xhc3Nlcy50aXRsZU9uRXJyb3IpIHtcbiAgICAgICAgcmVzdWx0ICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy50aXRsZU9uRXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQW5zd2VyZWQgJiYgISFjc3NDbGFzc2VzLnRpdGxlT25BbnN3ZXIpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIGNzc0NsYXNzZXMudGl0bGVPbkFuc3dlcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc0Vycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0Vycm9yXCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NFcnJvcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc0Vycm9yXCIsIHZhbCk7XG4gIH1cbiAgLy9UT0RPIHdhcyBub3QgcmVtb3ZlZCBmcm9tIG90aGVyIHBsYWNlc1xuICBwcm90ZWN0ZWQgZ2V0Q3NzRXJyb3IoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gY3NzQ2xhc3Nlcy5lcnJvci5yb290IHx8IFwiXCI7XG4gICAgaWYgKHRoaXMuZXJyb3JMb2NhdGlvbiA9PSBcInRvcFwiKSB7XG4gICAgICBpZiAoISFjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uVG9wKSB7XG4gICAgICAgIHJlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Ub3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZXJyb3JMb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJlxuICAgICAgISFjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uQm90dG9tXG4gICAgKSB7XG4gICAgICByZXMgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uQm90dG9tO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLnNldENzc1Jvb3QodGhpcy5nZXRDc3NSb290KGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0hlYWRlcih0aGlzLmdldENzc0hlYWRlcihjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NDb250ZW50KHRoaXMuZ2V0Q3NzQ29udGVudChjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NUaXRsZSh0aGlzLmdldENzc1RpdGxlKGNzc0NsYXNzZXMpKTtcbiAgICB0aGlzLnNldENzc0Vycm9yKHRoaXMuZ2V0Q3NzRXJyb3IoY3NzQ2xhc3NlcykpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDc3NDbGFzc2VzKHJlczogYW55LCBjc3M6IGFueSkge1xuICAgIGlmICghY3NzLnF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgaWYgKCEhY3NzLnF1ZXN0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy5yb290ID0gKHJlcy5yb290ID8gcmVzLnJvb3QgKyBcIiBcIiA6IFwiXCIpICsgb2JqQ3NzO1xuICAgICAgfVxuICAgICAgaWYgKGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkKSB7XG4gICAgICAgIHJlcy50aXRsZSArPSBcIiBcIiArIGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb2JqQ3NzID0gY3NzW3RoaXMuZ2V0Q3NzVHlwZSgpXTtcbiAgICBpZiAob2JqQ3NzID09PSB1bmRlZmluZWQgfHwgb2JqQ3NzID09PSBudWxsKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvYmpDc3MgPT09IFwic3RyaW5nXCIgfHwgb2JqQ3NzIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICByZXMucm9vdCA9IChyZXMucm9vdCA/IHJlcy5yb290ICsgXCIgXCIgOiBcIlwiKSArIG9iakNzcztcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iakNzcykge1xuICAgICAgICByZXNba2V5XSA9IG9iakNzc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgfVxuICBwcml2YXRlIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIHdpZHRoIHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyBtaW5XaWR0aCBjb25zdHJhaW50IHRvIHRoZSBxdWVzdGlvbiBsaWtlIGNzcyBzdHlsZSAoJSwgcHgsIGVtIGV0YykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHNldHRpbmdzLm1pbldpZHRoKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgbWF4V2lkdGggY29uc3RyYWludCB0byB0aGUgcXVlc3Rpb24gbGlrZSBjc3Mgc3R5bGUgKCUsIHB4LCBlbSBldGMpLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhXaWR0aFwiLCBzZXR0aW5ncy5tYXhXaWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCB3aWR0aCBvZiB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgZGlmZmVyZW50IGZyb20gMCB0byBpbmNyZWFzZSB0aGUgbGVmdCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCBkaWZmZXJlbnQgZnJvbSAwIHRvIGluY3JlYXNlIHRoZSByaWdodCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ0xlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdMZWZ0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ1JpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ1JpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkluZGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmluZGVudCk7XG4gICAgdGhpcy5wYWRkaW5nUmlnaHQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5yaWdodEluZGVudCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRlbnRTaXplKGluZGVudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZW50IDwgMSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGluZGVudCAqIHRoaXMuY3NzQ2xhc3Nlcy5pbmRlbnQgKyBcInB4XCI7XG4gIH1cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGZvY3VzIHRvIHRoZSBpbnB1dCBvZiB0aGlzIHF1ZXN0aW9uLlxuICAgKiBAcGFyYW0gb25FcnJvciBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSwgdG8gZm9jdXMgdGhlIGlucHV0IHdpdGggdGhlIGZpcnN0IGVycm9yLCBvdGhlciB3aXNlIHRoZSBmaXJzdCBpbnB1dCB3aWxsIGJlIGZvY3VzZWQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXMob25FcnJvcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnNjcm9sbEVsZW1lbnRUb1RvcCh0aGlzLCB0aGlzLCBudWxsLCB0aGlzLmlkKTtcbiAgICB9XG4gICAgdmFyIGlkID0gIW9uRXJyb3JcbiAgICAgID8gdGhpcy5nZXRGaXJzdElucHV0RWxlbWVudElkKClcbiAgICAgIDogdGhpcy5nZXRGaXJzdEVycm9ySW5wdXRFbGVtZW50SWQoKTtcbiAgICBpZiAoU3VydmV5RWxlbWVudC5Gb2N1c0VsZW1lbnQoaWQpKSB7XG4gICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmZvY3VzQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZmlyZUNhbGxiYWNrKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICB9XG4gIHB1YmxpYyBnZXRPdGhlcnNNYXhMZW5ndGgoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubWF4T3RoZXJzTGVuZ3RoID4gMCA/IHRoaXMuc3VydmV5Lm1heE90aGVyc0xlbmd0aCA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ3JlYXRpbmcoKSB7fVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0SWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSB7XG4gICAgdmFyIG5hbWUgPSB0ZXh0VmFsdWUubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9XG4gICAgICBPYmplY3Qua2V5cyhRdWVzdGlvbi5UZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwKS5pbmRleE9mKG5hbWUpICE9PSAtMSB8fFxuICAgICAgKDxhbnk+dGhpcylbdGV4dFZhbHVlLm5hbWVdICE9PSB1bmRlZmluZWQ7XG4gICAgdGV4dFZhbHVlLnZhbHVlID0gKDxhbnk+dGhpcylbXG4gICAgICAoPGFueT5RdWVzdGlvbi5UZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwKVtuYW1lXSB8fCB0ZXh0VmFsdWUubmFtZVxuICAgIF07XG4gIH1cbiAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gbWFrZSB0aGUgcXVlc3Rpb24gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgYW5zd2VyIHRoZSBxdWVzdGlvbiB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIHZhbCk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmxvY1RpdGxlLm9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIHJlcXVpcmVkIGFuZCBhbiBlbmQtdXNlciBoYXMgdG8gYW5zd2VyIGl0LlxuICAgKiBJZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBRdWVzdGlvbiB0aGVuIGFuIGVuZC11c2VyIG1heSBub3QgYW5zd2VyIGl0IHRoZSBRdWVzdGlvbiBtYXliZSBlbXB0eS5cbiAgICogVGhlIGxpYnJhcnkgcnVucyB0aGUgZXhwcmVzc2lvbiBvbiBzdXJ2ZXkgc3RhcnQgYW5kIG9uIGNoYW5naW5nIGEgcXVlc3Rpb24gdmFsdWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBlbXB0eSB0aGVuIGlzUmVxdWlyZWQgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGlzUmVxdWlyZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZElmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIGFkZCBhIGNvbW1lbnQgZm9yIHRoZSBxdWVzdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoYXNDb21tZW50KHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0Q29tbWVudCgpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzQ29tbWVudFwiLCB2YWwpO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHRoaXMuaGFzT3RoZXIgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWNhdG9yLiBJdCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlkXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhVGl0bGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfYXJpYVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zdXBwb3J0T3RoZXIoKSB8fCB0aGlzLmhhc090aGVyID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhhc090aGVyXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHRoaXMuaGFzQ29tbWVudCA9IGZhbHNlO1xuICAgIHRoaXMuaGFzT3RoZXJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHt9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDb21tZW50IHx8IHRoaXMuaGFzT3RoZXI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHRoZSBxdXN0aW9uLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogUnVuIHZpc2libGVJZiBhbmQgZW5hYmxlSWYgZXhwcmVzc2lvbnMuIElmIHZpc2libGVJZiBvci9hbmQgZW5hYmxlZElmIGFyZSBub3QgZW1wdHksIHRoZW4gdGhlIHJlc3VsdHMgb2YgcGVyZm9ybWluZyB0aGUgZXhwcmVzc2lvbiAodHJ1ZSBvciBmYWxzZSkgc2V0IHRvIHRoZSB2aXNpYmxlL3JlYWRPbmx5IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB2YWx1ZXMgVHlwaWNhbGx5IHN1cnZleSByZXN1bHRzXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgZW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW1wicXVlc3Rpb25cIl0gPSB0aGlzO1xuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUlmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMucnVuRW5hYmxlSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blJlcXVpcmVkSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25FbmFiZWxSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuUmVxdWlyZWRJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5yZXF1aXJlZElmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yZXF1aXJlZElmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnJlcXVpcmVkSWY7XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5zdXJ2ZXlMb2FkQ2FsbGJhY2spO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7XG4gICAgc3VwZXIub25TZXREYXRhKCk7XG4gICAgdGhpcy5pbml0RGF0YUZyb21TdXJ2ZXkoKTtcbiAgICB0aGlzLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaW5pdERhdGFGcm9tU3VydmV5KCkge1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodGhpcy5kYXRhLmdldFZhbHVlKHRoaXMuZ2V0VmFsdWVOYW1lKCkpKTtcbiAgICAgIHRoaXMuaW5pdENvbW1lbnRGcm9tU3VydmV5KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBpbml0Q29tbWVudEZyb21TdXJ2ZXkoKSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmIHRoaXMucmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21tZW50RnJvbVN1cnZleSh0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkoXCJcIik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcXVlc3Rpb25WYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb25Db21tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbW1lbnRcIik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcXVlc3Rpb25Db21tZW50KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29tbWVudFwiLCB2YWwpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9TZXQgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgKiBAc2VlIFN1cnZleU1vZGUuc2V0VmFsdWVcbiAgICogQHNlZSBTdXJ2ZXlNb2RlLmdldFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5jb21tZW50ID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgY3JlYXRlVmFsdWVDb3B5KCk6IGFueSB7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjYW5DbGVhclZhbHVlQXNJbnZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmIHRoaXMuaXNQYXJlbnRWaXNpYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5wYWdlICYmIHRoaXMucGFnZS5pc1N0YXJ0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICF0aGlzLnN1cnZleS5oYXNWaXNpYmxlUXVlc3Rpb25CeVZhbHVlTmFtZSh0aGlzLnZhbHVlTmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNQYXJlbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAoIXBhcmVudC5pc1Zpc2libGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgaWYgKHRoaXMuY2FuQ2xlYXJWYWx1ZUFzSW52aXNpYmxlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGRpc3BsYXlWYWx1ZSgpOiBhbnkge1xuICAgIHRoaXMudXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlWYWx1ZVwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRGlzcGxheVZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5VmFsdWVcIiwgdGhpcy5nZXREaXNwbGF5VmFsdWUodHJ1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHF1ZXN0aW9uIHZhbHVlIGFzIGEgZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdGhpcyBwYXJhbWV0ZXIsIGlmIHlvdSB3YW50IHRvIGdldCBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHZhbHVlIGFuZCBub3QgcXVlc3Rpb24udmFsdWUuIEl0IGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAodGhpcy5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmN1c3RvbVdpZGdldC5nZXREaXNwbGF5VmFsdWUodGhpcywgdmFsdWUpO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpIDogdmFsdWU7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSB0byB0aGUgcXVlc3Rpb24uIEl0IHdpbGwgYmUgYXNzaWduIHRvIHRoZSBxdWVzdGlvbiBvbiBsb2FkaW5nIHRoZSBzdXJ2ZXkgZnJvbSBKU09OIG9yIGFkZGluZyBhIHF1ZXN0aW9uIHRvIHRoZSBzdXJ2ZXkgb3Igb24gc2V0dGluZyB0aGlzIHByb3BlcnR5IG9mIHRoZSB2YWx1ZSBpcyBlbXB0eS5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIGFuc3dlciBkYXRhIGFzIGEgcGxhaW4gb2JqZWN0OiB3aXRoIHF1ZXN0aW9uIHRpdGxlLCBuYW1lLCB2YWx1ZSBhbmQgZGlzcGxheVZhbHVlLlxuICAgKiBGb3IgY29tcGxleCBxdWVzdGlvbnMgKGxpa2UgbWF0cml4LCBldGMuKSBpc05vZGUgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cylcbiAgICogc2V0IG9wdGlvbnMuaW5jbHVkZUVtcHR5IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlRW1wdHkgfHwgIXRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSA8YW55PntcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB0aXRsZTogdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZGlzcGxheVZhbHVlLFxuICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlUXVlc3Rpb25UeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5xdWVzdGlvblR5cGUgPSB0aGlzLmdldFR5cGUoKTtcbiAgICAgIH1cbiAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGFbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9IHRoaXNbXG4gICAgICAgICAgY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgaXNDb21tZW50OiB0cnVlLFxuICAgICAgICAgICAgdGl0bGU6IFwiQ29tbWVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNvbW1lbnRQcmVmaXgsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuY29tbWVudCxcbiAgICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvcnJlY3QgYW5zd2VyIG9uIHRoZSBxdWVzdGlvbi4gU2V0IHRoaXMgdmFsdWUgaWYgeW91IGFyZSBkb2luZyBhIHF1aXouXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5jb3JyZWN0QW5zd2Vyc1xuICAgKiBAc2VlIFN1cnZleU1vZGVsLmluQ29ycmVjdEFuc3dlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgY29ycmVjdEFuc3dlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb3JyZWN0QW5zd2VyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29ycmVjdEFuc3dlcih2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvcnJlY3RBbnN3ZXJcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbnMgY291bnQ6IDEgZm9yIHRoZSBub24tbWF0cml4IHF1ZXN0aW9ucyBhbmQgYWxsIGlubmVyIHZpc2libGUgcXVlc3Rpb25zIHRoYXQgaGFzIGlucHV0KHMpIHdpZGdldHMgZm9yIHF1ZXN0aW9uIG9mIG1hdHJpeCB0eXBlcy5cbiAgICogQHNlZSBnZXRRdWl6UXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1Zpc2libGUgJiZcbiAgICAgIHRoaXMuaGFzSW5wdXQgJiZcbiAgICAgICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXIpXG4gICAgKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVpelF1ZXN0aW9uQ291bnQoKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc0VtcHR5KCkgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY29ycmVjdEFuc3dlcikpXG4gICAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0QW5zd2VyQ291bnQoKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVpelF1ZXN0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyLCB0cnVlKSA/IDEgOiAwO1xuICB9XG4gIHB1YmxpYyBpc0Fuc3dlckNvcnJlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ycmVjdEFuc3dlckNvdW50ID09IHRoaXMucXVpelF1ZXN0aW9uQ291bnQ7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgdGhpcy5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuaXNFbXB0eSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmIHRoaXMuaXNEZWZhdWx0VmFsdWVFbXB0eSgpKSByZXR1cm47XG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWUoKTtcbiAgfVxuICBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIHRoaXMudmFsdWUgPSBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcXVlc3Rpb24gY29tbWVudCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCEhbmV3VmFsdWUpIHtcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUudG9TdHJpbmcoKS50cmltKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbW1lbnQgPT0gbmV3VmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQ29tbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldE5ld0NvbW1lbnQobmV3VmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIHZhbHVlIGlzIGVtcHR5XG4gICAqL1xuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbnN3ZXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUlzQW5zd2VyZWQoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbnN3ZXJlZFwiLCB0aGlzLmdldElzQW5zd2VyZWQoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRW1wdHkoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWxpZGF0b3JzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgZ2V0U3VwcG9ydGVkVmFsaWRhdG9ycygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5hZGRTdXBwb3J0ZWRWYWxpZGF0b3JzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgYWRkU3VwcG9ydGVkVmFsaWRhdG9ycyhzdXBwb3J0ZWRWYWxpZGF0b3JzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgc3VwcG9ydGVkVmFsaWRhdG9ycy5wdXNoKFwiZXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7XG4gICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcyk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmdldFR5cGUoKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBlcnJvcihzKSBpbiB0aGUgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUgdG8gc2hvdyBhbiBlcnJvciBpbiBVSS5cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEhhc0Vycm9ycyA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMuY2hlY2tGb3JFcnJvcnMoISFyZWMgJiYgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUpO1xuICAgIGlmIChmaXJlQ2FsbGJhY2spIHtcbiAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyh0aGlzLCBlcnJvcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAob2xkSGFzRXJyb3JzICE9IGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0aW9uIGVycm9ycyBjb3VudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudEVycm9yQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjaGFyL3N0cmluZyBmb3IgYSByZXF1aXJlZCBxdWVzdGlvbi5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5yZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgJiYgdGhpcy5pc1JlcXVpcmVkXG4gICAgICA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dFxuICAgICAgOiBcIlwiO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgZXJyb3IgaW50byB0aGUgcXVlc3Rpb24gZXJyb3IgbGlzdC5cbiAgICogQHBhcmFtIGVycm9yXG4gICAqL1xuICBwdWJsaWMgYWRkRXJyb3IoZXJyb3I6IFN1cnZleUVycm9yIHwgc3RyaW5nKSB7XG4gICAgaWYgKCFlcnJvcikgcmV0dXJuO1xuICAgIGxldCBuZXdFcnJvcjogU3VydmV5RXJyb3IgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIgfHwgZXJyb3IgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIG5ld0Vycm9yID0gbmV3IEN1c3RvbUVycm9yKDxzdHJpbmc+ZXJyb3IsIHRoaXMuc3VydmV5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RXJyb3IgPSA8U3VydmV5RXJyb3I+ZXJyb3I7XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3RXJyb3IpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBwYXJ0aWN1bGFyIGVycm9yIGZyb20gdGhlIHF1ZXN0aW9uIGVycm9yIGxpc3QuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKi9cbiAgcHVibGljIHJlbW92ZUVycm9yKGVycm9yOiBTdXJ2ZXlFcnJvcikge1xuICAgIHZhciBlcnJvcnMgPSB0aGlzLmVycm9ycztcbiAgICB2YXIgaW5kZXggPSBlcnJvcnMuaW5kZXhPZihlcnJvcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgZXJyb3JzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0ZvckVycm9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcUVycm9ycyA9IG5ldyBBcnJheTxTdXJ2ZXlFcnJvcj4oKTtcbiAgICBpZiAodGhpcy5pc1Zpc2libGUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgdGhpcy5jb2xsZWN0RXJyb3JzKHFFcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIH1cbiAgICByZXR1cm4gcUVycm9ycztcbiAgfVxuICBwcml2YXRlIGNvbGxlY3RFcnJvcnMoXG4gICAgcUVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgdGhpcy5vbkNoZWNrRm9yRXJyb3JzKHFFcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmIChxRXJyb3JzLmxlbmd0aCA+IDAgfHwgIXRoaXMuY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkKSkgcmV0dXJuO1xuICAgIHZhciBlcnJvcnMgPSB0aGlzLnJ1blZhbGlkYXRvcnMoKTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vdmFsaWRhdG9ycyBtYXkgY2hhbmdlIHRoZSBxdWVzdGlvbiB2YWx1ZS5cbiAgICAgIHFFcnJvcnMubGVuZ3RoID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHFFcnJvcnMucHVzaChlcnJvcnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgcUVycm9ycy5sZW5ndGggPT0gMCkge1xuICAgICAgdmFyIGVycm9yID0gdGhpcy5maXJlU3VydmV5VmFsaWRhdGlvbigpO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHFFcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SdW5WYWxpZGF0b3JzKGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGZpcmVTdXJ2ZXlWYWxpZGF0aW9uKCk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy52YWxpZGF0ZVZhbHVlQ2FsbGJhY2spIHJldHVybiB0aGlzLnZhbGlkYXRlVmFsdWVDYWxsYmFjaygpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnZhbGlkYXRlUXVlc3Rpb24odGhpcykgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKCFpc09uVmFsdWVDaGFuZ2VkICYmIHRoaXMuaGFzUmVxdWlyZWRFcnJvcigpKSB7XG4gICAgICBlcnJvcnMucHVzaChuZXcgQW5zd2VyUmVxdWlyZWRFcnJvcih0aGlzLnJlcXVpcmVkRXJyb3JUZXh0LCB0aGlzKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBoYXNSZXF1aXJlZEVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy5pc0VtcHR5KCk7XG4gIH1cbiAgcHJpdmF0ZSB2YWxpZGF0b3JSdW5uZXI6IFZhbGlkYXRvclJ1bm5lcjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWUgPSBmYWxzZTtcbiAgcHVibGljIG9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkO1xuICBwdWJsaWMgZ2V0IGlzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuVmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIGlmICghIXRoaXMudmFsaWRhdG9yUnVubmVyKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvclJ1bm5lci5vbkFzeW5jQ29tcGxldGVkID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0b3JSdW5uZXIgPSBuZXcgVmFsaWRhdG9yUnVubmVyKCk7XG4gICAgdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMudmFsaWRhdG9yUnVubmVyLm9uQXN5bmNDb21wbGV0ZWQgPSAoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pID0+IHtcbiAgICAgIHRoaXMuZG9PbkFzeW5jQ29tcGxldGVkKGVycm9ycyk7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JSdW5uZXIucnVuKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZG9PbkFzeW5jQ29tcGxldGVkKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3JzW2ldKTtcbiAgICB9XG4gICAgdGhpcy5pc1J1bm5pbmdWYWxpZGF0b3JzVmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpIHtcbiAgICBpZiAoISF0aGlzLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzICYmICF0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHtcbiAgICAgIHRoaXMub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnModGhpcy5nZXRBbGxFcnJvcnMoKS5sZW5ndGggPiAwKTtcbiAgICAgIHRoaXMub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB2YXIgb2xkQW5zd2VyZWQgPSB0aGlzLmlzQW5zd2VyZWQ7XG4gICAgdGhpcy5zZXROZXdWYWx1ZUluRGF0YShuZXdWYWx1ZSk7XG4gICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCAmJiB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMuaXNBbnN3ZXJlZCAhPSBvbGRBbnN3ZXJlZCkge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBsb2NOb3RpZmljYXRpb25JbkRhdGEgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzVGV4dFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VydmV5SW5wdXRUZXh0VXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZyA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZ2V0RGF0YUxvY05vdGlmaWNhdGlvbigpOiBhbnkge1xuICAgIGlmICh0aGlzLmxvY05vdGlmaWNhdGlvbkluRGF0YSkgcmV0dXJuIHRoaXMubG9jTm90aWZpY2F0aW9uSW5EYXRhO1xuICAgIHJldHVybiB0aGlzLmlzSW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRUZXh0VXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlICYmIHRoaXMuaXNUZXh0VmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWVJbkRhdGEobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZVRvRGF0YShuZXdWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVDaGFuZ2VkSW5TdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmRhdGEuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmdldERhdGFMb2NOb3RpZmljYXRpb24oKSxcbiAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBzZXROZXdDb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYXRhLnNldENvbW1lbnQoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmlzU3VydmV5SW5wdXRUZXh0VXBkYXRlID8gXCJ0ZXh0XCIgOiBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLy9JUXVlc3Rpb25cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZSh0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpKTtcbiAgfVxuICB1cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICB0aGlzLnF1ZXN0aW9uQ29tbWVudCA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5xdWVzdGlvblZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCAmJlxuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy52YWx1ZUNoYW5nZWRDYWxsYmFjayk7XG4gICAgaWYgKHVwZGF0ZUlzQW5zd2VyZWQpIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSB8fCAhdGhpcy5oYXNUaXRsZSB8fCB0aGlzLmhpZGVOdW1iZXIpIHtcbiAgICAgIHZhbCA9IC0xO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgICByZXR1cm4gdmFsIDwgMCA/IDAgOiAxO1xuICB9XG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgcXVlc3Rpb24sIHRoYXQgZW5kLXVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBlbnRlci5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdHMgaW4gYSByYWRpZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge31cbiAgcHVibGljIGNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpIHt9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgYWxsIGVycm9ycyBpbiB0aGUgcXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjbGVhclVudXNlZFZhbHVlcygpIHt9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge31cbiAgLy9JTG9jYWxpemFibGVPd25lclxuICBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIgPSBudWxsO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgbG9jYWxlXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/ICg8SUxvY2FsaXphYmxlT3duZXI+KDxhbnk+dGhpcy5zdXJ2ZXkpKS5nZXRMb2NhbGUoKVxuICAgICAgOiB0aGlzLmxvY093bmVyXG4gICAgICA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKClcbiAgICAgIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5XG4gICAgICA/IHRoaXMuc3VydmV5LmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0KVxuICAgICAgOiB0aGlzLmxvY093bmVyXG4gICAgICA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0UHJvY2Vzc29yKVxuICAgICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dCh0ZXh0LCB0aGlzLnVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKTtcbiAgICBpZiAodGhpcy5sb2NPd25lcikgcmV0dXJuIHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICAvL0lTdXJ2ZXlFcnJvck93bmVyXG4gIGdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvcik6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5nZXRFcnJvckN1c3RvbVRleHQodGV4dCwgZXJyb3IpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0QWxsVmFsdWVzKCkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge31cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJxdWVzdGlvblwiLCBbXG4gIFwiIW5hbWVcIixcbiAgeyBuYW1lOiBcInZpc2libGU6c3dpdGNoXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSwgbGF5b3V0OiBcInJvd1wiIH0sXG4gIFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICB7IG5hbWU6IFwid2lkdGhcIiB9LFxuICB7IG5hbWU6IFwibWluV2lkdGhcIiwgZGVmYXVsdDogc2V0dGluZ3MubWluV2lkdGggfSxcbiAgeyBuYW1lOiBcIm1heFdpZHRoXCIsIGRlZmF1bHQ6IHNldHRpbmdzLm1heFdpZHRoIH0sXG4gIHsgbmFtZTogXCJzdGFydFdpdGhOZXdMaW5lOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSwgbGF5b3V0OiBcInJvd1wiIH0sXG4gIHsgbmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXSwgbGF5b3V0OiBcInJvd1wiIH0sXG4gIHtcbiAgICBuYW1lOiBcInBhZ2VcIixcbiAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5wYWdlcy5sZW5ndGggPiAxO1xuICAgIH0sXG4gICAgY2hvaWNlczogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICB2YXIgc3VydmV5ID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICByZXR1cm4gc3VydmV5XG4gICAgICAgID8gc3VydmV5LnBhZ2VzLm1hcCgocDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcC5uYW1lLCB0ZXh0OiBwLnRpdGxlIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcbiAgICB9LFxuICB9LFxuICB7IG5hbWU6IFwidGl0bGU6dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gIHtcbiAgICBuYW1lOiBcInRpdGxlTG9jYXRpb25cIixcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcImhpZGRlblwiXSxcbiAgICBsYXlvdXQ6IFwicm93XCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImRlc2NyaXB0aW9uOnRleHRcIixcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIixcbiAgICBsYXlvdXQ6IFwicm93XCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImRlc2NyaXB0aW9uTG9jYXRpb25cIixcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidW5kZXJJbnB1dFwiLCBcInVuZGVyVGl0bGVcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImhpZGVOdW1iZXI6Ym9vbGVhblwiLFxuICAgIGRlcGVuZHNPbjogXCJ0aXRsZUxvY2F0aW9uXCIsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCg8UXVlc3Rpb24+b2JqKS50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJlbnQ6IFBhbmVsTW9kZWwgPSBvYmogPyBvYmoucGFyZW50IDogbnVsbDtcbiAgICAgIHZhciBudW1iZXJpbmdBbGxvd2VkQnlQYXJlbnQgPVxuICAgICAgICAhcGFyZW50IHx8IHBhcmVudC5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiO1xuICAgICAgaWYgKCFudW1iZXJpbmdBbGxvd2VkQnlQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHN1cnZleTogU3VydmV5TW9kZWwgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFzdXJ2ZXkgfHxcbiAgICAgICAgc3VydmV5LnNob3dRdWVzdGlvbk51bWJlcnMgIT09IFwib2ZmXCIgfHxcbiAgICAgICAgKCEhcGFyZW50ICYmIHBhcmVudC5zaG93UXVlc3Rpb25OdW1iZXJzID09PSBcIm9ucGFuZWxcIilcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAgXCJ2YWx1ZU5hbWVcIixcbiAgXCJlbmFibGVJZjpjb25kaXRpb25cIixcbiAgXCJkZWZhdWx0VmFsdWU6dmFsdWVcIixcbiAgXCJjb3JyZWN0QW5zd2VyOnZhbHVlXCIsXG4gIFwiaXNSZXF1aXJlZDpzd2l0Y2hcIixcbiAgXCJyZXF1aXJlZElmOmNvbmRpdGlvblwiLFxuICB7XG4gICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gIH0sXG4gIFwicmVhZE9ubHk6c3dpdGNoXCIsXG4gIHtcbiAgICBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLFxuICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgY2xhc3NOYW1lUGFydDogXCJ2YWxpZGF0b3JcIixcbiAgfSxcbl0pO1xuU2VyaWFsaXplci5hZGRBbHRlck5hdGl2ZUNsYXNzTmFtZShcInF1ZXN0aW9uXCIsIFwicXVlc3Rpb25iYXNlXCIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uLnRzIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5cbmltcG9ydCB7IE9wZXJhbmQsIEZ1bmN0aW9uT3BlcmFuZCB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBDb25kaXRpb25zUGFyc2VyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1BhcnNlclwiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lckJhc2Uge1xuICBwcml2YXRlIGV4cHJlc3Npb25WYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG9wZXJhbmQ6IE9wZXJhbmQ7XG4gIHByaXZhdGUgcHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBDb25kaXRpb25zUGFyc2VyKCk7XG4gIHByaXZhdGUgaXNBc3luY1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzRnVuY3Rpb25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFzeW5jRnVuY0xpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZykge1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmV4cHJlc3Npb24gPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5leHByZXNzaW9uVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9wZXJhbmQgPSB0aGlzLnBhcnNlci5wYXJzZUV4cHJlc3Npb24odmFsdWUpO1xuICAgIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZSA9IHRoaXMuY2FuUnVuKCkgPyB0aGlzLm9wZXJhbmQuaGFzRnVuY3Rpb24oKSA6IGZhbHNlO1xuICAgIHRoaXMuaXNBc3luY1ZhbHVlID0gdGhpcy5oYXNGdW5jdGlvbigpXG4gICAgICA/IHRoaXMub3BlcmFuZC5oYXNBc3luY0Z1bmN0aW9uKClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFyaWFibGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gW107XG5cbiAgICB2YXIgdmFyaWFibGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRnVuY3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXN5bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3luY1ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNhblJ1bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm9wZXJhbmQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuQ29yZShcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5vcGVyYW5kKSByZXR1cm4gbnVsbDtcblxuICAgIHRoaXMucHJvY2Vzc1ZhbHVlLnZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLnByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBpZiAoIXRoaXMuaXNBc3luYykgcmV0dXJuIHRoaXMucnVuVmFsdWVzKCk7XG4gICAgdGhpcy5hc3luY0Z1bmNMaXN0ID0gW107XG4gICAgdGhpcy5vcGVyYW5kLmFkZFRvQXN5bmNMaXN0KHRoaXMuYXN5bmNGdW5jTGlzdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jRnVuY0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYXN5bmNGdW5jTGlzdFtpXS5vbkFzeW5jUmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZG9Bc3luY0Z1bmN0aW9uUmVhZHkoKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0uZXZhbHVhdGVBc3luYyh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvQXN5bmNGdW5jdGlvblJlYWR5KCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuYXN5bmNGdW5jTGlzdFtpXS5pc1JlYWR5KSByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucnVuVmFsdWVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBydW5WYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5vcGVyYW5kLmV2YWx1YXRlKHRoaXMucHJvY2Vzc1ZhbHVlKTtcbiAgICB0aGlzLmRvT25Db21wbGV0ZShyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVuQ29yZSh2YWx1ZXMsIHByb3BlcnRpZXMpID09IHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge1xuICAgIGlmICghIXRoaXMub25SdW5Db21wbGV0ZSkgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyA9PSB0cnVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblJ1bm5lciBleHRlbmRzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHVibGljIG9uUnVuQ29tcGxldGU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZDtcbiAgcHVibGljIHJ1bih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJ1bkNvcmUodmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9PbkNvbXBsZXRlKHJlczogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5vblJ1bkNvbXBsZXRlKSB0aGlzLm9uUnVuQ29tcGxldGUocmVzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbmRpdGlvbnMudHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IsIElTdXJ2ZXlFcnJvck93bmVyIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW9uZWFuc3dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVxdWlyZWRFcnJvckluUGFuZWxcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBSZXF1cmVOdW1lcmljRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmcgPSBudWxsLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVxdWlyZW51bWVyaWNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm51bWVyaWNFcnJvclwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEV4Y2VlZFNpemVFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICAgIHRoaXMubG9jVGV4dC50ZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4Y2VlZHNpemVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiZXhjZWVkTWF4U2l6ZVwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZ2V0VGV4dFNpemUoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZXh0U2l6ZSgpIHtcbiAgICB2YXIgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIHZhciBmaXhlZCA9IFswLCAwLCAyLCAzLCAzXTtcbiAgICBpZiAodGhpcy5tYXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gXCIwIEJ5dGVcIjtcbiAgICB9XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHRoaXMubWF4U2l6ZSkgLyBNYXRoLmxvZygxMDI0KSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5tYXhTaXplIC8gTWF0aC5wb3coMTAyNCwgaSk7XG4gICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoZml4ZWRbaV0pICsgXCIgXCIgKyBzaXplc1tpXTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3RFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXR1czogc3RyaW5nLFxuICAgIHB1YmxpYyByZXNwb25zZTogc3RyaW5nLFxuICAgIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihudWxsLCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwid2VicmVxdWVzdFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJ1cmxSZXF1ZXN0RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLnN0YXR1cywgdGhpcy5yZXNwb25zZSk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBXZWJSZXF1ZXN0RW1wdHlFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIndlYnJlcXVlc3RlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXJsR2V0Q2hvaWNlc0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgT3RoZXJFbXB0eUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwib3RoZXJlbXB0eVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJSZXF1aXJlZEVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgVXBsb2FkaW5nRmlsZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidXBsb2FkaW5nZmlsZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlZGluYWxscm93c2Vycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEluQWxsUm93c0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgTWluUm93Q291bnRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1pblJvd0NvdW50OiBudW1iZXIsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtaW5yb3djb3VudGVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcIm1pblJvd0NvdW50RXJyb3JcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pblJvd0NvdW50KTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEtleUR1cGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJrZXlkdXBsaWNhdGlvbmVycm9yXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQ3VzdG9tRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Vycm9yLnRzIiwiZXhwb3J0IHZhciBzdXJ2ZXlDc3M6IGFueSA9IHtcbiAgY3VycmVudFR5cGU6IFwiXCIsXG4gIGdldENzczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRUeXBlID8gdGhpc1t0aGlzLmN1cnJlbnRUeXBlXSA6IGRlZmF1bHRTdGFuZGFyZENzcztcbiAgICBpZiAoIWxvYykgbG9jID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xuICAgIHJldHVybiBsb2M7XG4gIH0sXG59O1xuXG5leHBvcnQgdmFyIGRlZmF1bHRTdGFuZGFyZENzcyA9IHtcbiAgcm9vdDogXCJzdl9tYWluIHN2X2RlZmF1bHRfY3NzXCIsXG4gIGNvbnRhaW5lcjogXCJzdl9jb250YWluZXJcIixcbiAgaGVhZGVyOiBcInN2X2hlYWRlclwiLFxuICBib2R5OiBcInN2X2JvZHlcIixcbiAgYm9keUVtcHR5OiBcInN2X2JvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwic3ZfbmF2XCIsXG4gIHRpdGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgbG9nbzogXCJzdl9sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzdl9sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInN2X2hlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcInN2X2NvbXBsZXRlZF9wYWdlXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJzdl9jb21wbGV0ZV9idG5cIixcbiAgICBwcmV2OiBcInN2X3ByZXZfYnRuXCIsXG4gICAgbmV4dDogXCJzdl9uZXh0X2J0blwiLFxuICAgIHN0YXJ0OiBcInN2X3N0YXJ0X2J0blwiLFxuICAgIHByZXZpZXc6IFwic3ZfcHJldmlld19idG5cIixcbiAgICBlZGl0OiBcInN2X2VkaXRfYnRuXCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInN2X3Byb2dyZXNzXCIsXG4gIHByb2dyZXNzQmFyOiBcInN2X3Byb2dyZXNzX2JhclwiLFxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcbiAgcGFnZToge1xuICAgIHJvb3Q6IFwic3ZfcF9yb290XCIsXG4gICAgdGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICB9LFxuICAvLyBUT0RPOiBtb3ZlIHRvIHRoZSBwYWdlIG9iamVjdFxuICBwYWdlVGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwiXCIsXG4gIHJvdzogXCJzdl9yb3dcIixcbiAgcXVlc3Rpb246IHtcbiAgICBtYWluUm9vdDogXCJzdl9xIHN2X3FzdG5cIixcbiAgICBmbG93Um9vdDogXCJzdl9xX2Zsb3cgc3ZfcXN0blwiLFxuICAgIGhlYWRlcjogXCJcIixcbiAgICBoZWFkZXJMZWZ0OiBcInRpdGxlLWxlZnRcIixcbiAgICBjb250ZW50OiBcIlwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxuICAgIHRpdGxlTGVmdFJvb3Q6IFwic3ZfcXN0bl9sZWZ0XCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInN2X3FfcmVxdWlyZWRfdGV4dFwiLFxuICAgIHRpdGxlOiBcInN2X3FfdGl0bGVcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzdl9xX2Rlc2NyaXB0aW9uXCIsXG4gICAgY29tbWVudDogXCJcIixcbiAgICByZXF1aXJlZDogXCJcIixcbiAgICB0aXRsZVJlcXVpcmVkOiBcIlwiLFxuICAgIGhhc0Vycm9yOiBcIlwiLFxuICAgIGluZGVudDogMjAsXG4gICAgZm9vdGVyOiBcInN2X3FfZm9vdGVyXCIsXG4gICAgZm9ybUdyb3VwOiBcImZvcm0tZ3JvdXBcIixcbiAgICBhc0NlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcbiAgfSxcbiAgcGFuZWw6IHtcbiAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICByb290OiBcInN2X3FfZXJib3hcIixcbiAgICBpY29uOiBcIlwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWJsblwiLFxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxuICAgIGNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzdi1ib29sZWFuLS1jaGVja2VkIGNoZWNrZWRcIixcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJvb2xlYW4tLWRpc2FibGVkXCIsXG4gICAgc3dpdGNoOiBcInN2LWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xY2J4XCIsXG4gICAgaXRlbTogXCJzdl9xX2NoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdl9xX2NoZWNrYm94X2xhYmVsXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9pdGVtXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBjb250cm9sTGFiZWw6IFwic3ZfcV9jaGVja2JveF9jb250cm9sX2xhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcbiAgICBvdGhlcjogXCJzdl9xX290aGVyIHN2X3FfY2hlY2tib3hfb3RoZXJcIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcInN2X3FfZHJvcGRvd25fY29udHJvbFwiLFxuICAgIHNlbGVjdFdyYXBwZXI6IFwic3Zfc2VsZWN0X3dyYXBwZXJcIixcbiAgICBvdGhlcjogXCJzdl9xX2RkX290aGVyXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInN2X3FfbWF0cml4XCIsXG4gICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWRcIixcbiAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcbiAgfSxcbiAgbWF0cml4ZHJvcGRvd246IHsgcm9vdDogXCJzdl9xX21hdHJpeF9kcm9wZG93blwiLCBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHluYW1pY1wiLFxuICAgIGJ1dHRvbjogXCJzdl9tYXRyaXhfZHluYW1pY19idXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwic3ZfcGFuZWxfZHluYW1pY1wiLFxuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICBidXR0b246IFwiXCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICBidXR0b25QcmV2OiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIixcbiAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzOiBcInN2LXByb2dyZXNzXCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwic3YtcHJvZ3Jlc3NfX2JhclwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJzdl9xX210XCIsXG4gICAgaXRlbVRpdGxlOiBcInN2X3FfbXRfdGl0bGVcIixcbiAgICByb3c6IFwic3ZfcV9tdF9yb3dcIixcbiAgICBpdGVtVmFsdWU6IFwic3ZfcV9tdF9pdGVtX3ZhbHVlIHN2X3FfdGV4dF9yb290XCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcInN2X3FjYmNcIixcbiAgICBpdGVtOiBcInN2X3FfcmFkaW9ncm91cFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGxhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX3JhZGlvZ3JvdXBfY29udHJvbF9pdGVtXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxuICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9yYWRpb2dyb3VwX290aGVyXCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBsYWJlbDogXCJzdl9xX2ltZ3NlbF9sYWJlbFwiLFxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfaW1nc2VsX2NvbnRyb2xfaXRlbVwiLFxuICAgIGltYWdlOiBcInN2X3FfaW1nc2VsX2ltYWdlXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJzdl9xX3JhdGluZ1wiLFxuICAgIGl0ZW06IFwic3ZfcV9yYXRpbmdfaXRlbVwiLFxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXG4gICAgZGlzYWJsZWQ6IFwiXCIsXG4gIH0sXG4gIHRleHQ6IFwic3ZfcV90ZXh0X3Jvb3RcIixcbiAgZXhwcmVzc2lvbjogXCJcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIHByZXZpZXc6IFwic3ZfcV9maWxlX3ByZXZpZXdcIixcbiAgICByZW1vdmVCdXR0b246IFwic3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIixcbiAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtZmlsZV9fZGVjb3JhdG9yXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxuICAgIGNob29zZUZpbGU6IFwic3ZfcV9maWxlX2Nob29zZV9idXR0b25cIixcbiAgICBub0ZpbGVDaG9zZW46IFwic3ZfcV9maWxlX3BsYWNlaG9sZGVyXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcIlwiLFxuICAgIGVycm9yOiBcIlwiLFxuICAgIHN1Y2Nlc3M6IFwiXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxuICB9LFxuICB3aW5kb3c6IHtcbiAgICByb290OiBcInN2X3dpbmRvd1wiLFxuICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICBoZWFkZXI6IHtcbiAgICAgIHJvb3Q6IFwic3Zfd2luZG93X3RpdGxlXCIsXG4gICAgICB0aXRsZTogXCJcIixcbiAgICAgIGJ1dHRvbjogXCJcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcIlwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcIlwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5zdXJ2ZXlDc3NbXCJzdGFuZGFyZFwiXSA9IGRlZmF1bHRTdGFuZGFyZENzcztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkLnRzIiwiaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7XG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgU2VyaWFsaXplcixcbiAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24sXG59IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG4vKipcbiAqIEFycmF5IG9mIEl0ZW1WYWx1ZSBpcyB1c2VkIGluIGNoZWNrb3gsIGRyb3Bkb3duIGFuZCByYWRpb2dyb3VwIGNob2ljZXMsIG1hdHJpeCBjb2x1bW5zIGFuZCByb3dzLlxuICogSXQgaGFzIHR3byBtYWluIHByb3BlcnRpZXM6IHZhbHVlIGFuZCB0ZXh0LiBJZiB0ZXh0IGlzIGVtcHR5LCB2YWx1ZSBpcyB1c2VkIGZvciBkaXNwbGF5aW5nLlxuICogVGhlIHRleHQgcHJvcGVydHkgaXMgbG9jYWxpemFibGUgYW5kIHN1cHBvcnQgbWFya2Rvd24uXG4gKi9cbmV4cG9ydCBjbGFzcyBJdGVtVmFsdWUgZXh0ZW5kcyBCYXNlIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IFNlcGFyYXRvcigpIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuaXRlbVZhbHVlU2VwYXJhdG9yO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IFNlcGFyYXRvcih2YWw6IHN0cmluZykge1xuICAgIHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvciA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUFycmF5KGxvY093bmVyOiBJTG9jYWxpemFibGVPd25lcik6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBpdGVtczogQXJyYXk8SXRlbVZhbHVlPiA9IFtdO1xuICAgIEl0ZW1WYWx1ZS5zZXR1cEFycmF5KGl0ZW1zLCBsb2NPd25lcik7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0dXBBcnJheShcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXJcbiAgKSB7XG4gICAgaXRlbXMucHVzaCA9IGZ1bmN0aW9uICh2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnVuc2hpZnQgPSBmdW5jdGlvbiAodmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgdmFsdWUubG9jT3duZXIgPSBsb2NPd25lcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBpdGVtcy5zcGxpY2UgPSBmdW5jdGlvbiAoXG4gICAgICBzdGFydD86IG51bWJlcixcbiAgICAgIGRlbGV0ZUNvdW50PzogbnVtYmVyLFxuICAgICAgLi4uaXRlbXM6IEl0ZW1WYWx1ZVtdXG4gICAgKTogSXRlbVZhbHVlW10ge1xuICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGRlbGV0ZUNvdW50LFxuICAgICAgICAuLi5pdGVtc1xuICAgICAgKTtcbiAgICAgIGlmICghaXRlbXMpIGl0ZW1zID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZW1zW2ldLmxvY093bmVyID0gbG9jT3duZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXREYXRhKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCB2YWx1ZXM6IEFycmF5PGFueT4pIHtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICB2YXIgaXRlbTogSXRlbVZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaXRlbSA9IFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3ModmFsdWUuZ2V0VHlwZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBuZXcgSXRlbVZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgaXRlbS5zZXREYXRhKHZhbHVlKTtcbiAgICAgIGlmKCEhdmFsdWUub3JpZ2luYWxJdGVtKSB7XG4gICAgICAgIGl0ZW0ub3JpZ2luYWxJdGVtID0gdmFsdWUub3JpZ2luYWxJdGVtO1xuICAgICAgfVxuICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXREYXRhKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goaXRlbXNbaV0uZ2V0RGF0YSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldEl0ZW1CeVZhbHVlKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCB2YWw6IGFueSk6IEl0ZW1WYWx1ZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhpdGVtc1tpXS52YWx1ZSwgdmFsKSkgcmV0dXJuIGl0ZW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldFRleHRPckh0bWxCeVZhbHVlKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHZhbDogYW55XG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoaXRlbXMsIHZhbCk7XG4gICAgcmV0dXJuIGl0ZW0gIT09IG51bGwgPyBpdGVtLmxvY1RleHQudGV4dE9ySHRtbCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBsb2NTdHJzQ2hhbmdlZChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldLmxvY1RleHQuc3RyQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIHJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHJ1bm5lcjogQ29uZGl0aW9uUnVubmVyLFxuICAgIHZhbHVlczogYW55LFxuICAgIHByb3BlcnRpZXM6IGFueSxcbiAgICB1c2VJdGVtRXhwcmVzc2lvbjogYm9vbGVhbiA9IHRydWVcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5ydW5Db25kaXRpb25zRm9ySXRlbXNDb3JlKFxuICAgICAgaXRlbXMsXG4gICAgICBmaWx0ZXJlZEl0ZW1zLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRydWUsXG4gICAgICB1c2VJdGVtRXhwcmVzc2lvblxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBydW5FbmFibGVkQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHJ1bm5lcjogQ29uZGl0aW9uUnVubmVyLFxuICAgIHZhbHVlczogYW55LFxuICAgIHByb3BlcnRpZXM6IGFueVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgICBpdGVtcyxcbiAgICAgIG51bGwsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgZmlsdGVyZWRJdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgaXNWaXNpYmxlOiBib29sZWFuLFxuICAgIHVzZUl0ZW1FeHByZXNzaW9uOiBib29sZWFuID0gdHJ1ZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlcykge1xuICAgICAgdmFsdWVzID0ge307XG4gICAgfVxuICAgIHZhciBpdGVtVmFsdWUgPSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgIHZhciBjaG9pY2VWYWx1ZSA9IHZhbHVlc1tcImNob2ljZVwiXTtcbiAgICB2YXIgaGFzQ2hhbmRlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB2YWx1ZXNbXCJpdGVtXCJdID0gaXRlbS52YWx1ZTtcbiAgICAgIHZhbHVlc1tcImNob2ljZVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICB2YXIgaXRlbVJ1bm5lciA9XG4gICAgICAgIHVzZUl0ZW1FeHByZXNzaW9uICYmICEhaXRlbS5nZXRDb25kaXRpb25SdW5uZXJcbiAgICAgICAgICA/IGl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyKGlzVmlzaWJsZSlcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtUnVubmVyKSB7XG4gICAgICAgIGl0ZW1SdW5uZXIgPSBydW5uZXI7XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKGl0ZW1SdW5uZXIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpdGVtUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKCEhZmlsdGVyZWRJdGVtcyAmJiBuZXdWYWx1ZSkge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICB2YXIgb2xkVmFsdWUgPSBpc1Zpc2libGUgPyBpdGVtLmlzVmlzaWJsZSA6IGl0ZW0uaXNFbmFibGVkO1xuICAgICAgaWYgKG5ld1ZhbHVlICE9IG9sZFZhbHVlKSB7XG4gICAgICAgIGhhc0NoYW5kZWQgPSB0cnVlO1xuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgaWYgKCEhaXRlbS5zZXRJc1Zpc2libGUpIGl0ZW0uc2V0SXNWaXNpYmxlKG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoISFpdGVtLnNldElzRW5hYmxlZCkgaXRlbS5zZXRJc0VuYWJsZWQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdGVtVmFsdWUpIHtcbiAgICAgIHZhbHVlc1tcIml0ZW1cIl0gPSBpdGVtVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNbXCJpdGVtXCJdO1xuICAgIH1cbiAgICBpZiAoY2hvaWNlVmFsdWUpIHtcbiAgICAgIHZhbHVlc1tcImNob2ljZVwiXSA9IGNob2ljZVZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVzW1wiY2hvaWNlXCJdO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmRlZDtcbiAgfVxuICBwdWJsaWMgb3duZXJQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHByaXZhdGUgaXRlbVZhbHVlOiBhbnk7XG4gIHByaXZhdGUgbG9jVGV4dFZhbHVlOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHJpdmF0ZSBpc1Zpc2libGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgdmlzaWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGVuYWJsZUNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnksIHRleHQ6IHN0cmluZyA9IG51bGwsIHByaXZhdGUgdHlwZU5hbWUgPSBcIml0ZW12YWx1ZVwiKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyhudWxsLCB0cnVlKTtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9ICh0eHQpID0+IHtcbiAgICAgIHJldHVybiB0eHQgPyB0eHQgOiAhdGhpcy5pc1ZhbHVlSXRlbUVtcHR5ID8gdGhpcy52YWx1ZS50b1N0cmluZygpIDogbnVsbDtcbiAgICB9O1xuICAgIGlmICh0ZXh0KSB0aGlzLmxvY1RleHQudGV4dCA9IHRleHQ7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFR5cGUoKSAhPSBcIml0ZW12YWx1ZVwiKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcbiAgfVxuICBwdWJsaWMgb25DcmVhdGluZygpOiBhbnkgeyB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy50eXBlTmFtZSA/IHRoaXMudHlwZU5hbWUgOiBcIml0ZW12YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LmxvY2FsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHRWYWx1ZTtcbiAgfVxuICBzZXRMb2NUZXh0KGxvY1RleHQ6IExvY2FsaXphYmxlU3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBsb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jT3duZXIoKTogSUxvY2FsaXphYmxlT3duZXIge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQub3duZXI7XG4gIH1cbiAgcHVibGljIHNldCBsb2NPd25lcih2YWx1ZTogSUxvY2FsaXphYmxlT3duZXIpIHtcbiAgICB0aGlzLmxvY1RleHQub3duZXIgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuaXRlbVZhbHVlO1xuICAgIHRoaXMuaXRlbVZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInZhbHVlXCIsIG9sZFZhbHVlLCB0aGlzLml0ZW1WYWx1ZSk7XG4gICAgaWYgKCF0aGlzLml0ZW1WYWx1ZSkgcmV0dXJuO1xuICAgIHZhciBzdHI6IHN0cmluZyA9IHRoaXMuaXRlbVZhbHVlLnRvU3RyaW5nKCk7XG4gICAgdmFyIGluZGV4ID0gc3RyLmluZGV4T2Yoc2V0dGluZ3MuaXRlbVZhbHVlU2VwYXJhdG9yKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5pdGVtVmFsdWUgPSBzdHIuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgdGhpcy50ZXh0ID0gc3RyLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oYXNUZXh0KSB7XG4gICAgICB0aGlzLmxvY1RleHQub25DaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RleHQuY2FsY3VsYXRlZFRleHQ7IC8vVE9ETzogaXQgd2lsbCBiZSBjb3JyZWN0IHRvIHVzZSB0aGlzLmxvY1RleHQudGV4dCwgaG93ZXZlciBpdCB3b3VsZCByZXF1aXJlIGEgbG90IG9mIHJld3JpdGluZyBpbiBDcmVhdG9yXG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KG5ld1RleHQ6IHN0cmluZykge1xuICAgIGNvbnN0IG9sZFRleHQgPSB0aGlzLmxvY1RleHQudGV4dDtcbiAgICB0aGlzLmxvY1RleHQudGV4dCA9IG5ld1RleHQ7XG4gICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInRleHRcIiwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gIH1cbiAgcHVibGljIGdldCBjYWxjdWxhdGVkVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LmNhbGN1bGF0ZWRUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXREYXRhKCk6IGFueSB7XG4gICAgdmFyIGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgIGlmICghIWpzb25bXCJ2YWx1ZVwiXSAmJiAhIWpzb25bXCJ2YWx1ZVwiXVtcInBvc1wiXSkge1xuICAgICAgZGVsZXRlIGpzb25bXCJ2YWx1ZVwiXVtcInBvc1wiXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGpzb24pLmxlbmd0aCA9PSAxICYmICFIZWxwZXJzLmlzVmFsdWVFbXB0eShqc29uW1widmFsdWVcIl0pKVxuICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIHRvSlNPTigpOiBhbnkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgcHJvcGVydGllcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyh0aGlzLmdldFR5cGUoKSk7XG4gICAgaWYgKCFwcm9wZXJ0aWVzIHx8IHByb3BlcnRpZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHByb3BlcnRpZXMgPSBTZXJpYWxpemVyLmdldFByb3BlcnRpZXMoXCJpdGVtdmFsdWVcIik7XG4gICAgfVxuICAgIHZhciBqc29PYmogPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAganNvT2JqLnZhbHVlVG9Kc29uKHRoaXMsIHJlcywgcHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldERhdGEodmFsdWU6IGFueSkge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB2YXIganNvbiA9IHZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBqc29uID0gKDxCYXNlPnZhbHVlKS50b0pTT04oKTtcbiAgICAgIH1cbiAgICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgdGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldElzVmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVmlzaWJsZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldElzRW5hYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdmFyIGZ1bmNOYW1lID0gXCJpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWRcIjtcbiAgICBpZiAoIXRoaXMubG9jT3duZXIgfHwgISg8YW55PnRoaXMubG9jT3duZXIpW2Z1bmNOYW1lXSkgcmV0dXJuO1xuICAgICg8YW55PnRoaXMubG9jT3duZXIpW2Z1bmNOYW1lXSh0aGlzLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb25kaXRpb25SdW5uZXIoaXNWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzVmlzaWJsZSkgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUNvbmRpdGlvblJ1bm5lcigpO1xuICAgIHJldHVybiB0aGlzLmdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmlzaWJsZUNvbmRpdGlvblJ1bm5lcigpOiBDb25kaXRpb25SdW5uZXIge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XG4gICAgdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnZpc2libGVJZjtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyO1xuICB9XG4gIHByaXZhdGUgZ2V0RW5hYmxlQ29uZGl0aW9uUnVubmVyKCk6IENvbmRpdGlvblJ1bm5lciB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgfVxuICBwcml2YXRlIGdldCBpc1ZhbHVlSXRlbUVtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5pdGVtVmFsdWUgJiYgdGhpcy5pdGVtVmFsdWUgIT09IDAgJiYgdGhpcy5pdGVtVmFsdWUgIT09IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBvcmlnaW5hbEl0ZW06IGFueTtcbn1cblxuQmFzZS5jcmVhdGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoc291cmNlOiBhbnksIHR5cGU/OiBzdHJpbmcpOiBhbnkge1xuICB2YXIgaXRlbSA9IG51bGw7XG4gIGlmICghIXR5cGUpIHtcbiAgICBpdGVtID0gSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyh0eXBlLCB7fSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZS5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsLCB1bmRlZmluZWQsIHNvdXJjZS5nZXRUeXBlKCkpO1xuICB9IGVsc2Uge1xuICAgIGl0ZW0gPSBuZXcgSXRlbVZhbHVlKG51bGwpO1xuICB9XG4gIGl0ZW0uc2V0RGF0YShzb3VyY2UpO1xuICByZXR1cm4gaXRlbTtcbn07XG5CYXNlLml0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQgPSBmdW5jdGlvbiAoYXJyOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZChhcnIpO1xufTtcbkpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gKHZhbDogYW55KTogYW55IHtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gIEl0ZW1WYWx1ZS5zZXREYXRhKHJlcywgdmFsIHx8IFtdKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaXRlbXZhbHVlXCIsXG4gIFtcbiAgICBcInZhbHVlXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInZpc2libGVJZjpjb25kaXRpb25cIiwgc2hvd01vZGU6IFwiZm9ybVwiIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmOmNvbmRpdGlvblwiLCBzaG93TW9kZTogXCJmb3JtXCIgfSxcbiAgXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJdGVtVmFsdWUodmFsdWUpXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2l0ZW12YWx1ZS50cyIsImltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUNvcmUge1xuICBoYXNWYWx1ZTogYm9vbGVhbjtcbiAgdmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFByb2Nlc3NWYWx1ZSB7XG4gIHB1YmxpYyB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbDtcbiAgcHVibGljIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbDtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBwdWJsaWMgZ2V0Rmlyc3ROYW1lKHRleHQ6IHN0cmluZywgb2JqOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcbiAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuICAgIHZhciByZXMgPSBcIlwiO1xuICAgIGlmICghIW9iaikge1xuICAgICAgcmVzID0gdGhpcy5nZXRGaXJzdFByb3BlcnR5TmFtZSh0ZXh0LCBvYmopO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IHRleHRbaV07XG4gICAgICBpZiAoY2ggPT0gXCIuXCIgfHwgY2ggPT0gXCJbXCIpIGJyZWFrO1xuICAgICAgcmVzICs9IGNoO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBoYXNWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZXMpIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xuICAgIHJldHVybiByZXMuaGFzVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB2YXIgbm9uTmVzdGVkT2JqID0gdGhpcy5nZXROb25OZXN0ZWRPYmplY3Qob2JqLCB0ZXh0KTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuO1xuICAgIG9iaiA9IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICB0ZXh0ID0gbm9uTmVzdGVkT2JqLnRleHQ7XG4gICAgaWYgKCEhb2JqICYmICEhdGV4dCkge1xuICAgICAgb2JqW3RleHRdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlQ29yZSh0ZXh0OiBzdHJpbmcsIHZhbHVlczogYW55KTogYW55IHtcbiAgICB2YXIgcmVzOiBWYWx1ZUNvcmUgPSB7IGhhc1ZhbHVlOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcbiAgICB2YXIgY3VyVmFsdWUgPSB2YWx1ZXM7XG4gICAgaWYgKCFjdXJWYWx1ZSAmJiBjdXJWYWx1ZSAhPT0gMCAmJiBjdXJWYWx1ZSAhPT0gZmFsc2UpIHJldHVybiByZXM7XG4gICAgaWYgKFxuICAgICAgdGV4dCAmJlxuICAgICAgdGV4dC5sYXN0SW5kZXhPZihcIi5sZW5ndGhcIikgPiAtMSAmJlxuICAgICAgdGV4dC5sYXN0SW5kZXhPZihcIi5sZW5ndGhcIikgPT09IHRleHQubGVuZ3RoIC0gXCIubGVuZ3RoXCIubGVuZ3RoXG4gICAgKSB7XG4gICAgICByZXMudmFsdWUgPSAwO1xuICAgICAgcmVzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIG5vbk5lc3RlZE9iaiA9IHRoaXMuZ2V0Tm9uTmVzdGVkT2JqZWN0KGN1clZhbHVlLCB0ZXh0KTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuIHJlcztcbiAgICByZXMudmFsdWUgPSAhIW5vbk5lc3RlZE9iai50ZXh0XG4gICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUobm9uTmVzdGVkT2JqLnZhbHVlLCBub25OZXN0ZWRPYmoudGV4dClcbiAgICAgIDogbm9uTmVzdGVkT2JqLnZhbHVlO1xuICAgIHJlcy5oYXNWYWx1ZSA9ICFIZWxwZXJzLmlzVmFsdWVFbXB0eShyZXMudmFsdWUpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXROb25OZXN0ZWRPYmplY3Qob2JqOiBhbnksIHRleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIGN1ck5hbWUgPSB0aGlzLmdldEZpcnN0UHJvcGVydHlOYW1lKHRleHQsIG9iaik7XG4gICAgd2hpbGUgKHRleHQgIT0gY3VyTmFtZSAmJiAhIW9iaikge1xuICAgICAgdmFyIGlzQXJyYXkgPSB0ZXh0WzBdID09IFwiW1wiO1xuICAgICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICAgIGlmICghY3VyTmFtZSAmJiB0ZXh0ID09IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpKVxuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQgfTtcbiAgICAgICAgb2JqID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmosIGN1ck5hbWUpO1xuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkob2JqKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJOYW1lLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2JqSW5BcnJheSA9IHRoaXMuZ2V0T2JqSW5BcnJheShvYmosIHRleHQpO1xuICAgICAgICBpZiAoIW9iakluQXJyYXkpIHJldHVybiBudWxsO1xuICAgICAgICBvYmogPSBvYmpJbkFycmF5LnZhbHVlO1xuICAgICAgICB0ZXh0ID0gb2JqSW5BcnJheS50ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKCEhdGV4dCAmJiB0ZXh0WzBdID09IFwiLlwiKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cigxKTtcbiAgICAgIH1cbiAgICAgIGN1ck5hbWUgPSB0aGlzLmdldEZpcnN0UHJvcGVydHlOYW1lKHRleHQsIG9iaik7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQgfTtcbiAgfVxuICBwcml2YXRlIGdldE9iakluQXJyYXkoY3VyVmFsdWU6IGFueSwgdGV4dDogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VyVmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaW5kZXggPSAxO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoICYmIHRleHRbaW5kZXhdICE9IFwiXVwiKSB7XG4gICAgICBzdHIgKz0gdGV4dFtpbmRleF07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICB0ZXh0ID0gaW5kZXggPCB0ZXh0Lmxlbmd0aCA/IHRleHQuc3Vic3RyKGluZGV4ICsgMSkgOiBcIlwiO1xuICAgIGluZGV4ID0gdGhpcy5nZXRJbnRWYWx1ZShzdHIpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gY3VyVmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB2YWx1ZTogY3VyVmFsdWVbaW5kZXhdLCB0ZXh0OiB0ZXh0IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRGaXJzdFByb3BlcnR5TmFtZShuYW1lOiBzdHJpbmcsIG9iajogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuYW1lO1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobmFtZSkpIHJldHVybiBuYW1lO1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIEEgPSBuYW1lWzBdO1xuICAgIHZhciBhID0gQS50b1VwcGVyQ2FzZSgpO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciBmaXJzdCA9IGtleVswXTtcbiAgICAgIGlmIChmaXJzdCA9PT0gYSB8fCBmaXJzdCA9PT0gQSkge1xuICAgICAgICB2YXIga2V5TmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PSBuYW1lKSByZXR1cm4ga2V5O1xuICAgICAgICBpZiAobmFtZS5sZW5ndGggPD0ga2V5TmFtZS5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgY2ggPSBuYW1lW2tleU5hbWUubGVuZ3RoXTtcbiAgICAgICAgaWYgKGNoICE9IFwiLlwiICYmIGNoICE9IFwiW1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleU5hbWUgPT0gbmFtZS5zdWJzdHIoMCwga2V5TmFtZS5sZW5ndGgpKSByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldE9iamVjdFZhbHVlKG9iajogYW55LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgfVxuICBwcml2YXRlIGdldEludFZhbHVlKHN0cjogYW55KSB7XG4gICAgaWYgKHN0ciA9PSBcIjBcIiB8fCAoKHN0ciB8IDApID4gMCAmJiBzdHIgJSAxID09IDApKSByZXR1cm4gTnVtYmVyKHN0cik7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZGl0aW9uUHJvY2Vzc1ZhbHVlLnRzIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTG9jYWxpemFibGVPd25lciB7XG4gIGdldExvY2FsZSgpOiBzdHJpbmc7XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xufVxuLyoqXG4gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyB0aGUgc3RyaW5nIHRoYXQgc3VwcG9ydHMgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93bi5cbiAqIEl0IHVzZXMgaW4gYWxsIG9iamVjdHMgd2hlcmUgc3VwcG9ydCBmb3IgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93biBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsaXphYmxlU3RyaW5nIHtcbiAgcHVibGljIHN0YXRpYyBTZXJpYWxpemVBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIGdldCBkZWZhdWx0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGRlZmF1bHRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSA9IHZhbDtcbiAgfVxuICBwcml2YXRlIHZhbHVlcyA9IHt9O1xuICBwcml2YXRlIGh0bWxWYWx1ZXMgPSB7fTtcbiAgcHJpdmF0ZSByZW5kZXJlZFRleHQ6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY2FsY3VsYXRlZFRleHRWYWx1ZTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIG9uR2V0VGV4dENhbGxiYWNrOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBvblN0ckNoYW5nZWQ6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBzaGFyZWREYXRhOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG93bmVyOiBJTG9jYWxpemFibGVPd25lcixcbiAgICBwdWJsaWMgdXNlTWFya2Rvd246IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lciAmJiB0aGlzLm93bmVyLmdldExvY2FsZSA/IHRoaXMub3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzdHJDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHRoaXMuY2FsVGV4dCgpO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCAhPT0gdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGV4dCA9IG51bGw7XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHVyZVRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBjYWxjdWxhdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHRoaXMucmVuZGVyZWRUZXh0ID1cbiAgICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSAhPT0gbnVsbFxuICAgICAgICA/IHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZVxuICAgICAgICA6IHRoaXMuY2FsVGV4dCgpO1xuICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUZXh0O1xuICB9XG4gIHByaXZhdGUgY2FsVGV4dCgpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLnB1cmVUZXh0O1xuICAgIGlmIChcbiAgICAgIHJlcyAmJlxuICAgICAgdGhpcy5vd25lciAmJlxuICAgICAgdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0ICYmXG4gICAgICByZXMuaW5kZXhPZihcIntcIikgPiAtMVxuICAgICkge1xuICAgICAgcmVzID0gdGhpcy5vd25lci5nZXRQcm9jZXNzZWRUZXh0KHJlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uR2V0VGV4dENhbGxiYWNrKSByZXMgPSB0aGlzLm9uR2V0VGV4dENhbGxiYWNrKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHB1cmVUZXh0KCkge1xuICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWUobG9jKTtcbiAgICBpZiAoIXJlcyAmJiBsb2MgPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpIHtcbiAgICAgIHJlcyA9IHRoaXMuZ2V0VmFsdWUoc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGUpO1xuICAgIH1cbiAgICBpZiAoIXJlcyAmJiBsb2MgIT09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICByZXMgPSB0aGlzLmdldFZhbHVlKHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKTtcbiAgICB9XG4gICAgaWYgKCFyZXMpIHJlcyA9IFwiXCI7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0h0bWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSHRtbFZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGdldCBodG1sKCkge1xuICAgIGlmICghdGhpcy5oYXNIdG1sKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5nZXRIdG1sVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVzS2V5cygpLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dE9ySHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNIdG1sID8gdGhpcy5nZXRIdG1sVmFsdWUoKSA6IHRoaXMuY2FsY3VsYXRlZFRleHQ7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZEh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dE9ySHRtbDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxlVGV4dCh0aGlzLmxvY2FsZSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWUobG9jKTtcbiAgICByZXR1cm4gcmVzID8gcmVzIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQobG9jKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICBsb2MgJiZcbiAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXRoaXMuZ2V0VmFsdWUobG9jKSAmJlxuICAgICAgdmFsdWUgPT0gdGhpcy5nZXRMb2NhbGVUZXh0KHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgZGVsZXRlICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZShsb2MpKSB0aGlzLmRlbGV0ZVZhbHVlKGxvYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgICAgIHZhbHVlID09IHRoaXMuZ2V0TG9jYWxlVGV4dChzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGxvYywgbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICAgICAgICBpZiAobG9jID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBoYXNOb25EZWZhdWx0VGV4dCgpOiBib29sZWFuIHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMSB8fCBrZXlzWzBdICE9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRKc29uKCk7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKFxuICAgICAga2V5cy5sZW5ndGggPT0gMSAmJlxuICAgICAga2V5c1swXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXNldHRpbmdzLnNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3RcbiAgICApXG4gICAgICByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2tleXNbMF1dO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB7XG4gICAgICB0aGlzLnNoYXJlZERhdGEuc2V0SnNvbih2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgdGhpcy5odG1sVmFsdWVzID0ge307XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChudWxsLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldExvY2FsZVRleHQoa2V5LCB2YWx1ZVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGVxdWFscyhvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5lcXVhbHMob2JqKTtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLnZhbHVlcykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZXMsIG9iai52YWx1ZXMpO1xuICB9XG4gIHB1YmxpYyBvbkNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMub25TdHJDaGFuZ2VkKSB0aGlzLm9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJpdmF0ZSBoYXNIdG1sVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm93bmVyIHx8ICF0aGlzLnVzZU1hcmtkb3duKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlbmRlcmVkVGV4dCA9IHRoaXMuY2FsY3VsYXRlZFRleHQ7XG4gICAgaWYgKCFyZW5kZXJlZFRleHQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXSA9IHRoaXMub3duZXIuZ2V0TWFya2Rvd25IdG1sKHJlbmRlcmVkVGV4dCk7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldEh0bWxWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmxvY2FsZTtcbiAgICBpZiAoIWxvYykgbG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZVZhbHVlc0VxdWFsc1RvRGVmYXVsdChkZWZhdWx0VmFsdWU6IHN0cmluZykge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoa2V5c1tpXSA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkgY29udGludWU7XG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZShrZXlzW2ldKSA9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZWxldGVWYWx1ZShrZXlzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZShsb2M6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmdldFZhbHVlKGxvYyk7XG4gICAgcmV0dXJuICg8YW55PnRoaXMpLnZhbHVlc1tsb2NdO1xuICB9XG4gIHByaXZhdGUgc2V0VmFsdWUobG9jOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHRoaXMuc2hhcmVkRGF0YS5zZXRWYWx1ZShsb2MsIHZhbHVlKTtcbiAgICBlbHNlICg8YW55PnRoaXMpLnZhbHVlc1tsb2NdID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBkZWxldGVWYWx1ZShsb2M6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgdGhpcy5zaGFyZWREYXRhLmRlbGV0ZVZhbHVlKGxvYyk7XG4gICAgZWxzZSBkZWxldGUgKDxhbnk+dGhpcykudmFsdWVzW2xvY107XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0VmFsdWVzS2V5cygpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YWJsZXN0cmluZy50cyIsImltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi4vc3VydmV5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlXaW5kb3dcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuLi9wYWdlXCI7XG5pbXBvcnQgeyBJUXVlc3Rpb24sIElFbGVtZW50IH0gZnJvbSBcIi4uL2Jhc2VcIjtcbmltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG5cbmV4cG9ydCBjbGFzcyBWdWVTdXJ2ZXlNb2RlbCBleHRlbmRzIFN1cnZleU1vZGVsIHtcbiAgcHVibGljIHN0YXRpYyB1cGRhdGVQcm9wZXJ0aWVzSGFzaChvYmo6IGFueSkge1xuICAgIG9iai5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSBmdW5jdGlvbihcbiAgICAgIHByb3BlcnRpZXNIYXNoOiBhbnksXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkge1xuICAgICAgVnVlLnNldChwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgICB9O1xuICB9XG4gIHJlbmRlckNhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnJlbmRlckNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnJlbmRlckNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWRpbmdTdXJ2ZXlGcm9tU2VydmljZSgpIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5nZXRDc3MoKTtcbiAgfVxuICBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIHNldERhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIFZ1ZS5zZXQodmFsdWVzSGFzaCwga2V5LCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZURhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIFZ1ZS5kZWxldGUodmFsdWVzSGFzaCwga2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgVnVlLnNldChwcm9wZXJ0aWVzSGFzaCwgbmFtZSwgdmFsKTtcbiAgfVxuICBxdWVzdGlvbkFkZGVkKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYXJlbnRQYW5lbDogYW55LFxuICAgIHJvb3RQYW5lbDogYW55XG4gICkge1xuICAgIFZ1ZVN1cnZleU1vZGVsLnVwZGF0ZVByb3BlcnRpZXNIYXNoKHF1ZXN0aW9uKTtcbiAgICBzdXBlci5xdWVzdGlvbkFkZGVkKHF1ZXN0aW9uLCBpbmRleCwgcGFyZW50UGFuZWwsIHJvb3RQYW5lbCk7XG4gIH1cbiAgbWF0cml4Q2VsbENyZWF0ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgVnVlU3VydmV5TW9kZWwudXBkYXRlUHJvcGVydGllc0hhc2gob3B0aW9ucy5jZWxsUXVlc3Rpb24pO1xuICAgIHN1cGVyLm1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9PblBhZ2VBZGRlZChwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBWdWVTdXJ2ZXlNb2RlbC51cGRhdGVQcm9wZXJ0aWVzSGFzaChwYWdlKTtcbiAgICBzdXBlci5kb09uUGFnZUFkZGVkKHBhZ2UpO1xuICB9XG4gIHB1YmxpYyBkb0FmdGVyUmVuZGVyU3VydmV5KGVsOiBhbnkpIHtcbiAgICB0aGlzLmFmdGVyUmVuZGVyU3VydmV5KGVsKTtcbiAgfVxuICBwdWJsaWMgZG9BZnRlclJlbmRlckhlYWRlcihlbDogYW55KSB7XG4gICAgdGhpcy5hZnRlclJlbmRlckhlYWRlcihlbCk7XG4gIH1cbiAgcGFuZWxBZGRlZChwYW5lbDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIsIHBhcmVudFBhbmVsOiBhbnksIHJvb3RQYW5lbDogYW55KSB7XG4gICAgVnVlU3VydmV5TW9kZWwudXBkYXRlUHJvcGVydGllc0hhc2gocGFuZWwpO1xuICAgIHN1cGVyLnBhbmVsQWRkZWQocGFuZWwsIGluZGV4LCBwYXJlbnRQYW5lbCwgcm9vdFBhbmVsKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVnVlU3VydmV5V2luZG93TW9kZWwgZXh0ZW5kcyBTdXJ2ZXlXaW5kb3dNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSwgaW5pdGlhbE1vZGVsOiBTdXJ2ZXlNb2RlbCA9IG51bGwpIHtcbiAgICBzdXBlcihqc29uT2JqLCBpbml0aWFsTW9kZWwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiBuZXcgVnVlU3VydmV5TW9kZWwoanNvbk9iaik7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInZ1ZVwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Z1ZS9zdXJ2ZXlNb2RlbC50cyIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlFcnJvciwgSVN1cnZleUltcGwgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IE90aGVyRW1wdHlFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBDaG9pY2VzUmVzdGZ1bGwgfSBmcm9tIFwiLi9jaG9pY2VzUmVzdGZ1bGxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBJdCBpcyBhIGJhc2UgY2xhc3MgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHB1YmxpYyB2aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmaWx0ZXJlZENob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPiA9IG51bGw7XG4gIHByaXZhdGUgY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lcjogQ29uZGl0aW9uUnVubmVyO1xuICBwcml2YXRlIGNvbW1lbnRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIHByZXZDb21tZW50VmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBvdGhlckl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm90aGVyXCIpO1xuICBwcml2YXRlIGNob2ljZXNGcm9tVXJsOiBBcnJheTxJdGVtVmFsdWU+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGlzQ2hvaWNlc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGVuYWJsZU9uTG9hZGluZ0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGZpbGwgdGhlIGNob2ljZXMgZnJvbSBhIHJlc3RmdWwgc2VydmljZS5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgY2hvaWNlc0J5VXJsOiBDaG9pY2VzUmVzdGZ1bGw7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJjaG9pY2VzXCIpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjaG9pY2VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc2VsZi5maWx0ZXJJdGVtcygpKSB7XG4gICAgICAgIHNlbGYub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJoaWRlSWZDaG9pY2VzRW1wdHlcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2aXNpYmxlQ2hvaWNlc1wiKTtcbiAgICB0aGlzLmNob2ljZXNCeVVybCA9IHRoaXMuY3JlYXRlUmVzdGZ1bGwoKTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5vd25lciA9IHRoaXM7XG4gICAgdmFyIGxvY090aGVyVGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyRXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMub3RoZXJJdGVtVmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIHRoaXMub3RoZXJJdGVtVmFsdWUuc2V0TG9jVGV4dChsb2NPdGhlclRleHQpO1xuICAgIGxvY090aGVyVGV4dC5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYub25CZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICAgIHNlbGYub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwudXBkYXRlUmVzdWx0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gICAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICAgIHNlcnZlclJlc3VsdDogYW55XG4gICAgKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgICBpZiAoc2VsZi5zdXJ2ZXkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuc3VydmV5LnVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKHNlbGYsIGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyUGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzZWxlY3RiYXNlXCI7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCAhIXRoaXMuY29tbWVudDtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG90aGVyIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgdXNlciBzZWxlY3QgdGhlICdvdGhlcicgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNPdGhlclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc090aGVyICYmIHRoaXMuZ2V0SGFzT3RoZXIodGhpcy5yZW5kZXJlZFZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSXQgcnVucyBhZ2FpbnN0IGVhY2ggY2hvaWNlcyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyB2aXNpYmxlIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGludmlzaWJsZS4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqIEBzZWUgY2hvaWNlc0VuYWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXNWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjaG9pY2VzIGl0ZW0gYW5kIGlmIGZvciB0aGlzIGl0ZW0gaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSBpdGVtIGlzIGVuYWJsZWQgb3RoZXJ3aXNlIHRoZSBpdGVtIGJlY29tZXMgZGlzYWJsZWQuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIGNob2ljZXNWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0VuYWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNFbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNFbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNFbmFibGVJZlwiLCB2YWwpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5JdGVtc0VuYWJsZUNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBpc1NldHRpbmdEZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICB0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSA9XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpICYmXG4gICAgICB0aGlzLmhhc1Vua25vd25WYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgc3VwZXIuc2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgdGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuZGF0YSB8fFxuICAgICAgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgcmV0dXJuIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuSXRlbXNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBib29sZWFuIHtcbiAgICB0aGlzLnNldENvbmRpdGlvbmFsQ2hvaWNlc1J1bm5lcigpO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gdGhpcy5ydW5Db25kaXRpb25zRm9ySXRlbXModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgJiZcbiAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUubGVuZ3RoID09PSB0aGlzLmFjdGl2ZUNob2ljZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYW55IHtcbiAgICB0aGlzLnNldENvbmRpdGlvbmFsRW5hYmxlQ2hvaWNlc1J1bm5lcigpO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkVuYWJsZWRDb25kaXRpb25zRm9ySXRlbXMoXG4gICAgICB0aGlzLmFjdGl2ZUNob2ljZXMsXG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbENob2ljZXNSdW5uZXIoKSB7XG4gICAgaWYgKHRoaXMuY2hvaWNlc1Zpc2libGVJZikge1xuICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihcbiAgICAgICAgICB0aGlzLmNob2ljZXNWaXNpYmxlSWZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5jaG9pY2VzVmlzaWJsZUlmO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsRW5hYmxlQ2hvaWNlc1J1bm5lcigpIHtcbiAgICBpZiAodGhpcy5jaG9pY2VzRW5hYmxlSWYpIHtcbiAgICAgIGlmICghdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKFxuICAgICAgICAgIHRoaXMuY2hvaWNlc0VuYWJsZUlmXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lci5leHByZXNzaW9uID0gdGhpcy5jaG9pY2VzRW5hYmxlSWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBib29sZWFuIHtcbiAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlID0gW107XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5ydW5Db25kaXRpb25zRm9ySXRlbXMoXG4gICAgICB0aGlzLmFjdGl2ZUNob2ljZXMsXG4gICAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlcyxcbiAgICAgIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgPT09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIGdldCB2YWxpZGF0ZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc3RmdWxsKCk6IENob2ljZXNSZXN0ZnVsbCB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25Db21tZW50KCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5jb21tZW50VmFsdWUpIHJldHVybiB0aGlzLmNvbW1lbnRWYWx1ZTtcbiAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSByZXR1cm4gc3VwZXIuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNTZXR0aW5nQ29tbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Db21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5oYXNDb21tZW50IHx8IHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSlcbiAgICAgIHN1cGVyLnNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZSk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuaXNTZXR0aW5nQ29tbWVudCAmJiBuZXdWYWx1ZSAhPSB0aGlzLmNvbW1lbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbW1lbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgIXRoaXMuaXNSZW5kZXJlZFZhbHVlU2V0dGluZykge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YSh0aGlzLnJlbmRlcmVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZXR0aW5nQ29tbWVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlbmRlcmVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIHZhbCk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCB0aGlzLnJlbmRyZWRWYWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCkgcmV0dXJuO1xuICAgIHZhciBpc090aGVyU2VsID0gdGhpcy5pc090aGVyU2VsZWN0ZWQ7XG4gICAgaWYgKGlzT3RoZXJTZWwgJiYgISF0aGlzLnByZXZDb21tZW50VmFsdWUpIHtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gdGhpcy5wcmV2Q29tbWVudFZhbHVlO1xuICAgICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gXCJcIjtcbiAgICAgIHRoaXMuY29tbWVudCA9IG9sZENvbW1lbnQ7XG4gICAgfVxuICAgIGlmICghaXNPdGhlclNlbCAmJiAhIXRoaXMuY29tbWVudCkge1xuICAgICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkge1xuICAgICAgICB0aGlzLnByZXZDb21tZW50VmFsdWUgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1lbnQgPSBcIlwiO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy52YWx1ZUZyb21EYXRhKG5ld1ZhbHVlKTtcbiAgICBpZiAoXG4gICAgICAoIXRoaXMuY2hvaWNlc0J5VXJsLmlzUnVubmluZyAmJlxuICAgICAgICAhdGhpcy5jaG9pY2VzQnlVcmwuaXNXYWl0aW5nRm9yUGFyYW1ldGVycykgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGxldCBjaG9pY2VpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsKTtcbiAgICBpZiAoISFjaG9pY2VpdGVtKSB7XG4gICAgICByZXR1cm4gY2hvaWNlaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlZFZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCwgdHJ1ZSkpIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlICYmIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgIHZhbCA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZSh2YWw6IGFueSwgaW5jbHVkZU90aGVyOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlT3RoZXIgJiYgdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLmZpbHRlcmVkQ2hvaWNlcywgdmFsKSA9PSBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBpc1ZhbHVlRGlzYWJsZWQodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICB2YXIgaXRlbVZhbHVlID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuZmlsdGVyZWRDaG9pY2VzLCB2YWwpO1xuICAgIHJldHVybiAhIWl0ZW1WYWx1ZSAmJiAhaXRlbVZhbHVlLmlzRW5hYmxlZDtcbiAgfVxuICAvKipcbiAgICogSWYgdGhlIGNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2sgaXMgc2V0LCBpdCBpcyB1c2VkIHRvIGNsZWFyIGluY29ycmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkZWZhdWx0IGJlaGF2aW91ci5cbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgaXRlbXMuIEV2ZXJ5IGl0ZW0gaGFzIHZhbHVlIGFuZCB0ZXh0LiBJZiB0ZXh0IGlzIGVtcHR5LCB0aGUgdmFsdWUgaXMgcmVuZGVyZWQuIFRoZSBpdGVtIHRleHQgc3VwcG9ydHMgbWFya2Rvd24uXG4gICAqIEBzZWUgY2hvaWNlc0J5VXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSBjaG9pY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlSWZDaG9pY2VzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZkNob2ljZXNFbXB0eVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlSWZDaG9pY2VzRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBrZWVwSW5jb3JyZWN0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtlZXBJbmNvcnJlY3RWYWx1ZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2VlcEluY29ycmVjdFZhbHVlc1wiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsZWFzZSB1c2Ugc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb24gdGhlIHN1cnZleSBsZXZlbC4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByaWNhdGVkIGFuZCBpbnZpc2libGUgaW4gU3VydmV5IENyZWF0b3IuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgb3RoZXJzIGlucHV0IGluIHRoZSBjaGVja2JveC9yYWRpb2dyb3VwL2Ryb3Bkb3duIGFyZSBzdG9yZWQgYXMgXCJxdWVzdGlvbiBuYW1lIFwiICsgXCItQ29tbWVudFwiLiBUaGUgdmFsdWUgaXRzZWxmIGlzIFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgXCJxdWVzdGlvbiBuYW1lXCIga2V5LlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBcImRlZmF1bHRcIiwgdHJ1ZSwgZmFsc2VcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5zdG9yZU90aGVyc0FzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCBcImRlZmF1bHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc090aGVyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlbmRlciBpdGVtcyBpbiBhIHNwZWNpZmljIG9yZGVyOiBcImFzY1wiLCBcImRlc2NcIiwgXCJyYW5kb21cIi4gRGVmYXVsdCB2YWx1ZSBpcyBcIm5vbmVcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gdGhpcy5jaG9pY2VzT3JkZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzT3JkZXJcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIG90aGVyIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyVGV4dFwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgcGxhY2UgaG9sZGVyIHRleHQgZm9yIG90aGVyIG9yIGNvbW1lbnQgZmllbGQgIC5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyUGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlclBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvdGhlclBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJQbGFjZUhvbGRlclwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCBzaG93cyB3aGVuIHRoZSBvdGhlciBpdGVtIGlzIGNob29zZWQgYnkgdGhlIG90aGVyIGlucHV0IGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3RoZXJFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY090aGVyRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcyBhcyB0aGV5IHdpbGwgYmUgcmVuZGVyZWQuIElmIG5lZWRlZCBpdGVtcyBhcmUgc29ydGVkIGFuZCB0aGUgb3RoZXIgaXRlbSBpcyBhZGRlZC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKiBAc2VlIGNob2ljZXNPcmRlclxuICAgKiBAc2VlIGVuYWJsZWRDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlQ2hvaWNlc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVuYWJsZWQgaXRlbXMgYXMgdGhleSB3aWxsIGJlIHJlbmRlcmVkLiBUaGUgZGlzYWJsZWQgaXRlbXMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAqIEBzZWUgdmlzaWJsZUNob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlZENob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmlzRW5hYmxlZCkgcmVzLnB1c2goaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVWaXNpYmxlQ2hvaWNlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZSA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuY2FsY1Zpc2libGVDaG9pY2VzKCk7XG4gICAgaWYgKCFjYWxjVmFsdWUpIGNhbGNWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsY1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdWYWx1ZS5wdXNoKGNhbGNWYWx1ZVtpXSk7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNhbGNWaXNpYmxlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICBpZiAodGhpcy5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKSkgcmV0dXJuIHRoaXMuZmlsdGVyZWRDaG9pY2VzO1xuICAgIHZhciByZXMgPSB0aGlzLnNvcnRWaXNpYmxlQ2hvaWNlcyh0aGlzLmZpbHRlcmVkQ2hvaWNlcy5zbGljZSgpKTtcbiAgICB0aGlzLmFkZFRvVmlzaWJsZUNob2ljZXMocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmhhc090aGVyICYmIHRoaXMuY2hvaWNlc09yZGVyID09IFwibm9uZVwiO1xuICB9XG4gIHByb3RlY3RlZCBhZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSB7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5vdGhlckl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlcz86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgdmFyIHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlIDogW3RoaXMudmFsdWVdO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSAocXVlc3Rpb25QbGFpbkRhdGEuZGF0YSB8fCBbXSkuY29uY2F0KFxuICAgICAgICB2YWx1ZXMubWFwKChkYXRhVmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgdmFyIGNob2ljZSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCBkYXRhVmFsdWUpO1xuICAgICAgICAgIHZhciBjaG9pY2VEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgICAgbmFtZTogaW5kZXgsXG4gICAgICAgICAgICB0aXRsZTogXCJDaG9pY2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhVmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShcbiAgICAgICAgICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcyxcbiAgICAgICAgICAgICAgZGF0YVZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICghIWNob2ljZSkge1xuICAgICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjaG9pY2VEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgICBjaG9pY2VbY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW1WYWx1ZSA9PT0gY2hvaWNlKSB7XG4gICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5pc090aGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNob2ljZURhdGFJdGVtLmRpc3BsYXlWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNob2ljZURhdGFJdGVtO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgbnVsbCB0aGVuIHJldHVybnMgZW1wdHkgc3RyaW5nLiBJZiAnb3RoZXInIGlzIHNlbGVjdGVkIHRoZW4gcmV0dXJucyB0aGUgdGV4dCBmb3Igb3RoZXIgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzRGlzcGxheVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShpdGVtczogSXRlbVZhbHVlW10sIHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtVmFsdWUudmFsdWUpXG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50ID8gdGhpcy5jb21tZW50IDogdGhpcy5sb2NPdGhlclRleHQudGV4dE9ySHRtbDtcbiAgICB2YXIgc3RyID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKGl0ZW1zLCB2YWwpO1xuICAgIHJldHVybiBzdHIgPT0gXCJcIiAmJiB2YWwgPyB2YWwgOiBzdHI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZmlsdGVyZWRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICA/IHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWVcbiAgICAgIDogdGhpcy5hY3RpdmVDaG9pY2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzRnJvbVVybCA/IHRoaXMuY2hvaWNlc0Zyb21VcmwgOiB0aGlzLmdldENob2ljZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBvbkNoZWNrRm9yRXJyb3JzKFxuICAgIGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+LFxuICAgIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIub25DaGVja0ZvckVycm9ycyhlcnJvcnMsIGlzT25WYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghdGhpcy5oYXNPdGhlciB8fCAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgdGhpcy5jb21tZW50KSByZXR1cm47XG4gICAgZXJyb3JzLnB1c2gobmV3IE90aGVyRW1wdHlFcnJvcih0aGlzLm90aGVyRXJyb3JUZXh0LCB0aGlzKSk7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSB7XG4gICAgaWYgKHRoaXMuaXNTZXR0aW5nRGVmYXVsdFZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc3RvcmVPdGhlcnNBc0NvbW1lbnQgPT09IHRydWUgfHxcbiAgICAgICh0aGlzLnN0b3JlT3RoZXJzQXNDb21tZW50ID09IFwiZGVmYXVsdFwiICYmXG4gICAgICAgICh0aGlzLnN1cnZleSAhPSBudWxsID8gdGhpcy5zdXJ2ZXkuc3RvcmVPdGhlcnNBc0NvbW1lbnQgOiB0cnVlKSkgfHxcbiAgICAgICghdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eSAmJiAhdGhpcy5jaG9pY2VzRnJvbVVybClcbiAgICApO1xuICB9XG4gIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLnJ1bkNob2ljZXNCeVVybCgpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlci5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICBpZiAobmFtZSAhPSB0aGlzLmdldFZhbHVlTmFtZSgpKSB7XG4gICAgICB0aGlzLnJ1bkNob2ljZXNCeVVybCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNob2ljZXNCeVVybCgpIHtcbiAgICBpZiAoIXRoaXMuY2hvaWNlc0J5VXJsIHx8IHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICA/IHRoaXMuc3VydmV5SW1wbC5nZXRUZXh0UHJvY2Vzc29yKClcbiAgICAgIDogdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgIGlmICghcHJvY2Vzc29yKSBwcm9jZXNzb3IgPSB0aGlzLnN1cnZleTtcbiAgICBpZiAoIXByb2Nlc3NvcikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdGhpcy5pc0Nob2ljZXNMb2FkZWQgfHwgdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5ydW4ocHJvY2Vzc29yKTtcbiAgfVxuICBwcml2YXRlIGlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgPSB0cnVlO1xuICBwcm90ZWN0ZWQgb25CZWZvcmVTZW5kUmVxdWVzdCgpIHtcbiAgICBpZiAoc2V0dGluZ3MuZGlzYWJsZU9uR2V0dGluZ0Nob2ljZXNGcm9tV2ViID09PSB0cnVlICYmICF0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuZW5hYmxlT25Mb2FkaW5nQ2hvaWNlcyA9IHRydWU7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZENob2ljZXNGcm9tVXJsKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlT25Mb2FkaW5nQ2hvaWNlcykge1xuICAgICAgdGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgaWYgKHRoaXMuY2hvaWNlc0J5VXJsICYmIHRoaXMuY2hvaWNlc0J5VXJsLmVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHRoaXMuY2hvaWNlc0J5VXJsLmVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH1cbiAgICB2YXIgbmV3Q2hvaWNlcyA9IG51bGw7XG4gICAgdmFyIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZyA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsICYmXG4gICAgICAhdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzICYmXG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgICBjaGVja0NhY2hlZFZhbHVlc09uRXhpc3RpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cykpIHtcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyA9IHRoaXMudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCA9IGZhbHNlO1xuICAgIHZhciBjYWNoZWRWYWx1ZXMgPSB0aGlzLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMoXG4gICAgICB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMsXG4gICAgICBjaGVja0NhY2hlZFZhbHVlc09uRXhpc3RpbmdcbiAgICApO1xuICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXdDaG9pY2VzID0gbmV3IEFycmF5PEl0ZW1WYWx1ZT4oKTtcbiAgICAgIEl0ZW1WYWx1ZS5zZXREYXRhKG5ld0Nob2ljZXMsIGFycmF5KTtcbiAgICB9XG4gICAgdGhpcy5jaG9pY2VzRnJvbVVybCA9IG5ld0Nob2ljZXM7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICBpZiAobmV3Q2hvaWNlcykge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy51cGRhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgICAgICBjYWNoZWRWYWx1ZXMsXG4gICAgICAgIG5ld0Nob2ljZXNcbiAgICAgICk7XG4gICAgICBpZiAoISFuZXdWYWx1ZSAmJiAhdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICAgIHZhciBoYXNDaGFuZ2VkID0gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubG9jTm90aWZpY2F0aW9uSW5EYXRhID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMubG9jTm90aWZpY2F0aW9uSW5EYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gaGFzQ2hhbmdlZDtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUudmFsdWU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaG9pY2VzTG9hZGVkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgIHZhbDogYW55LFxuICAgIGNoZWNrT25FeGlzdGluZzogYm9vbGVhblxuICApOiBhbnkge1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB2YXIgcmVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMucHVzaCh0aGlzLmNyZWF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHModmFsW2ldLCB0cnVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICB2YXIgaXNFeGlzdHMgPSBjaGVja09uRXhpc3RpbmcgPyAhdGhpcy5oYXNVbmtub3duVmFsdWUodmFsKSA6IHRydWU7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHZhbCwgaXNFeGlzdHM6IGlzRXhpc3RzIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKFxuICAgIHZhbDogYW55LFxuICAgIG5ld0Nob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT5cbiAgKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgICAgICB2YWxbaV0sXG4gICAgICAgICAgbmV3Q2hvaWNlc1xuICAgICAgICApO1xuICAgICAgICBpZiAodXBkYXRlZFZhbHVlICYmICF0aGlzLmlzVmFsdWVFbXB0eSh1cGRhdGVkVmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gdXBkYXRlZFZhbHVlLnZhbHVlO1xuICAgICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKG5ld0Nob2ljZXMsIHVwZGF0ZWRWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXMucHVzaChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHZhbHVlOiByZXMgfTtcbiAgICB9XG4gICAgdmFyIHZhbHVlID1cbiAgICAgIHZhbC5pc0V4aXN0cyAmJiB0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwudmFsdWUpID8gbnVsbCA6IHZhbC52YWx1ZTtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB2YWx1ZSk7XG4gICAgaWYgKCEhaXRlbSkge1xuICAgICAgdmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eUJhc2VkT25DaG9pY2VzKCkge1xuICAgIGlmICh0aGlzLmhpZGVJZkNob2ljZXNFbXB0eSkge1xuICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMuZmlsdGVyZWRDaG9pY2VzIHx8IHRoaXMuZmlsdGVyZWRDaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcbiAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xuICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHByaXZhdGUgc29ydEFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+LCBtdWx0OiBudW1iZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKGEuY2FsY3VsYXRlZFRleHQgPCBiLmNhbGN1bGF0ZWRUZXh0KSByZXR1cm4gLTEgKiBtdWx0O1xuICAgICAgaWYgKGEuY2FsY3VsYXRlZFRleHQgPiBiLmNhbGN1bGF0ZWRUZXh0KSByZXR1cm4gMSAqIG11bHQ7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIHJhbmRvbWl6ZUFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIEhlbHBlcnMucmFuZG9taXplQXJyYXk8SXRlbVZhbHVlPihhcnJheSk7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIGlmICh0aGlzLmtlZXBJbmNvcnJlY3RWYWx1ZXMpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkNvdW50QnlWYWx1ZU5hbWUodGhpcy5nZXRWYWx1ZU5hbWUoKSkgPiAxXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXNDYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEaXNhYmxlZFZhbHVlcygpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5jbGVhclZhbHVlT25EaXNhYmxlSXRlbXMpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyRGlzYWJsZWRWYWx1ZXNDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAodGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3codmFsKSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5DbGVhclZhbHVlQW5Vbmtub3codmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSAmJiB0aGlzLmlzT3RoZXJTZWxlY3RlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWwsIHRydWUpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRGlzYWJsZWQodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBjbGVhclVudXNlZFZhbHVlcygpIHtcbiAgICBzdXBlci5jbGVhclVudXNlZFZhbHVlcygpO1xuICAgIGlmICghdGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgIXRoaXMuaGFzQ29tbWVudCkge1xuICAgICAgdGhpcy5jb21tZW50ID0gXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0Q29sdW1uQ2xhc3MoKSB7XG4gICAgdmFyIGNvbHVtbkNsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmNvbHVtbjtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5DbGFzcyArPSBcIiBzdi1xLWNvbHVtbi1cIiArIHRoaXMuY29sQ291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5DbGFzcztcbiAgfVxuICBnZXRMYWJlbENsYXNzKGlzQ2hlY2tlZDogYm9vbGVhbikge1xuICAgIHZhciBsYWJlbENsYXNzID0gdGhpcy5jc3NDbGFzc2VzLmxhYmVsO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIGxhYmVsQ2xhc3MgKz0gXCIgXCIgKyB0aGlzLmNzc0NsYXNzZXMubGFiZWxDaGVja2VkO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxDbGFzcztcbiAgfVxuICBnZXRDb250cm9sTGFiZWxDbGFzcyhpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIGNvbnRyb2xMYWJlbENsYXNzICs9IFwiIFwiICsgdGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbENoZWNrZWQ7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sTGFiZWxDbGFzcztcbiAgfVxuICBnZXQgY29sdW1ucygpIHtcbiAgICB2YXIgY29sdW1ucyA9IFtdO1xuICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XG4gICAgaWYgKHRoaXMuaGFzQ29sdW1ucyAmJiB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykge1xuICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGogKz0gY29sQ291bnQpIHtcbiAgICAgICAgICBjb2x1bW4ucHVzaCh0aGlzLnZpc2libGVDaG9pY2VzW2pdKTtcbiAgICAgICAgfVxuICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cbiAgZ2V0IGhhc0NvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sQ291bnQgPiAxO1xuICB9XG4gIHB1YmxpYyBjaG9pY2VzTG9hZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDaG9pY2VzTG9hZGVkID0gdHJ1ZTtcbiAgICBsZXQgb2xkSXNSZWFkeTogYm9vbGVhbiA9IHRoaXMuaXNSZWFkeVZhbHVlO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkICYmXG4gICAgICB0aGlzLm9uUmVhZHlDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgaXNSZWFkeTogdHJ1ZSxcbiAgICAgICAgb2xkSXNSZWFkeTogb2xkSXNSZWFkeSxcbiAgICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLiBJdCBpbnRyb2R1Y2VkIGEgY29sQ291bnQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94QmFzZSBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgcmFkaW9ncm91cCBhbmQgY2hlY2tib3ggcXVlc3Rpb25zLiBJdGVtcyBhcmUgcmVuZHJlZCBpbiBvbmUgbGluZSBpZiB0aGUgdmFsdWUgaXMgMC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdGhpcy5pc0Zsb3dMYXlvdXQgPyAwIDogMSk7XG4gIH1cbiAgcHVibGljIHNldCBjb2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDUgfHwgdGhpcy5pc0Zsb3dMYXlvdXQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB2YWx1ZSk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUGFyZW50Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblBhcmVudENoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5pc0Zsb3dMYXlvdXQpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIG51bGwpO1xuICAgIH1cbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzZWxlY3RiYXNlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzQ29tbWVudDtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFRleHRcIixcbiAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJhc2NcIiwgXCJkZXNjXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIixcbiAgICAgIGNsYXNzTmFtZTogXCJDaG9pY2VzUmVzdGZ1bGxcIixcbiAgICAgIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmNob2ljZXNCeVVybC5nZXREYXRhKCk7XG4gICAgICB9LFxuICAgICAgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICAgIG9iai5jaG9pY2VzQnlVcmwuc2V0RGF0YSh2YWx1ZSk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgXCJoaWRlSWZDaG9pY2VzRW1wdHk6Ym9vbGVhblwiLFxuICAgIFwiY2hvaWNlc1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImNob2ljZXNFbmFibGVJZjpjb25kaXRpb25cIixcbiAgICBcImhhc090aGVyOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcIm90aGVyUGxhY2VIb2xkZXJcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclBsYWNlSG9sZGVyXCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzT3RoZXJcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNPdGhlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJFcnJvclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNPdGhlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgfSxcbiAgXSxcbiAgbnVsbCxcbiAgXCJxdWVzdGlvblwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNoZWNrYm94YmFzZVwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIixcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNCwgNV0sXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgXSxcbiAgbnVsbCxcbiAgXCJzZWxlY3RiYXNlXCJcbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fYmFzZXNlbGVjdC50cyIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBJU3VydmV5SW1wbCxcbiAgSVBhZ2UsXG4gIElQYW5lbCxcbiAgSUNvbmRpdGlvblJ1bm5lcixcbiAgSUVsZW1lbnQsXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleUVycm9yLFxuICBJU3VydmV5RXJyb3JPd25lcixcbn0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgT25lQW5zd2VyUmVxdWlyZWRFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcEluZm8ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc291cmNlOiBJRWxlbWVudCxcbiAgICBwdWJsaWMgdGFyZ2V0OiBJRWxlbWVudCxcbiAgICBwdWJsaWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7fVxuICBwdWJsaWMgZGVzdGluYXRpb246IElTdXJ2ZXlFbGVtZW50O1xuICBwdWJsaWMgaXNCb3R0b206IGJvb2xlYW47XG4gIHB1YmxpYyBpc0VkZ2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYW5lbDogUGFuZWxNb2RlbEJhc2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmlzaWJsZSA9IHBhbmVsLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiZWxlbWVudHNcIik7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbGVtZW50c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZSkgPT4gZS5pc1Zpc2libGUpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVWaXNpYmxlKCkge1xuICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY2FsY1Zpc2libGUoKTtcbiAgICB0aGlzLnNldFdpZHRoKCk7XG4gIH1cbiAgcHVibGljIGFkZEVsZW1lbnQocTogSUVsZW1lbnQpIHtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2gocSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XG4gIH1cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhbmVsLnJvd3MuaW5kZXhPZih0aGlzKTtcbiAgfVxuICBwcml2YXRlIHNldFdpZHRoKCkge1xuICAgIHZhciB2aXNDb3VudCA9IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAodmlzQ291bnQgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgcHJlU2V0V2lkdGhFbGVtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHRoaXMuc2V0RWxlbWVudE1heE1pbldpZHRoKGVsKTtcblxuICAgICAgaWYgKGVsLmlzVmlzaWJsZSkge1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldEVsZW1lbnRXaWR0aChlbCk7XG4gICAgICAgIGlmICghIXdpZHRoKSB7XG4gICAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGgod2lkdGgpO1xuICAgICAgICAgIHByZVNldFdpZHRoRWxlbWVudHMucHVzaChlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwucmlnaHRJbmRlbnQgPSBjb3VudGVyIDwgdmlzQ291bnQgLSAxID8gMSA6IDA7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbmRlcldpZHRoID0gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgaWYgKCFlbC5pc1Zpc2libGUgfHwgcHJlU2V0V2lkdGhFbGVtZW50cy5pbmRleE9mKGVsKSA+IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGVsLnJlbmRlcldpZHRoID0gKDEwMCAvIHZpc0NvdW50KS50b0ZpeGVkKDYpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9IHRoaXMuZ2V0UmVuZGVyZWRDYWxjV2lkdGgoXG4gICAgICAgICAgZWwsXG4gICAgICAgICAgcHJlU2V0V2lkdGhFbGVtZW50cyxcbiAgICAgICAgICB2aXNDb3VudFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0RWxlbWVudE1heE1pbldpZHRoKGVsOiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGVsLndpZHRoICYmXG4gICAgICB0eXBlb2YgZWwud2lkdGggPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIGVsLndpZHRoLmluZGV4T2YoXCIlXCIpID09PSAtMVxuICAgICkge1xuICAgICAgZWwubWluV2lkdGggPSBlbC53aWR0aDtcbiAgICAgIGVsLm1heFdpZHRoID0gZWwud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJlZENhbGNXaWR0aChcbiAgICBlbDogSUVsZW1lbnQsXG4gICAgcHJlU2V0V2lkdGhFbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc0NvdW50OiBudW1iZXJcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IFwiMTAwJVwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwcmVzc2lvbiArPSBcIiAtIFwiICsgcHJlU2V0V2lkdGhFbGVtZW50c1tpXS5yZW5kZXJXaWR0aDtcbiAgICB9XG4gICAgdmFyIGNhbGNXaWR0aEVsID0gdmlzQ291bnQgLSBwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoY2FsY1dpZHRoRWwgPiAxKSB7XG4gICAgICBleHByZXNzaW9uID0gXCIoXCIgKyBleHByZXNzaW9uICsgXCIpL1wiICsgY2FsY1dpZHRoRWwudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY2FsYyhcIiArIGV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRXaWR0aChlbDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIHZhciB3aWR0aCA9IGVsLndpZHRoO1xuICAgIGlmICghd2lkdGggfHwgdHlwZW9mIHdpZHRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gd2lkdGgudHJpbSgpO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVuZGVyZWRXaWR0aEZyb21XaWR0aCh3aWR0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSGVscGVycy5pc051bWJlcih3aWR0aCkgPyB3aWR0aCArIFwicHhcIiA6IHdpZHRoO1xuICB9XG4gIHByaXZhdGUgY2FsY1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aCA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGEgUGFuZWwgYW5kIFBhZ2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudFxuICBpbXBsZW1lbnRzIElQYW5lbCwgSUNvbmRpdGlvblJ1bm5lciwgSUxvY2FsaXphYmxlT3duZXIsIElTdXJ2ZXlFcnJvck93bmVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFuZWxDb3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRQYW5lbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3BfXCIgKyBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgZWxlbWVudHNWYWx1ZTogQXJyYXk8SUVsZW1lbnQ+O1xuICBwcml2YXRlIGlzUXVlc3Rpb25zUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBxdWVzdGlvbnNWYWx1ZTogQXJyYXk8UXVlc3Rpb24+ID0gbmV3IEFycmF5PFF1ZXN0aW9uPigpO1xuICBhZGRFbGVtZW50Q2FsbGJhY2s6IChlbGVtZW50OiBJRWxlbWVudCkgPT4gdm9pZDtcbiAgcmVtb3ZlRWxlbWVudENhbGxiYWNrOiAoZWxlbWVudDogSUVsZW1lbnQpID0+IHZvaWQ7XG4gIG9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uOiAoKSA9PiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcbiAgICB0aGlzLmVsZW1lbnRzVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJlbGVtZW50c1wiLFxuICAgICAgdGhpcy5vbkFkZEVsZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgIHRoaXMub25SZW1vdmVFbGVtZW50LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMuaWQgPSBQYW5lbE1vZGVsQmFzZS5nZXRQYW5lbElkKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYW5lbGJhc2VcIjtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFBhbmVsTW9kZWwgb3IgUGFnZU1vZGVsIHRpdGxlIHByb3BlcnR5LlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiKTtcbiAgfVxuICBnZXQgX3Nob3dUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCg8YW55PnRoaXMuc3VydmV5KS5zaG93UGFnZVRpdGxlcyAmJiB0aGlzLnRpdGxlLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5pc0Rlc2lnbk1vZGUgJiYgc2V0dGluZ3MuYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZSlcbiAgICApO1xuICB9XG4gIGdldCBfc2hvd0Rlc2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJiBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlICYmXG4gICAgICAgIHNldHRpbmdzLmFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGUpXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUGFuZWxNb2RlbCBvciBQYWdlTW9kZWwgZGVzY3JpcHRpb24gcHJvcGVydHkuIEl0IHJlbmRlcnMgdW5kZXIgdGl0bGUgYnkgdXNpbmcgc21hbGxlciBmb250LiBVbmxpa2UgdGhlIHRpdGxlLCBkZXNjcmlwdGlvbiBjYW4gYmUgZW1wdHkuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICB9XG4gIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVxuICAgICAgPyAoPElMb2NhbGl6YWJsZU93bmVyPig8YW55PnRoaXMuc3VydmV5KSkuZ2V0TG9jYWxlKClcbiAgICAgIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0U3VydmV5TWFya2Rvd25IdG1sKHRoaXMsIHRleHQpIDogbnVsbDtcbiAgfVxuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclxuICAgICAgPyB0aGlzLnRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHQodGV4dCwgdHJ1ZSlcbiAgICAgIDogdGV4dDtcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgaXMgYWx3YXlzIG51bGwgZm9yIHRoZSBQYWdlIG9iamVjdCBhbmQgYWx3YXlzIG5vdCBudWxsIGZvciB0aGUgUGFuZWwgb2JqZWN0LiBQYW5lbCBvYmplY3QgbWF5IGNvbnRhaW4gUXVlc3Rpb25zIGFuZCBvdGhlciBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBkZXB0aCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZGVwdGggKyAxO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwgYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgdmFyIGNsYXNzZXMgPSB7IHBhbmVsOiB7fSwgZXJyb3I6IHt9LCByb3c6IFwiXCIgfTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMucGFuZWwsIHRoaXMuY3NzLnBhbmVsKTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMuZXJyb3IsIHRoaXMuY3NzLmVycm9yKTtcbiAgICBpZiAoISF0aGlzLmNzcy5yb3cpIHtcbiAgICAgIGNsYXNzZXMucm93ID0gdGhpcy5jc3Mucm93O1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgLyoqXG4gICAqIEEgdW5pcXVlIGVsZW1lbnQgaWRlbnRpZmljYXRvci4gSXQgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIFBhbmVsLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIChhIHJvb3QgUGFuZWwpLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBnZXRMYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXlvdXRUeXBlICE9PSBcImZsb3dcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgcXVlc3Rpb25zIGxvY2F0ZWQgaW4gdGhlIFBhbmVsL1BhZ2UsIGluY2x1ZGluZyBpbiB0aGUgbmVzdGVkIFBhbmVscy5cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGlmICghdGhpcy5pc1F1ZXN0aW9uc1JlYWR5KSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgICB2YXIgcXMgPSAoPFBhbmVsTW9kZWw+ZWwpLnF1ZXN0aW9ucztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHFzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2gocXNbal0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2goPFF1ZXN0aW9uPmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcXVlc3Rpb24gYnkgaXRzIG5hbWVcbiAgICogQHBhcmFtIG5hbWUgdGhlIHF1ZXN0aW9uIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHF1ZXN0aW9uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEl0IHdvcmtzIHJlY3Vyc2l2ZWx5LlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgZWxlbWVudCBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0RWxlbWVudEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBJRWxlbWVudCB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbC5uYW1lID09IG5hbWUpIHJldHVybiBlbDtcbiAgICAgIHZhciBwbmwgPSBlbC5nZXRQYW5lbCgpO1xuICAgICAgaWYgKCEhcG5sKSB7XG4gICAgICAgIHZhciByZXMgPSAoPFBhbmVsTW9kZWxCYXNlPnBubCkuZ2V0RWxlbWVudEJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZSh2YWx1ZU5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uZ2V0VmFsdWVOYW1lKCkgPT0gdmFsdWVOYW1lKSByZXR1cm4gcXVlc3Rpb25zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWVzdGlvbiB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgcHVibGljIGdldFZhbHVlKCk6IGFueSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5pc0VtcHR5KCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHZhbHVlTmFtZSA9IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICAoPGFueT5kYXRhKVt2YWx1ZU5hbWVdID0gcS52YWx1ZTtcbiAgICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHZhbHVlTmFtZSk7XG4gICAgICAgIGlmICghIWNvbW1lbnQpIHtcbiAgICAgICAgICAoPGFueT5kYXRhKVt2YWx1ZU5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4XSA9IGNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVlc3Rpb24gY29tbWVudHMgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgcHVibGljIGdldENvbW1lbnRzKCk6IGFueSB7XG4gICAgdmFyIGNvbW1lbnRzID0ge307XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybiBjb21tZW50cztcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLmRhdGEuZ2V0Q29tbWVudChxLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIGlmICghIWNvbW1lbnQpIHtcbiAgICAgICAgKDxhbnk+Y29tbWVudHMpW3EuZ2V0VmFsdWVOYW1lKCldID0gY29tbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCBxdWVzdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCBwYWdlL3BhbmVsLCB0aGF0IGVuZC11c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gZW50ZXIuXG4gICAqIEZvciBleGFtcGxlIHRoZSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZXhpc3RzIGluIGEgcmFkaWdyb3VwL2Ryb3Bkb3duL2NoZWNrYm94IGNob2ljZXMgb3IgbWF0cml4IHJvd3MvY29sdW1ucy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjbGVhciB2YWx1ZXMgZm9yIGludmlzaWJsZSBxdWVzdGlvbnMgb3IgdmFsdWVzIHRoYXQgZG9lc24ndCBhc3NvY2lhdGVkIHdpdGggcXVlc3Rpb25zLlxuICAgKiBAc2VlIFF1ZXN0aW9uLmNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgYWxsIGVycm9ycyBpbiB0aGUgcGFuZWwgLyBwYWdlIGFuZCBhbGwgaXRzIGNoaWxkIGVsZW1lbnRzIChwYW5lbHMgYW5kIHF1ZXN0aW9ucylcbiAgICovXG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uY2xlYXJFcnJvcnMoKTtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuICBwcml2YXRlIG1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpIHtcbiAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50Lm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgb2JqZWN0LCBQYW5lbC9QYWdlLiBFbGVtZW50cyBjYW4gYmUgcXVlc3Rpb25zIG9yIHBhbmVscy4gVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGVsZW1lbnRzIGluIHRoZSBuZXN0ZWQgUGFuZWxzLlxuICAgKi9cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgYmVsb25ncyB0byB0aGUgUGFuZWwvUGFnZS4gSXQgbG9va3MgaW4gbmVzdGVkIFBhbmVscyBhcyB3ZWxsLlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBjb250YWluc0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbDogYW55ID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbCA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBwbmwgPSBlbC5nZXRQYW5lbCgpO1xuICAgICAgaWYgKCEhcG5sKSB7XG4gICAgICAgIGlmICgoPFBhbmVsTW9kZWxCYXNlPnBubCkuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byByZXF1aXJlIHRoZSBhbnN3ZXIgYXQgbGVhc3QgaW4gb25lIHF1ZXN0aW9uIGluIHRoZSBwYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGVyZSBpcyBhbiBlcnJvciBvbiB0aGlzIFBhZ2Ugb3IgaW5zaWRlIHRoZSBjdXJyZW50IFBhbmVsXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUsIHRvIHNob3cgZXJyb3JzIGluIFVJXG4gICAqIEBwYXJhbSBmb2N1c09uRmlyc3RFcnJvciBzZXQgaXQgdG8gdHJ1ZSB0byBmb2N1cyBvbiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBkb2Vzbid0IHBhc3MgdGhlIHZhbGlkYXRpb25cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSxcbiAgICBmb2N1c09uRmlyc3RFcnJvcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJlYzogYW55ID0gbnVsbFxuICApOiBib29sZWFuIHtcbiAgICByZWMgPSAhIXJlY1xuICAgICAgPyByZWNcbiAgICAgIDoge1xuICAgICAgICAgIGZpcmVDYWxsYmFjazogZmlyZUNhbGxiYWNrLFxuICAgICAgICAgIGZvY3VzZU9uRmlyc3RFcnJvcjogZm9jdXNPbkZpcnN0RXJyb3IsXG4gICAgICAgICAgZmlyc3RFcnJvclF1ZXN0aW9uOiA8YW55Pm51bGwsXG4gICAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB0aGlzLmhhc0Vycm9yc0NvcmUocmVjKTtcbiAgICBpZiAocmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbi5mb2N1cyh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYy5yZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvcnNJblBhbmVscyhyZWM6IGFueSkge1xuICAgIHZhciBlcnJvcnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmhhc1JlcXVpcmVkRXJyb3IocmVjLCBlcnJvcnMpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIGN1c3RvbUVycm9yID0gdGhpcy5zdXJ2ZXkudmFsaWRhdGVQYW5lbCh0aGlzKTtcbiAgICAgIGlmIChjdXN0b21FcnJvcikge1xuICAgICAgICBlcnJvcnMucHVzaChjdXN0b21FcnJvcik7XG4gICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISFyZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9XG4gIH1cbiAgLy9JU3VydmV5RXJyb3JPd25lclxuICBnZXRFcnJvckN1c3RvbVRleHQodGV4dDogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQsIGVycm9yKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRFcnJvcihyZWM6IGFueSwgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaXNSZXF1aXJlZCkgcmV0dXJuO1xuICAgIHZhciB2aXNRdWVzdGlvbnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNRdWVzdGlvbnMsIHRydWUpO1xuICAgIGlmICh2aXNRdWVzdGlvbnMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1F1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF2aXNRdWVzdGlvbnNbaV0uaXNFbXB0eSgpKSByZXR1cm47XG4gICAgfVxuICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgIGVycm9ycy5wdXNoKG5ldyBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9IHZpc1F1ZXN0aW9uc1swXTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIHZhciBlbGVtZW50ID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuICAgICAgaWYgKCFlbGVtZW50LmlzVmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbGVtZW50KSkuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPmVsZW1lbnQ7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhyZWMuZmlyZUNhbGxiYWNrLCByZWMpKSB7XG4gICAgICAgICAgaWYgKHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IgJiYgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFzRXJyb3JzSW5QYW5lbHMocmVjKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0uY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgKDxCYXNlPig8YW55PmVsKSkuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCBlbC5pc1Zpc2libGUpO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHdpdGhFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUXVlc3Rpb24ge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoIWVsLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKFxuICAgICAgICAgIHdpdGhFcnJvclxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbj5lbDtcbiAgICAgICAgaWYgKHEuaGFzSW5wdXQgJiYgKCF3aXRoRXJyb3IgfHwgcS5jdXJyZW50RXJyb3JDb3VudCA+IDApKSByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gZm9jdXMgdGhlIGlucHV0IG9uIHRoZSBmaXJzdCBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoKTtcbiAgICBpZiAoISFxKSB7XG4gICAgICBxLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIGl0IHRvIGZvY3VzIHRoZSBpbnB1dCBvZiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBoYXMgYW4gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XG4gICAgdmFyIHEgPSB0aGlzLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHRydWUpO1xuICAgIGlmICghIXEpIHtcbiAgICAgIHEuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbGwgbGlzdCBhcnJheSB3aXRoIHRoZSBxdWVzdGlvbnMuXG4gICAqIEBwYXJhbSBsaXN0XG4gICAqIEBwYXJhbSB2aXNpYmxlT25seSBzZXQgaXQgdG8gdHJ1ZSB0byBnZXQgdmlzaWJsZSBxdWVzdGlvbnMgb25seVxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUXVlc3Rpb24+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogRmlsbCBsaXN0IGFycmF5IHdpdGggdGhlIHBhbmVscy5cbiAgICogQHBhcmFtIGxpc3RcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbHNJbnRvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUGFuZWw+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgICA8QXJyYXk8SUVsZW1lbnQ+Pig8QXJyYXk8YW55Pj5saXN0KSxcbiAgICAgIHZpc2libGVPbmx5LFxuICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgbGlzdDogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4sXG4gICAgaXNQYW5lbDogYm9vbGVhblxuICApIHtcbiAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgbGlzdCxcbiAgICAgIHRoaXMuZWxlbWVudHMsXG4gICAgICB2aXNpYmxlT25seSxcbiAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICBpc1BhbmVsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbnRzVG9MaXN0Q29yZShcbiAgICBsaXN0OiBBcnJheTxJRWxlbWVudD4sXG4gICAgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNpYmxlT25seTogYm9vbGVhbixcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuLFxuICAgIGlzUGFuZWw6IGJvb2xlYW5cbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgaWYgKChpc1BhbmVsICYmIGVsLmlzUGFuZWwpIHx8ICghaXNQYW5lbCAmJiAhZWwuaXNQYW5lbCkpIHtcbiAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICg8UGFuZWxNb2RlbD5lbCkuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5lbGVtZW50cyxcbiAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICBpbmNsdWRpbmdEZXNpZ25UaW1lLFxuICAgICAgICAgIGlzUGFuZWxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgKDxTdXJ2ZXlFbGVtZW50Pig8YW55PmVsKSkuZ2V0RWxlbWVudHNJbkRlc2lnbihmYWxzZSksXG4gICAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICAgICAgICBpc1BhbmVsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIGFuZCBpdCBpcyB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5IHx8IDxQYWdlTW9kZWw+dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXRzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIGlmICh0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbiA6IFwidG9wXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHJvb3QoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHZhciByZXMgPSA8UGFuZWxNb2RlbEJhc2U+dGhpcztcbiAgICB3aGlsZSAocmVzLnBhcmVudCkgcmVzID0gcmVzLnBhcmVudDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBjaGlsZFZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIHZhciBuZXdJc1Zpc2libGVWYWx1ZSA9IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTtcbiAgICB2YXIgb2xkSXNWaXNpYmxlVmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdHJ1ZSk7XG4gICAgaWYgKG5ld0lzVmlzaWJsZVZhbHVlICE9PSBvbGRJc1Zpc2libGVWYWx1ZSkge1xuICAgICAgdGhpcy5vblZpc2libGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJvd01vZGVsKHRoaXMpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLm9uU3VydmV5TG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICB9XG4gIGdldCByb3dzKCk6IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB0aGlzLmJ1aWxkUm93cygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZWxlbWVudC5zZXRTdXJ2ZXlJbXBsKHRoaXMuc3VydmV5SW1wbCk7XG4gICAgZWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBwID0gPFBhbmVsTW9kZWw+ZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25BZGRlZChxLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2spIHRoaXMuYWRkRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCJdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQpO1xuICAgICAgfSxcbiAgICAgIHRoaXMuaWRcbiAgICApO1xuICAgICg8QmFzZT4oPGFueT5lbGVtZW50KSkucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmlkXG4gICAgKTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInZpc2libGVcIiwgXCJpc1Zpc2libGVcIiwgXCJzdGFydFdpdGhOZXdMaW5lXCJdLFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50UmVtb3ZlZChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5xdWVzdGlvblJlbW92ZWQoPFF1ZXN0aW9uPmVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LnBhbmVsUmVtb3ZlZChlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5yZW1vdmVFbGVtZW50Q2FsbGJhY2spIHRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHRoaXMub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBvbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUm93c1Zpc2liaWxpdHkoZWxlbWVudCk7XG4gICAgdGhpcy5jaGlsZFZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMucGFyZW50Lm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9uRWxlbWVudFN0YXJ0V2l0aE5ld0xpbmVDaGFuZ2VkKGVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93c1Zpc2liaWxpdHkoZWxlbWVudDogYW55KSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgIGlmIChyb3cuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSA+IC0xKSB7XG4gICAgICAgIHJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGNhbkJ1aWxkUm93cygpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiYgdGhpcy5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSA9PSBcInJvd1wiO1xuICB9XG4gIHByaXZhdGUgYnVpbGRSb3dzKCk6IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+IHtcbiAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpIHJldHVybiBbXTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PFF1ZXN0aW9uUm93TW9kZWw+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgdmFyIGlzTmV3Um93ID0gaSA9PSAwIHx8IGVsLnN0YXJ0V2l0aE5ld0xpbmU7XG4gICAgICB2YXIgcm93ID0gaXNOZXdSb3cgPyB0aGlzLmNyZWF0ZVJvdygpIDogcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc05ld1JvdykgcmVzdWx0LnB1c2gocm93KTtcbiAgICAgIHJvdy5hZGRFbGVtZW50KGVsKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXS51cGRhdGVWaXNpYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpIHJldHVybjtcbiAgICB2YXIgZHJhZ0Ryb3BJbmZvID0gbmV3IERyYWdEcm9wSW5mbyhudWxsLCBlbGVtZW50KTtcbiAgICBkcmFnRHJvcEluZm8udGFyZ2V0ID0gZWxlbWVudDtcbiAgICBkcmFnRHJvcEluZm8uaXNFZGdlID0gdGhpcy5lbGVtZW50cy5sZW5ndGggPiAxO1xuICAgIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IGluZGV4ID4gMDtcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXMuZWxlbWVudHNbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSB0aGlzLmVsZW1lbnRzW2luZGV4IC0gMV07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIG51bGwpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB0aGlzLmZpbmRSb3dCeUVsZW1lbnQoZWxlbWVudClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3coXG4gICAgZWxlbWVudDogSUVsZW1lbnQsXG4gICAgcm93OiBRdWVzdGlvblJvd01vZGVsXG4gICkge1xuICAgIGlmICghcm93IHx8ICFyb3cucGFuZWwpIHJldHVybjtcbiAgICB2YXIgZWxJbmRleCA9IHJvdy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChlbEluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHJvdy5lbGVtZW50cy5zcGxpY2UoZWxJbmRleCwgMSk7XG4gICAgaWYgKHJvdy5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm93LmluZGV4ID49IDApIHtcbiAgICAgICAgcm93LnBhbmVsLnJvd3Muc3BsaWNlKHJvdy5pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmluZFJvd0J5RWxlbWVudChlbDogSUVsZW1lbnQpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dzW2ldLmVsZW1lbnRzLmluZGV4T2YoZWwpID4gLTEpIHJldHVybiByb3dzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHJvdyA9IHRoaXMuZmluZFJvd0J5RWxlbWVudChlbCk7XG4gICAgaWYgKCEhcm93KSB7XG4gICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyByZW5kZXJlZCB0aXRsZSB0ZXh0IG9yIGh0bWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkVGl0bGUodGhpcy5sb2NUaXRsZS50ZXh0T3JIdG1sKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvciAhPSBudWxsXG4gICAgICA/IHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dChzdHIsIHRydWUpXG4gICAgICA6IHN0cjtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldC9zZXQgdGhlIG9iamVjdCB2aXNpYmlsaXR5LlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0aGlzLmlzVmlzaWJsZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBvYmplY3QgaXMgdmlzaWJsZSBvciBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTtcbiAgfVxuICBnZXRJc1BhZ2VWaXNpYmxlKGV4Y2VwdGlvblF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0gPT0gZXhjZXB0aW9uUXVlc3Rpb24pIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSB8fCBpbmRleCA8IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleCgtMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICBpbmRleCArPSB0aGlzLmJlZm9yZVNldFZpc2libGVJbmRleChpbmRleCk7XG4gICAgdmFyIHBhbmVsU3RhcnRJbmRleCA9IHRoaXMuZ2V0UGFuZWxTdGFydEluZGV4KGluZGV4KTtcbiAgICB2YXIgcGFuZWxJbmRleCA9IHBhbmVsU3RhcnRJbmRleDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsSW5kZXggKz0gdGhpcy5lbGVtZW50c1tpXS5zZXRWaXNpYmxlSW5kZXgocGFuZWxJbmRleCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29udGludWVOdW1iZXJpbmcoKSkge1xuICAgICAgaW5kZXggKz0gcGFuZWxJbmRleCAtIHBhbmVsU3RhcnRJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4IC0gc3RhcnRJbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRpbnVlTnVtYmVyaW5nKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgcmVhZE9ubHkgcHJvcGVydHkgaXMgdHJ1ZSBvciBzdXJ2ZXkgaXMgaW4gZGlzcGxheSBtb2RlIG9yIHBhcmVudCBwYW5lbC9wYWdlIGlzIHJlYWRPbmx5LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1vZGVsXG4gICAqIEBzZWUgcmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICB2YXIgaXNQYXJlbnRSZWFkT25seSA9ICEhdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuaXNSZWFkT25seTtcbiAgICB2YXIgaXNTdXJ2ZXlSZWFkT25seSA9ICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seSB8fCBpc1BhcmVudFJlYWRPbmx5IHx8IGlzU3VydmV5UmVhZE9ubHk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gPFN1cnZleUVsZW1lbnQ+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSk7XG4gICAgICBlbC5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCBlbC5pc1JlYWRPbmx5KTtcbiAgICB9XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IDxTdXJ2ZXlFbGVtZW50Pig8YW55PnRoaXMuZWxlbWVudHNbaV0pO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcygpO1xuICAgIH1cbiAgICBzdXBlci51cGRhdGVFbGVtZW50Q3NzKCk7XG4gIH1cblxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwvUGFnZSBiZWNvbWVzIHJlYWQgb25seSBhbmQgYW4gZW5kLXVzZXIgd2lsbCBub3QgYWJsZSB0byBhbnN3ZXIgb24gcXVzdGlvbnMgaW5zaWRlIGl0LlxuICAgKiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogQHNlZSByZWFkT25seVxuICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICovXG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhbiBlbGVtZW50IGludG8gUGFuZWwgb3IgUGFnZS4gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IGFkZGVkIHN1Y2Nlc3NmdWxseS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5BZGRFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBjYW5BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhZWxlbWVudCAmJiBlbGVtZW50LmlzTGF5b3V0VHlwZVN1cHBvcnRlZCh0aGlzLmdldENoaWxkcmVuTGF5b3V0VHlwZSgpKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHF1ZXN0aW9uIGludG8gUGFuZWwgb3IgUGFnZS4gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25cbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50KHF1ZXN0aW9uLCBpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHBhbmVsIGludG8gUGFuZWwgb3IgUGFnZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFuZWwgYWRkZWQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICogQHBhcmFtIHBhbmVsXG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50KHBhbmVsLCBpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcXVlc3Rpb24gYW5kIGFkZHMgaXQgYXQgbG9jYXRpb24gb2YgaW5kZXgsIGJ5IGRlZmF1bHQgdGhlIGVuZCBvZiB0aGUgZWxlbWVudHMgbGlzdC4gUmV0dXJucyBudWxsLCBpZiB0aGUgcXVlc3Rpb24gY291bGQgbm90IGJlIGNyZWF0ZWQgb3IgY291bGQgbm90IGJlIGFkZGVkIGludG8gcGFnZSBvciBwYW5lbC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uVHlwZSB0aGUgcG9zc2libGUgdmFsdWVzIGFyZTogXCJ0ZXh0XCIsIFwiY2hlY2tib3hcIiwgXCJkcm9wZG93blwiLCBcIm1hdHJpeFwiLCBcImh0bWxcIiwgXCJtYXRyaXhkeW5hbWljXCIsIFwibWF0cml4ZHJvcGRvd25cIiBhbmQgc28gb24uXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGROZXdRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIGluZGV4OiBudW1iZXIgPSAtMVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XG4gICAgaWYgKCF0aGlzLmFkZFF1ZXN0aW9uKHF1ZXN0aW9uLCBpbmRleCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbjtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwYW5lbCBhbmQgYWRkcyBpdCBpbnRvIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnRzIGxpc3QuIFJldHVybnMgbnVsbCwgaWYgdGhlIHBhbmVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIG9yIGNvdWxkIG5vdCBiZSBhZGRlZCBpbnRvIHBhZ2Ugb3IgcGFuZWwuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKi9cbiAgcHVibGljIGFkZE5ld1BhbmVsKG5hbWU6IHN0cmluZyA9IG51bGwpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKG5hbWUpO1xuICAgIGlmICghdGhpcy5hZGRQYW5lbChwYW5lbCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBwYW5lbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgZWxlbWVudCBwYXJhbWV0ZXIgaW4gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50IHF1ZXN0aW9uIG9yIHBhbmVsXG4gICAqL1xuICBwdWJsaWMgaW5kZXhPZihlbGVtZW50OiBJRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZWxlbWVudCAoUGFuZWwgb3IgUXVlc3Rpb24pIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqIEBzZWUgZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50c1tpXS5yZW1vdmVFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgcXVlc3Rpb24gIGZyb20gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvblxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqIEBzZWUgcmVtb3ZlRWxlbWVudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIHRoaXMucmVtb3ZlRWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBjb25kaXRpb25WZXJzaW9uID0gLTE7XG4gIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWx1ZXMuY29uZGl0aW9uVmVyc2lvbiA8IHRoaXMuY29uZGl0aW9uVmVyc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uVmVyc2lvbiA9IHZhbHVlcy5jb25kaXRpb25WZXJzaW9uO1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzLmNvbmRpdGlvblZlcnNpb24gPCB0aGlzLmNvbmRpdGlvblZlcnNpb24pIHJldHVybjtcbiAgICAgIGVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWVzLmNvbmRpdGlvblZlcnNpb24gPCB0aGlzLmNvbmRpdGlvblZlcnNpb24pIHJldHVybjtcbiAgICBpZiAoIXRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLnJ1blZpc2libGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgdGhpcy5ydW5FbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy52aXNpYmxlSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy52aXNpYmxlID0gcmVzO1xuICAgIH07XG4gICAgY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5lbmFibGVJZik7XG4gICAgY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIGNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkcmFnRHJvcEFkZFRhcmdldChkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIHZhciBwcmV2Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIHByZXZSb3cpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhkcmFnRHJvcEluZm8udGFyZ2V0LCBwcmV2Um93KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGRyYWdEcm9wRmluZFJvdyhmaW5kRWxlbWVudDogSVN1cnZleUVsZW1lbnQpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICBpZiAoIWZpbmRFbGVtZW50IHx8IGZpbmRFbGVtZW50LmlzUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVsZW1lbnQgPSA8SUVsZW1lbnQ+ZmluZEVsZW1lbnQ7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocm93c1tpXS5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID4gLTEpIHJldHVybiByb3dzW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwbmwgPSB0aGlzLmVsZW1lbnRzW2ldLmdldFBhbmVsKCk7XG4gICAgICBpZiAoIXBubCkgY29udGludWU7XG4gICAgICB2YXIgcm93ID0gKDxQYW5lbE1vZGVsQmFzZT5wbmwpLmRyYWdEcm9wRmluZFJvdyhlbGVtZW50KTtcbiAgICAgIGlmICghIXJvdykgcmV0dXJuIHJvdztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvUm93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkcmFnRHJvcEluZm8uZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbykpIHJldHVybiB0cnVlO1xuICAgIHZhciBkZXN0ID0gZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIHZhciBkZXN0Um93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3coZGVzdCk7XG4gICAgaWYgKCFkZXN0Um93KSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWRyYWdEcm9wSW5mby50YXJnZXQuc3RhcnRXaXRoTmV3TGluZSlcbiAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLFxuICAgICAgICBkZXN0Um93LFxuICAgICAgICBwcmV2Um93XG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsKGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbi5pc1BhZ2UpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgICAgICB0aGlzLnJvb3QsXG4gICAgICAgIGRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgZGVzdCA9IDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKGRlc3QuaXNQYW5lbCAmJiAhZHJhZ0Ryb3BJbmZvLmlzRWRnZSkge1xuICAgICAgdmFyIHBhbmVsID0gPFBhbmVsTW9kZWxCYXNlPig8YW55PmRlc3QpO1xuICAgICAgaWYgKCg8YW55PmRyYWdEcm9wSW5mby50YXJnZXQpW1widGVtcGxhdGVcIl0gPT09IGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkcmFnRHJvcEluZm8ubmVzdGVkUGFuZWxEZXB0aCA8IDAgfHxcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPj0gcGFuZWwuZGVwdGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShcbiAgICAgICAgICA8UGFuZWxNb2RlbEJhc2U+KDxhbnk+ZGVzdCksXG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLnRhcmdldCxcbiAgICAgICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b21cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyxcbiAgICBkZXN0Um93OiBRdWVzdGlvblJvd01vZGVsLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gZGVzdFJvdy5lbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pO1xuICAgIGlmIChcbiAgICAgIGluZGV4ID09IDAgJiZcbiAgICAgICFkcmFnRHJvcEluZm8uaXNCb3R0b20gJiZcbiAgICAgIGRlc3RSb3cuZWxlbWVudHNbMF0uc3RhcnRXaXRoTmV3TGluZVxuICAgICkge1xuICAgICAgaWYgKGRlc3RSb3cuaW5kZXggPiAwKSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IHRydWU7XG4gICAgICAgIGRlc3RSb3cgPSBkZXN0Um93LnBhbmVsLnJvd3NbZGVzdFJvdy5pbmRleCAtIDFdO1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPVxuICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHNbZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb0V4aXN0aW5nUm93KFxuICAgICAgICAgIGRyYWdEcm9wSW5mbyxcbiAgICAgICAgICBkZXN0Um93LFxuICAgICAgICAgIHByZXZSb3dcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHByZXZSb3dJbmRleCA9IC0xO1xuICAgIGlmIChwcmV2Um93ID09IGRlc3RSb3cpIHtcbiAgICAgIHByZXZSb3dJbmRleCA9IGRlc3RSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICB9XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkgaW5kZXgrKztcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgIHNyY1JvdyA9PSBkZXN0Um93ICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMuaW5kZXhPZihkcmFnRHJvcEluZm8uc291cmNlKSA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPT0gcHJldlJvd0luZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZXZSb3dJbmRleCA+IC0xKSB7XG4gICAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShwcmV2Um93SW5kZXgsIDEpO1xuICAgICAgaWYgKHByZXZSb3dJbmRleCA8IGluZGV4KSBpbmRleC0tO1xuICAgIH1cbiAgICBkZXN0Um93LmVsZW1lbnRzLnNwbGljZShpbmRleCwgMCwgZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgZGVzdFJvdy51cGRhdGVWaXNpYmxlKCk7XG4gICAgcmV0dXJuIHByZXZSb3dJbmRleCA8IDA7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvTmV3Um93KFxuICAgIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvLFxuICAgIGRlc3RSb3c6IFF1ZXN0aW9uUm93TW9kZWwsXG4gICAgcHJldlJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICB2YXIgdGFyZ2V0Um93ID0gZGVzdFJvdy5wYW5lbC5jcmVhdGVSb3coKTtcbiAgICB0YXJnZXRSb3cuYWRkRWxlbWVudChkcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICB2YXIgaW5kZXggPSBkZXN0Um93LmluZGV4O1xuICAgIGlmIChkcmFnRHJvcEluZm8uaXNCb3R0b20pIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIC8vc2FtZSByb3dcbiAgICBpZiAoISFwcmV2Um93ICYmIHByZXZSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmIHByZXZSb3cuaW5kZXggPT0gaW5kZXgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNyY1JvdyA9IHRoaXMuZmluZFJvd0J5RWxlbWVudChkcmFnRHJvcEluZm8uc291cmNlKTtcbiAgICBpZiAoXG4gICAgICAhIXNyY1JvdyAmJlxuICAgICAgc3JjUm93LnBhbmVsID09IHRhcmdldFJvdy5wYW5lbCAmJlxuICAgICAgc3JjUm93LmVsZW1lbnRzLmxlbmd0aCA9PSAxICYmXG4gICAgICBzcmNSb3cuaW5kZXggPT0gaW5kZXhcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVzdFJvdy5wYW5lbC5yb3dzLnNwbGljZShpbmRleCwgMCwgdGFyZ2V0Um93KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShcbiAgICBwYW5lbDogUGFuZWxNb2RlbEJhc2UsXG4gICAgdGFyZ2V0OiBJRWxlbWVudCxcbiAgICBpc0JvdHRvbTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgdGFyZ2V0Um93ID0gcGFuZWwuY3JlYXRlUm93KCk7XG4gICAgdGFyZ2V0Um93LmFkZEVsZW1lbnQodGFyZ2V0KTtcbiAgICBpZiAocGFuZWwuZWxlbWVudHMubGVuZ3RoID09IDAgfHwgaXNCb3R0b20pIHtcbiAgICAgIHBhbmVsLnJvd3MucHVzaCh0YXJnZXRSb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYW5lbC5yb3dzLnNwbGljZSgwLCAwLCB0YXJnZXRSb3cpO1xuICAgIH1cbiAgfVxuICBkcmFnRHJvcE1vdmVFbGVtZW50KHNyYzogSUVsZW1lbnQsIHRhcmdldDogSUVsZW1lbnQsIHRhcmdldEluZGV4OiBudW1iZXIpIHtcbiAgICB2YXIgc3JjSW5kZXggPSAoPFBhbmVsTW9kZWxCYXNlPnNyYy5wYXJlbnQpLmVsZW1lbnRzLmluZGV4T2Yoc3JjKTtcbiAgICBpZiAodGFyZ2V0SW5kZXggPiBzcmNJbmRleCkge1xuICAgICAgdGFyZ2V0SW5kZXgtLTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVFbGVtZW50KHNyYyk7XG4gICAgdGhpcy5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKDAsIHRoaXMuZWxlbWVudHMubGVuZ3RoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgY29udGFpbmVyIGVsZW1lbnQsIHNpbWlsYXIgdG8gdGhlIFBhZ2Ugb2JqZWN0cy4gSG93ZXZlciwgdW5saWtlIHRoZSBQYWdlLCBQYW5lbCBjYW4ndCBiZSBhIHJvb3QuXG4gKiBJdCBtYXkgY29udGFpbiBxdWVzdGlvbnMgYW5kIG90aGVyIHBhbmVscy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElFbGVtZW50IHtcbiAgc3RhdGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBtaW5XaWR0aD86IHN0cmluZztcbiAgcHVibGljIG1heFdpZHRoPzogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwic3RhdGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGVDaGFuZ2VkQ2FsbGJhY2spIHNlbGYuc3RhdGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwid2lkdGhcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCEhc2VsZi5wYXJlbnQpIHtcbiAgICAgICAgc2VsZi5wYXJlbnQuZWxlbWVudFdpZHRoQ2hhbmdlZChzZWxmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJpbmRlbnRcIiwgXCJpbm5lckluZGVudFwiLCBcInJpZ2h0SW5kZW50XCJdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9uSW5kZW50Q2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYW5lbFwiO1xuICB9XG4gIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLm9uSW5kZW50Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0L3NldCB0aGUgcGFnZSB3aGVyZSB0aGUgcGFuZWwgaXMgbG9jYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBJUGFnZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZSh0aGlzLnBhcmVudCk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlKHZhbDogSVBhZ2UpIHtcbiAgICB0aGlzLnNldFBhZ2UodGhpcy5wYXJlbnQsIHZhbCk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxmRnJvbUxpc3QodGhpcy5wYXJlbnQuZWxlbWVudHMpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gXCJjb2xsYXBzZWRcIiB0byByZW5kZXIgb25seSBQYW5lbCB0aXRsZSBhbmQgZXhwYW5kZWQgYnV0dG9uIGFuZCB0byBcImV4cGFuZGVkXCIgdG8gcmVuZGVyIHRoZSBjb2xsYXBzZWQgYnV0dG9uIGluIHRoZSBQYW5lbCBjYXB0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhdGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBhbmVsIGlzIGluIHRoZSBjb2xsYXBzZWQgc3RhdGVcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIGNvbGxhcHNlXG4gICAqIEBzZWUgaXNFeHBhbmRlZFxuICAgKi9cbiAgcHVibGljIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PSBcImNvbGxhcHNlZFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBhbmVsIGlzIGluIHRoZSBleHBhbmRlZCBzdGF0ZVxuICAgKiBAc2VlIHN0YXRlXG4gICAqIEBzZWUgZXhwYW5kXG4gICAqIEBzZWUgaXNDb2xsYXBzZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PSBcImV4cGFuZGVkXCI7XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIHRoZSBQYW5lbFxuICAgKiBAc2VlIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgdGhpcy5zdGF0ZSA9IFwiY29sbGFwc2VkXCI7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgUGFuZWxcbiAgICogQHNlZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGV4cGFuZCgpIHtcbiAgICB0aGlzLnN0YXRlID0gXCJleHBhbmRlZFwiO1xuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHBhbmVsIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcGFuZWwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBzdXJ2ZXkuIENvbW1vbmx5IGl0IGlzIC0xIGFuZCBpdCBkb2Vzbid0IHNob3cuXG4gICAqIFlvdSBoYXZlIHRvIHNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc2hvdyBpbmRleC9udW1iZXJpbmcgZm9yIHRoZSBQYW5lbFxuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc3RhcnQgc2hvd2luZyB0aGUgbnVtYmVyIGZvciB0aGlzIHBhbmVsLlxuICAgKiBAc2VlIHZpc2libGVJbmRleFxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TnVtYmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TnVtYmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dOdW1iZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd051bWJlclwiLCB2YWwpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGVsZW1lbnRzIG51bWJlcnMgaW5zaWRlIHBhbmVsIGFyZSBkaXNwbGF5ZWQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBkZWZhdWx0YCAtIGRpc3BsYXkgcXVlc3Rpb25zIG51bWJlcnMgYXMgZGVmaW5lZCBpbiBwYXJlbnQgcGFuZWwgb3Igc3VydmV5XG4gICAqIC0gYG9ucGFuZWxgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycywgc3RhcnQgbnVtYmVyaW5nIGZyb20gYmVnaW5uaW5nIG9mIHRoaXMgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1F1ZXN0aW9uTnVtYmVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIFwiZGVmYXVsdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGZvciBlbGVtZW50cyBpbnNpZGUgdGhlIHBhbmVsLiBUaGUgZmlyc3QgcXVlc3Rpb24gaW5kZXggaXMgJzEuJyBieSBkZWZhdWx0IGFuZCBpdCBpcyB0YWtlbiBmcm9tIHN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXggcHJvcGVydHkuXG4gICAqIFlvdSBtYXkgc3RhcnQgaXQgZnJvbSAnMTAwJyBvciBmcm9tICdBJywgYnkgc2V0dGluZyAnMTAwJyBvciAnQScgdG8gdGhpcyBwcm9wZXJ0eS5cbiAgICogWW91IGNhbiBzZXQgdGhlIHN0YXJ0IGluZGV4IHRvIFwiKDEpXCIgb3IgXCIjIEEpXCIgb3IgXCJhKVwiIHRvIHJlbmRlciBxdWVzdGlvbiBudW1iZXIgYXMgKDEpLCAjIEEpIGFuZCBhKSBhY2NvcmRpbmdseS5cbiAgICogQHNlZSBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCkgcmV0dXJuIHRoaXMucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBzdXBlci5nZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5vKHZpc2libGVJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCJub1wiLFxuICAgICAgSGVscGVycy5nZXROdW1iZXJCeUluZGV4KHRoaXMudmlzaWJsZUluZGV4LCB0aGlzLmdldFN0YXJ0SW5kZXgoKSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHZpc2libGVJbmRleCA9IC0xO1xuICAgIGlmICh0aGlzLnNob3dOdW1iZXIgJiYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8ICF0aGlzLmxvY1RpdGxlLmlzRW1wdHkpKSB7XG4gICAgICB2aXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIHZpc2libGVJbmRleCk7XG4gICAgdGhpcy5zZXRObyh2aXNpYmxlSW5kZXgpO1xuICAgIHJldHVybiB2aXNpYmxlSW5kZXggPCAwID8gMCA6IDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib2ZmXCIpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25wYW5lbFwiKSByZXR1cm4gMDtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9mZlwiICYmIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9ucGFuZWxcIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYW5lbFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICBzdXBlci5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQgJiYgcmVjLnJlc3VsdCAmJiByZWMuZmlyZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkIHx8IHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIFwiW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRSZW5kZXJlZFRpdGxlKHN0cik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsZWZ0IGluZGVudC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gaW5jcmVhc2UgdGhlIHBhbmVsIGxlZnQgaW5kZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbm5lciBpbmRlbnQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGluY3JlYXNlIHRoZSBwYW5lbCBjb250ZW50IG1hcmdpbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5uZXJJbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJJbmRlbnRcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5lckluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVySW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIpO1xuICB9XG4gIHNldCByZW5kZXJXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBQYW5lbCByZW5kZXJzIG9uIHRoZSBuZXcgbGluZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGZhbHNlLCB0aGUgcGFuZWwgdHJpZXMgdG8gcmVuZGVyIG9uIHRoZSBzYW1lIGxpbmUvcm93IHdpdGggYSBwcmV2aW91cyBxdWVzdGlvbi9wYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRXaXRoTmV3TGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0YXJ0V2l0aE5ld0xpbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIsIHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJpZ2h0IGluZGVudCBvZiB0aGUgUGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJpZ2h0SW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJpZ2h0SW5kZW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmlnaHRJbmRlbnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCB2YWwpO1xuICB9XG4gIGdldCBwYWRkaW5nTGVmdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nTGVmdFwiLCB2YWwpO1xuICB9XG4gIGdldCBpbm5lclBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IGlubmVyUGFkZGluZ0xlZnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbm5lclBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdSaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nUmlnaHRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdSaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgb25JbmRlbnRDaGFuZ2VkKCkge1xuICAgIHRoaXMuaW5uZXJQYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmlubmVySW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5kZW50KTtcbiAgICB0aGlzLnBhZGRpbmdSaWdodCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLnJpZ2h0SW5kZW50KTtcbiAgfVxuICBwcml2YXRlIGdldEluZGVudFNpemUoaW5kZW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRlbnQgPCAxKSByZXR1cm4gXCJcIjtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIGNzcyA9ICg8YW55PnRoaXMpLnN1cnZleVtcImNzc1wiXTtcbiAgICBpZiAoIWNzcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGluZGVudCAqIGNzcy5xdWVzdGlvbi5pbmRlbnQgKyBcInB4XCI7XG4gIH1cbiAgcHVibGljIGNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgUXVlc3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIFBhbmVsTW9kZWwpIHtcbiAgICAgICAgZWxlbWVudC5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0VkaXRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnN0YXRlID09IFwicHJldmlld1wiKSByZXR1cm4gdGhpcy5kZXB0aCA9PSAxO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgY2FuY2VsUHJldmlldygpIHtcbiAgICBpZiAoIXRoaXMuaGFzRWRpdEJ1dHRvbikgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LmNhbmNlbFByZXZpZXdCeVBhZ2UodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgdGhpcy5ub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbGJhc2VcIixcbiAgW1xuICAgIFwibmFtZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZWxlbWVudHNcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwicXVlc3Rpb25cIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidmlzaWJsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVhZE9ubHk6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwiaGlkZGVuXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbEJhc2UoKTtcbiAgfVxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJzdGF0ZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIl0sXG4gICAgfSxcbiAgICBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic3RhcnRXaXRoTmV3TGluZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcIndpZHRoXCIsXG4gICAgeyBuYW1lOiBcImlubmVySW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10gfSxcbiAgICB7IG5hbWU6IFwiaW5kZW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBjaG9pY2VzOiBbMCwgMSwgMiwgM10gfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInBhZ2VcIixcbiAgICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgcmV0dXJuICFzdXJ2ZXkgfHwgc3VydmV5LnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgICB9LFxuICAgICAgY2hvaWNlczogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHN1cnZleVxuICAgICAgICAgID8gc3VydmV5LnBhZ2VzLm1hcCgocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBbXTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcInNob3dOdW1iZXI6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwib25wYW5lbFwiLCBcIm9mZlwiXSxcbiAgICB9LFxuICAgIFwicXVlc3Rpb25TdGFydEluZGV4XCIsXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFBhbmVsTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbGJhc2VcIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYW5lbC50cyIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29ySXRlbSB7XG4gIHB1YmxpYyBzdGFydDogbnVtYmVyO1xuICBwdWJsaWMgZW5kOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29yVmFsdWUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0V4aXN0cyA9IGZhbHNlO1xuICAgIHRoaXMuY2FuUHJvY2VzcyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHZhbHVlOiBhbnk7XG4gIHB1YmxpYyBpc0V4aXN0czogYm9vbGVhbjtcbiAgcHVibGljIGNhblByb2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0UHJlUHJvY2Vzc29yIHtcbiAgcHJpdmF0ZSBoYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTogYm9vbGVhbjtcbiAgcHVibGljIG9uUHJvY2VzczogKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHB1YmxpYyBwcm9jZXNzKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkb0VuY29kaW5nOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICB0aGlzLmhhc0FsbFZhbHVlc09uTGFzdFJ1blZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuICAgIGlmICghdGhpcy5vblByb2Nlc3MpIHJldHVybiB0ZXh0O1xuICAgIHZhciBpdGVtcyA9IHRoaXMuZ2V0SXRlbXModGV4dCk7XG4gICAgZm9yICh2YXIgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldE5hbWUodGV4dC5zdWJzdHJpbmcoaXRlbS5zdGFydCArIDEsIGl0ZW0uZW5kKSk7XG4gICAgICBpZiAoIW5hbWUpIGNvbnRpbnVlO1xuICAgICAgdmFyIHRleHRWYWx1ZSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yVmFsdWUobmFtZSwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICAgIHRoaXMub25Qcm9jZXNzKHRleHRWYWx1ZSk7XG4gICAgICBpZiAoIXRleHRWYWx1ZS5pc0V4aXN0cykge1xuICAgICAgICBpZiAodGV4dFZhbHVlLmNhblByb2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmhhc0FsbFZhbHVlc09uTGFzdFJ1blZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKSkge1xuICAgICAgICB0aGlzLmhhc0FsbFZhbHVlc09uTGFzdFJ1blZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcmVwbGFjZWRWYWx1ZSA9ICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpXG4gICAgICAgID8gdGV4dFZhbHVlLnZhbHVlXG4gICAgICAgIDogXCJcIjtcbiAgICAgIGlmIChkb0VuY29kaW5nKSB7XG4gICAgICAgIHJlcGxhY2VkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocmVwbGFjZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0ZXh0ID1cbiAgICAgICAgdGV4dC5zdWJzdHIoMCwgaXRlbS5zdGFydCkgKyByZXBsYWNlZFZhbHVlICsgdGV4dC5zdWJzdHIoaXRlbS5lbmQgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1zKHRleHQ6IHN0cmluZyk6IEFycmF5PFRleHRQcmVQcm9jZXNzb3JJdGVtPiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIHZhciBjaCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwie1wiKSBzdGFydCA9IGk7XG4gICAgICBpZiAoY2ggPT0gXCJ9XCIpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xuICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICBpdGVtLmVuZCA9IGk7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdGV4dFByZVByb2Nlc3Nvci50cyIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi4vZnVuY3Rpb25zZmFjdG9yeVwiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4uL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuaW1wb3J0IHsgZXF1YWwgfSBmcm9tIFwiYXNzZXJ0XCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcGVyYW5kIHtcbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnk7XG4gIHB1YmxpYyBhYnN0cmFjdCBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KTogYW55O1xuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPik6IHZvaWQge31cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgaXNBcml0aG1ldGljVmFsdWU6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3BlcmF0b3JOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBsZWZ0OiBhbnkgPSBudWxsLFxuICAgIHByaXZhdGUgcmlnaHQ6IGFueSA9IG51bGwsXG4gICAgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXNBcml0aG1ldGljVmFsdWUgPSBpc0FyaXRobWV0aWNPcDtcbiAgICBpZiAoaXNBcml0aG1ldGljT3ApIHtcbiAgICAgIHRoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW1wiYXJpdGhtZXRpY09wXCJdKFxuICAgICAgICBvcGVyYXRvck5hbWVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiaW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXJpdGhtZXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0FyaXRobWV0aWNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29uanVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lID09IFwib3JcIiB8fCB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcImFuZFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY29uanVuY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbmp1bmN0aW9uID8gdGhpcy5vcGVyYXRvck5hbWUgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvck5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBsZWZ0T3BlcmFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG4gIHB1YmxpYyBnZXQgcmlnaHRPcGVyYW5kKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZVBhcmFtKHg6IGFueSwgcHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4geCA9PSBudWxsID8gbnVsbCA6IHguZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnN1bWVyLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5ldmFsdWF0ZVBhcmFtKHRoaXMubGVmdCwgcHJvY2Vzc1ZhbHVlKSxcbiAgICAgIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLnJpZ2h0LCBwcm9jZXNzVmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdmFyIHJlcyA9IGZ1bmModGhpcyk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBcIihcIiArXG4gICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMubGVmdCwgZnVuYykgK1xuICAgICAgXCIgXCIgK1xuICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci5zYWZlVG9TdHJpbmcodGhpcy5yaWdodCwgZnVuYykgK1xuICAgICAgXCIpXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBpZiAodGhpcy5sZWZ0ICE9IG51bGwpIHRoaXMubGVmdC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICBpZiAodGhpcy5yaWdodCAhPSBudWxsKSB0aGlzLnJpZ2h0LnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoISF0aGlzLmxlZnQgJiYgdGhpcy5sZWZ0Lmhhc0Z1bmN0aW9uKCkpIHx8XG4gICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzRnVuY3Rpb24oKSlcbiAgICApO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoISF0aGlzLmxlZnQgJiYgdGhpcy5sZWZ0Lmhhc0FzeW5jRnVuY3Rpb24oKSkgfHxcbiAgICAgICghIXRoaXMucmlnaHQgJiYgdGhpcy5yaWdodC5oYXNBc3luY0Z1bmN0aW9uKCkpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPikge1xuICAgIGlmICghIXRoaXMubGVmdCkgdGhpcy5sZWZ0LmFkZFRvQXN5bmNMaXN0KGxpc3QpO1xuICAgIGlmICghIXRoaXMucmlnaHQpIHRoaXMucmlnaHQuYWRkVG9Bc3luY0xpc3QobGlzdCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYXJ5T3BlcmFuZCBleHRlbmRzIE9wZXJhbmQge1xuICBwcml2YXRlIGNvbnN1bWVyOiBGdW5jdGlvbjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHByZXNzaW9uVmFsdWU6IE9wZXJhbmQsIHByaXZhdGUgb3BlcmF0b3JOYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIudW5hcnlGdW5jdGlvbnNbb3BlcmF0b3JOYW1lXTtcbiAgICBpZiAodGhpcy5jb25zdW1lciA9PSBudWxsKSB7XG4gICAgICBPcGVyYW5kTWFrZXIudGhyb3dJbnZhbGlkT3BlcmF0b3JFcnJvcihvcGVyYXRvck5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBPcGVyYW5kIHtcbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ1bmFyeVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdmFyIHJlcyA9IGZ1bmModGhpcyk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBPcGVyYW5kTWFrZXIub3BlcmF0b3JUb1N0cmluZyh0aGlzLm9wZXJhdG9yTmFtZSkgK1xuICAgICAgXCIgXCIgK1xuICAgICAgdGhpcy5leHByZXNzaW9uLnRvU3RyaW5nKGZ1bmMpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5leHByZXNzaW9uLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlczogQXJyYXk8T3BlcmFuZD4pIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgXCJbXCIgK1xuICAgICAgdGhpcy52YWx1ZXNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoZWw6IE9wZXJhbmQpIHtcbiAgICAgICAgICByZXR1cm4gZWwudG9TdHJpbmcoZnVuYyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgXCJdXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5tYXAoZnVuY3Rpb24gKGVsOiBPcGVyYW5kKSB7XG4gICAgICByZXR1cm4gZWwuZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy52YWx1ZXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGVsLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5zb21lKChvcGVyYW5kKSA9PiBvcGVyYW5kLmhhc0Z1bmN0aW9uKCkpO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5zb21lKChvcGVyYW5kKSA9PiBvcGVyYW5kLmhhc0FzeW5jRnVuY3Rpb24oKSk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKChvcGVyYW5kKSA9PiBvcGVyYW5kLmFkZFRvQXN5bmNMaXN0KGxpc3QpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3QgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbnN0XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvcnJlY3RWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7fVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodGhpcy5pc0Jvb2xlYW5WYWx1ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICBpZiAoT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiMHhcIikgPT0gMCkgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNCb29sZWFuVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAmJlxuICAgICAgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIilcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZSBleHRlbmRzIENvbnN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YXJpYWJsZU5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHZhcmlhYmxlTmFtZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YXJpYWJsZVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdmFyIHJlcyA9IGZ1bmModGhpcyk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiBcIntcIiArIHRoaXMudmFyaWFibGVOYW1lICsgXCJ9XCI7XG4gIH1cbiAgcHVibGljIGdldCB2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZU5hbWU7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gcHJvY2Vzc1ZhbHVlLmhhc1ZhbHVlKHRoaXMudmFyaWFibGVOYW1lKVxuICAgICAgPyB0aGlzLmdldENvcnJlY3RWYWx1ZShwcm9jZXNzVmFsdWUuZ2V0VmFsdWUodGhpcy52YXJpYWJsZU5hbWUpKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdmFyaWFibGVzLnB1c2godGhpcy52YXJpYWJsZU5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbk9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBpc1JlYWR5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgYXN5blJlc3VsdDogYW55O1xuICBwdWJsaWMgb25Bc3luY1JlYWR5OiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9yaWdpb25hbFZhbHVlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBBcnJheU9wZXJhbmRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpICYmIHBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMgPSBuZXcgQXJyYXlPcGVyYW5kKFtdKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiO1xuICB9XG4gIHB1YmxpYyBldmFsdWF0ZUFzeW5jKHByb2Nlc3NWYWx1ZTogUHJvY2Vzc1ZhbHVlKSB7XG4gICAgdGhpcy5pc1JlYWR5VmFsdWUgPSBmYWxzZTtcbiAgICB2YXIgYXN5bmNQcm9jZXNzVmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCk7XG4gICAgYXN5bmNQcm9jZXNzVmFsdWUudmFsdWVzID0gSGVscGVycy5jcmVhdGVDb3B5KHByb2Nlc3NWYWx1ZS52YWx1ZXMpO1xuICAgIGFzeW5jUHJvY2Vzc1ZhbHVlLnByb3BlcnRpZXMgPSBIZWxwZXJzLmNyZWF0ZUNvcHkocHJvY2Vzc1ZhbHVlLnByb3BlcnRpZXMpO1xuICAgIGFzeW5jUHJvY2Vzc1ZhbHVlLnByb3BlcnRpZXMucmV0dXJuUmVzdWx0ID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICB0aGlzLmFzeW5SZXN1bHQgPSByZXN1bHQ7XG4gICAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLm9uQXN5bmNSZWFkeSgpO1xuICAgIH07XG4gICAgdGhpcy5ldmFsdWF0ZUNvcmUoYXN5bmNQcm9jZXNzVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzUmVhZHkpIHJldHVybiB0aGlzLmFzeW5SZXN1bHQ7XG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb3JlKHByb2Nlc3NWYWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBldmFsdWF0ZUNvcmUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJ1bihcbiAgICAgIHRoaXMub3JpZ2lvbmFsVmFsdWUsXG4gICAgICB0aGlzLnBhcmFtZXRlcnMuZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKSxcbiAgICAgIHByb2Nlc3NWYWx1ZS5wcm9wZXJ0aWVzXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCkge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcmlnaW9uYWxWYWx1ZSArIFwiKFwiICsgdGhpcy5wYXJhbWV0ZXJzLnRvU3RyaW5nKGZ1bmMpICsgXCIpXCI7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMucGFyYW1ldGVycy5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICB9XG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmlzQXN5bmNGdW5jdGlvbih0aGlzLm9yaWdpb25hbFZhbHVlKTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPikge1xuICAgIGlmICh0aGlzLmhhc0FzeW5jRnVuY3Rpb24oKSkge1xuICAgICAgbGlzdC5wdXNoKHRoaXMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmFuZE1ha2VyIHtcbiAgc3RhdGljIHRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3A6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3BlcmF0b3I6ICdcIiArIG9wICsgXCInXCIpO1xuICB9XG5cbiAgc3RhdGljIHNhZmVUb1N0cmluZyhvcGVyYW5kOiBPcGVyYW5kLCBmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wZXJhbmQgPT0gbnVsbCA/IFwiXCIgOiBvcGVyYW5kLnRvU3RyaW5nKGZ1bmMpO1xuICB9XG5cbiAgc3RhdGljIHRvT3BlcmFuZFN0cmluZyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICAhIXZhbHVlICYmXG4gICAgICAhT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkgJiZcbiAgICAgICFPcGVyYW5kTWFrZXIuaXNCb29sZWFuVmFsdWUodmFsdWUpXG4gICAgKVxuICAgICAgdmFsdWUgPSBcIidcIiArIHZhbHVlICsgXCInXCI7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGlzU3BhY2VTdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdHIgJiYgIXN0ci5yZXBsYWNlKFwiIFwiLCBcIlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBpc051bWVyaWModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgICh2YWx1ZS5pbmRleE9mKFwiLVwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIrXCIpID4gMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiKlwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCJeXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIi9cIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiJVwiKSA+IC0xKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNOdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzQm9vbGVhblZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIilcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIHVuYXJ5RnVuY3Rpb25zOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0ge1xuICAgIGVtcHR5OiBmdW5jdGlvbiAodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgICB9LFxuICAgIG5vdGVtcHR5OiBmdW5jdGlvbiAodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFPcGVyYW5kTWFrZXIudW5hcnlGdW5jdGlvbnMuZW1wdHkodmFsdWUpO1xuICAgIH0sXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmFsdWU7XG4gICAgfSxcbiAgfTtcblxuICBzdGF0aWMgYmluYXJ5RnVuY3Rpb25zOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0ge1xuICAgIGFyaXRobWV0aWNPcChvcGVyYXRvck5hbWU6IHN0cmluZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShhKSAmJiAhT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcoYSkpIHtcbiAgICAgICAgICBhID0gdHlwZW9mIGIgPT09IFwic3RyaW5nXCIgPyBcIlwiIDogMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkoYikgJiYgIU9wZXJhbmRNYWtlci5pc1NwYWNlU3RyaW5nKGIpKSB7XG4gICAgICAgICAgYiA9IHR5cGVvZiBhID09PSBcInN0cmluZ1wiID8gXCJcIiA6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgICAgIHJldHVybiBjb25zdW1lciA9PSBudWxsID8gbnVsbCA6IGNvbnN1bWVyLmNhbGwodGhpcywgYSwgYik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYW5kOiBmdW5jdGlvbiAoYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGEgJiYgYjtcbiAgICB9LFxuICAgIG9yOiBmdW5jdGlvbiAoYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGEgfHwgYjtcbiAgICB9LFxuICAgIHBsdXM6IGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gYSArIGI7XG4gICAgfSxcbiAgICBtaW51czogZnVuY3Rpb24gKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9LFxuICAgIG11bDogZnVuY3Rpb24gKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBhICogYjtcbiAgICB9LFxuICAgIGRpdjogZnVuY3Rpb24gKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIGlmICghYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gYSAvIGI7XG4gICAgfSxcbiAgICBtb2Q6IGZ1bmN0aW9uIChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICBpZiAoIWIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGEgJSBiO1xuICAgIH0sXG4gICAgcG93ZXI6IGZ1bmN0aW9uIChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coYSwgYik7XG4gICAgfSxcbiAgICBncmVhdGVyOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0ID4gcmlnaHQ7XG4gICAgfSxcbiAgICBsZXNzOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7XG4gICAgfSxcbiAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24gKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZXF1YWwobGVmdCwgcmlnaHQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmdyZWF0ZXIobGVmdCwgcmlnaHQpO1xuICAgIH0sXG4gICAgbGVzc29yZXF1YWw6IGZ1bmN0aW9uIChsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5sZXNzKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGVxdWFsOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKGxlZnQsIHJpZ2h0LCB0cnVlKTtcbiAgICB9LFxuICAgIG5vdGVxdWFsOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhsZWZ0LCByaWdodCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBjb250YWluczogZnVuY3Rpb24gKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnNDb3JlKGxlZnQsIHJpZ2h0LCB0cnVlKTtcbiAgICB9LFxuICAgIG5vdGNvbnRhaW5zOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWluc0NvcmUobGVmdCwgcmlnaHQsIGZhbHNlKTtcbiAgICB9LFxuICAgIGFueW9mOiBmdW5jdGlvbiAobGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICghbGVmdCB8fCAoIUFycmF5LmlzQXJyYXkobGVmdCkgJiYgbGVmdC5sZW5ndGggPT09IDApKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShsZWZ0KSlcbiAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMocmlnaHQsIGxlZnQpO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJpZ2h0KSlcbiAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByaWdodC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodFtpXSkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYWxsb2Y6IGZ1bmN0aW9uIChsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICghbGVmdCAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkocmlnaHQpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodFtpXSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBjb250YWluc0NvcmU6IGZ1bmN0aW9uIChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIGlzQ29udGFpbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFsZWZ0KSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWxlZnQubGVuZ3RoKSB7XG4gICAgICAgIGxlZnQgPSBsZWZ0LnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIgfHwgbGVmdCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBpZiAoIXJpZ2h0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHQudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGZvdW5kID0gbGVmdC5pbmRleE9mKHJpZ2h0KSA+IC0xO1xuICAgICAgICByZXR1cm4gaXNDb250YWlucyA/IGZvdW5kIDogIWZvdW5kO1xuICAgICAgfVxuICAgICAgdmFyIHJpZ2h0QXJyYXkgPSBBcnJheS5pc0FycmF5KHJpZ2h0KSA/IHJpZ2h0IDogW3JpZ2h0XTtcbiAgICAgIGZvciAodmFyIHJJbmRleCA9IDA7IHJJbmRleCA8IHJpZ2h0QXJyYXkubGVuZ3RoOyBySW5kZXgrKykge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHRBcnJheVtySW5kZXhdO1xuICAgICAgICBmb3IgKDsgaSA8IGxlZnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKGxlZnRbaV0sIHJpZ2h0KSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT0gbGVmdC5sZW5ndGgpIHJldHVybiAhaXNDb250YWlucztcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0NvbnRhaW5zO1xuICAgIH0sXG4gIH07XG5cbiAgc3RhdGljIG9wZXJhdG9yVG9TdHJpbmcob3BlcmF0b3JOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBvcFN0ciA9IE9wZXJhbmRNYWtlci5zaWduc1tvcGVyYXRvck5hbWVdO1xuICAgIHJldHVybiBvcFN0ciA9PSBudWxsID8gb3BlcmF0b3JOYW1lIDogb3BTdHI7XG4gIH1cblxuICBzdGF0aWMgc2lnbnM6IEhhc2hUYWJsZTxzdHJpbmc+ID0ge1xuICAgIGxlc3M6IFwiPFwiLFxuICAgIGxlc3NvcmVxdWFsOiBcIjw9XCIsXG4gICAgZ3JlYXRlcjogXCI+XCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwiPj1cIixcbiAgICBlcXVhbDogXCI9PVwiLFxuICAgIG5vdGVxdWFsOiBcIiE9XCIsXG4gICAgcGx1czogXCIrXCIsXG4gICAgbWludXM6IFwiLVwiLFxuICAgIG11bDogXCIqXCIsXG4gICAgZGl2OiBcIi9cIixcbiAgICBhbmQ6IFwiYW5kXCIsXG4gICAgb3I6IFwib3JcIixcbiAgICBwb3dlcjogXCJeXCIsXG4gICAgbW9kOiBcIiVcIixcbiAgICBuZWdhdGU6IFwiIVwiLFxuICB9O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zLnRzIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogRnVuY3Rpb25GYWN0b3J5ID0gbmV3IEZ1bmN0aW9uRmFjdG9yeSgpO1xuICBwcml2YXRlIGZ1bmN0aW9uSGFzaDogSGFzaFRhYmxlPChwYXJhbXM6IGFueVtdKSA9PiBhbnk+ID0ge307XG4gIHByaXZhdGUgaXNBc3luY0hhc2g6IEhhc2hUYWJsZTxib29sZWFuPiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZnVuYzogKHBhcmFtczogYW55W10pID0+IGFueSxcbiAgICBpc0FzeW5jOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV0gPSBmdW5jO1xuICAgIGlmIChpc0FzeW5jKSB0aGlzLmlzQXN5bmNIYXNoW25hbWVdID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5yZWdpc3RlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gICAgZGVsZXRlIHRoaXMuaXNBc3luY0hhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGhhc0Z1bmN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICB9XG4gIHB1YmxpYyBpc0FzeW5jRnVuY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pc0FzeW5jSGFzaFtuYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmZ1bmN0aW9uSGFzaCA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRBbGwoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmZ1bmN0aW9uSGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIHJ1bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBhbnlbXSxcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYW55IHtcbiAgICB2YXIgZnVuYyA9IHRoaXMuZnVuY3Rpb25IYXNoW25hbWVdO1xuICAgIGlmICghZnVuYykgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNsYXNzUnVubmVyID0ge1xuICAgICAgZnVuYzogZnVuYyxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICg8YW55PmNsYXNzUnVubmVyKVtrZXldID0gcHJvcGVydGllc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xhc3NSdW5uZXIuZnVuYyhwYXJhbXMpO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgcmVnaXN0ZXJGdW5jdGlvbiA9IEZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcjtcblxuZnVuY3Rpb24gZ2V0UGFyYW1zQXNBcnJheSh2YWx1ZTogYW55LCBhcnI6IGFueVtdKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdldFBhcmFtc0FzQXJyYXkodmFsdWVbaV0sIGFycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdW0ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJzdW1cIiwgc3VtKTtcblxuZnVuY3Rpb24gbWluX21heChwYXJhbXM6IGFueVtdLCBpc01pbjogYm9vbGVhbik6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgICBpZiAoaXNNaW4pIHtcbiAgICAgIGlmIChyZXMgPiBhcnJbaV0pIHJlcyA9IGFycltpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlcyA8IGFycltpXSkgcmVzID0gYXJyW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBtaW4ocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBtaW5fbWF4KHBhcmFtcywgdHJ1ZSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5cIiwgbWluKTtcblxuZnVuY3Rpb24gbWF4KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gbWluX21heChwYXJhbXMsIGZhbHNlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1heFwiLCBtYXgpO1xuXG5mdW5jdGlvbiBjb3VudChwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHJldHVybiBhcnIubGVuZ3RoO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY291bnRcIiwgY291bnQpO1xuXG5mdW5jdGlvbiBhdmcocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciBhcnI6IGFueVtdID0gW107XG4gIGdldFBhcmFtc0FzQXJyYXkocGFyYW1zLCBhcnIpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICByZXMgKz0gYXJyW2ldO1xuICB9XG4gIHJldHVybiBhcnIubGVuZ3RoID4gMCA/IHJlcyAvIGFyci5sZW5ndGggOiAwO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYXZnXCIsIGF2Zyk7XG5cbmZ1bmN0aW9uIGdldEluQXJyYXlQYXJhbXMocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmIChwYXJhbXMubGVuZ3RoICE9IDIpIHJldHVybiBudWxsO1xuICB2YXIgYXJyID0gcGFyYW1zWzBdO1xuICBpZiAoIWFycikgcmV0dXJuIG51bGw7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpICYmICFBcnJheS5pc0FycmF5KE9iamVjdC5rZXlzKGFycikpKSByZXR1cm4gbnVsbDtcbiAgdmFyIG5hbWUgPSBwYXJhbXNbMV07XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIiAmJiAhKG5hbWUgaW5zdGFuY2VvZiBTdHJpbmcpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgZGF0YTogYXJyLCBuYW1lOiBuYW1lIH07XG59XG5cbmZ1bmN0aW9uIGNhbGNJbkFycmF5KFxuICBwYXJhbXM6IGFueVtdLFxuICBmdW5jOiAocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKSA9PiBudW1iZXJcbik6IGFueSB7XG4gIHZhciB2ID0gZ2V0SW5BcnJheVBhcmFtcyhwYXJhbXMpO1xuICBpZiAoIXYpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KHYuZGF0YSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB2LmRhdGFbaV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiB2LmRhdGEpIHtcbiAgICAgIHZhciBpdGVtID0gdi5kYXRhW2tleV07XG4gICAgICBpZiAoISFpdGVtICYmIGl0ZW1bPHN0cmluZz52Lm5hbWVdKSB7XG4gICAgICAgIHJlcyA9IGZ1bmMocmVzLCBpdGVtWzxzdHJpbmc+di5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHN1bUluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHZhciByZXMgPSBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uIChyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSAwO1xuICAgIHJldHVybiArcmVzICsgK3ZhbDtcbiAgfSk7XG4gIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCA/IHJlcyA6IDA7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJzdW1JbkFycmF5XCIsIHN1bUluQXJyYXkpO1xuXG5mdW5jdGlvbiBtaW5JbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbiAocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmVzID09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gcmVzIDwgdmFsID8gcmVzIDogdmFsO1xuICB9KTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1pbkluQXJyYXlcIiwgbWluSW5BcnJheSk7XG5cbmZ1bmN0aW9uIG1heEluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uIChyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiByZXMgPiB2YWwgPyByZXMgOiB2YWw7XG4gIH0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4SW5BcnJheVwiLCBtYXhJbkFycmF5KTtcblxuZnVuY3Rpb24gY291bnRJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgcmVzID0gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbiAocmVzOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAocmVzID09IHVuZGVmaW5lZCkgcmVzID0gMDtcbiAgICByZXR1cm4gcmVzICsgMTtcbiAgfSk7XG4gIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCA/IHJlcyA6IDA7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjb3VudEluQXJyYXlcIiwgY291bnRJbkFycmF5KTtcblxuZnVuY3Rpb24gYXZnSW5BcnJheShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGNvdW50ID0gY291bnRJbkFycmF5KHBhcmFtcyk7XG4gIGlmIChjb3VudCA9PSAwKSByZXR1cm4gMDtcbiAgcmV0dXJuIHN1bUluQXJyYXkocGFyYW1zKSAvIGNvdW50O1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYXZnSW5BcnJheVwiLCBhdmdJbkFycmF5KTtcblxuZnVuY3Rpb24gaWlmKHBhcmFtczogYW55W10pOiBhbnkge1xuICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAzKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIHBhcmFtc1swXSA/IHBhcmFtc1sxXSA6IHBhcmFtc1syXTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlpZlwiLCBpaWYpO1xuXG5mdW5jdGlvbiBnZXREYXRlKHBhcmFtczogYW55W10pOiBhbnkge1xuICBpZiAoIXBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoIDwgMSkgcmV0dXJuIG51bGw7XG4gIGlmICghcGFyYW1zWzBdKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIG5ldyBEYXRlKHBhcmFtc1swXSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJnZXREYXRlXCIsIGdldERhdGUpO1xuXG5mdW5jdGlvbiBhZ2UocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFwYXJhbXNbMF0pIHJldHVybiBudWxsO1xuICB2YXIgYmlydGhEYXkgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICB2YXIgYWdlRGlmTXMgPSBEYXRlLm5vdygpIC0gYmlydGhEYXkuZ2V0VGltZSgpO1xuICB2YXIgYWdlRGF0ZSA9IG5ldyBEYXRlKGFnZURpZk1zKTsgLy8gbWlsaXNlY29uZHMgZnJvbSBlcG9jaFxuICByZXR1cm4gTWF0aC5hYnMoYWdlRGF0ZS5nZXRVVENGdWxsWWVhcigpIC0gMTk3MCk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhZ2VcIiwgYWdlKTtcblxuZnVuY3Rpb24gaXNDb250YWluZXJSZWFkeShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFwYXJhbXNbMF0gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gZmFsc2U7XG4gIHZhciBuYW1lID0gcGFyYW1zWzBdO1xuICB2YXIgY29udGFpbmVyID0gdGhpcy5zdXJ2ZXkuZ2V0UGFnZUJ5TmFtZShuYW1lKTtcbiAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IHRoaXMuc3VydmV5LmdldFBhbmVsQnlOYW1lKG5hbWUpO1xuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIGZhbHNlO1xuICB2YXIgcXVlc3Rpb25zID0gY29udGFpbmVyLnF1ZXN0aW9ucztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocXVlc3Rpb25zW2ldLmhhc0Vycm9ycyhmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzQ29udGFpbmVyUmVhZHlcIiwgaXNDb250YWluZXJSZWFkeSk7XG5cbmZ1bmN0aW9uIGlzRGlzcGxheU1vZGUoKSB7XG4gIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiaXNEaXNwbGF5TW9kZVwiLCBpc0Rpc3BsYXlNb2RlKTtcblxuZnVuY3Rpb24gY3VycmVudERhdGUoKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiY3VycmVudERhdGVcIiwgY3VycmVudERhdGUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Z1bmN0aW9uc2ZhY3RvcnkudHMiLCJpbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbixcbiAgSnNvbk9iamVjdFByb3BlcnR5LFxuICBTZXJpYWxpemVyLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCB9IGZyb20gXCIuL21hcnRpeEJhc2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElRdWVzdGlvbixcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElTdXJ2ZXlJbXBsLFxuICBJVGV4dFByb2Nlc3NvcixcbiAgU3VydmV5RXJyb3IsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFRleHRQcmVQcm9jZXNzb3IsIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB9IGZyb20gXCIuL3RleHRQcmVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IGdldEN1cnJlY3lDb2RlcyB9IGZyb20gXCIuL3F1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgdmFsdWU6IGFueTtcbiAgb25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuXG4gICk6IHZvaWQ7XG4gIG9uUm93Q2hhbmdpbmcoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBhbnk7XG4gIGdldFJvd0luZGV4KHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBudW1iZXI7XG4gIHZhbGlkYXRlQ2VsbChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IFN1cnZleUVycm9yO1xuICBjb2x1bW5zOiBBcnJheTxNYXRyaXhEcm9wZG93bkNvbHVtbj47XG4gIGNyZWF0ZVF1ZXN0aW9uKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApOiBRdWVzdGlvbjtcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZztcbiAgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IFF1ZXN0aW9uO1xuICBvblRvdGFsVmFsdWVDaGFuZ2VkKCk6IGFueTtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeENvbHVtbk93bmVyIGV4dGVuZHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBnZXRSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xuICBvbkNvbHVtblByb3BlcnR5Q2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICk6IHZvaWQ7XG4gIG9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nO1xuICBvbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogdm9pZDtcbn1cblxuZnVuY3Rpb24gb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKFxuICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgcXVlc3Rpb246IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGlmIChjZWxsUXVlc3Rpb24uaGFzT3RoZXIpIHtcbiAgICBjZWxsUXVlc3Rpb24uc3RvcmVPdGhlcnNBc0NvbW1lbnQgPSBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgKCFjZWxsUXVlc3Rpb24uY2hvaWNlcyB8fCBjZWxsUXVlc3Rpb24uY2hvaWNlcy5sZW5ndGggPT0gMCkgJiZcbiAgICBjZWxsUXVlc3Rpb24uY2hvaWNlc0J5VXJsLmlzRW1wdHlcbiAgKSB7XG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzO1xuICB9XG4gIGlmICghY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5pc0VtcHR5KSB7XG4gICAgY2VsbFF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oZGF0YSk7XG4gIH1cbn1cbmV4cG9ydCB2YXIgbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcyA9IHtcbiAgZHJvcGRvd246IHtcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICBcImNob2ljZXNcIixcbiAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgIF0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7XG4gICAgICBvblVwZGF0ZVNlbGVjdEJhc2VDZWxsUXVlc3Rpb24oY2VsbFF1ZXN0aW9uLCBjb2x1bW4sIHF1ZXN0aW9uLCBkYXRhKTtcbiAgICAgIGlmIChcbiAgICAgICAgY2VsbFF1ZXN0aW9uLmxvY09wdGlvbnNDYXB0aW9uLmlzRW1wdHkgJiZcbiAgICAgICAgIXF1ZXN0aW9uLmxvY09wdGlvbnNDYXB0aW9uLmlzRW1wdHlcbiAgICAgICkge1xuICAgICAgICBjZWxsUXVlc3Rpb24ub3B0aW9uc0NhcHRpb24gPSBxdWVzdGlvbi5vcHRpb25zQ2FwdGlvbjtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIFwiY2hvaWNlc1wiLFxuICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgIFwiY2hvaWNlc0J5VXJsXCIsXG4gICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgXCJjaG9pY2VzVmlzaWJsZUlmXCIsXG4gICAgICBcImhhc1NlbGVjdEFsbFwiLFxuICAgICAgXCJoYXNOb25lXCIsXG4gICAgXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHtcbiAgICAgIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihjZWxsUXVlc3Rpb24sIGNvbHVtbiwgcXVlc3Rpb24sIGRhdGEpO1xuICAgICAgY2VsbFF1ZXN0aW9uLmNvbENvdW50ID1cbiAgICAgICAgY29sdW1uLmNvbENvdW50ID4gLTEgPyBjb2x1bW4uY29sQ291bnQgOiBxdWVzdGlvbi5jb2x1bW5Db2xDb3VudDtcbiAgICB9LFxuICB9LFxuICByYWRpb2dyb3VwOiB7XG4gICAgcHJvcGVydGllczogW1xuICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxuICAgICAgXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgIFwib3RoZXJUZXh0XCIsXG4gICAgICBcImNob2ljZXNWaXNpYmxlSWZcIixcbiAgICBdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XG4gICAgICBjZWxsUXVlc3Rpb24uY29sQ291bnQgPVxuICAgICAgICBjb2x1bW4uY29sQ291bnQgPiAtMSA/IGNvbHVtbi5jb2xDb3VudCA6IHF1ZXN0aW9uLmNvbHVtbkNvbENvdW50O1xuICAgIH0sXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJwbGFjZUhvbGRlclwiLCBcImlucHV0VHlwZVwiLCBcIm1heExlbmd0aFwiLCBcIm1pblwiLCBcIm1heFwiLCBcInN0ZXBcIl0sXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxuICAgICAgY29sdW1uOiBhbnksXG4gICAgICBxdWVzdGlvbjogYW55LFxuICAgICAgZGF0YTogYW55XG4gICAgKSA9PiB7fSxcbiAgfSxcbiAgY29tbWVudDoge1xuICAgIHByb3BlcnRpZXM6IFtcInBsYWNlSG9sZGVyXCIsIFwicm93c1wiLCBcIm1heExlbmd0aFwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHt9LFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgcHJvcGVydGllczogW1wiZGVmYXVsdFZhbHVlXCJdLFxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcbiAgICAgIGNvbHVtbjogYW55LFxuICAgICAgcXVlc3Rpb246IGFueSxcbiAgICAgIGRhdGE6IGFueVxuICAgICkgPT4ge1xuICAgICAgY2VsbFF1ZXN0aW9uLnNob3dUaXRsZSA9IHRydWU7XG4gICAgfSxcbiAgfSxcbiAgZXhwcmVzc2lvbjoge1xuICAgIHByb3BlcnRpZXM6IFtcImV4cHJlc3Npb25cIiwgXCJkaXNwbGF5U3R5bGVcIiwgXCJjdXJyZW5jeVwiXSxcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXG4gICAgICBjb2x1bW46IGFueSxcbiAgICAgIHF1ZXN0aW9uOiBhbnksXG4gICAgICBkYXRhOiBhbnlcbiAgICApID0+IHt9LFxuICB9LFxuICByYXRpbmc6IHtcbiAgICBwcm9wZXJ0aWVzOiBbXCJyYXRlVmFsdWVzXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ29sdW1uIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgcHVibGljIHN0YXRpYyBnZXRDb2x1bW5UeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMpIHtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSB0ZW1wbGF0ZVF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xuICBwcml2YXRlIGNvbE93bmVyVmFsdWU6IElNYXRyaXhDb2x1bW5Pd25lciA9IG51bGw7XG4gIHByaXZhdGUgaW5kZXhWYWx1ZSA9IC0xO1xuICBwcml2YXRlIF9pc1Zpc2libGUgPSB0cnVlO1xuICBwcml2YXRlIF9oYXNWaXNpYmxlQ2VsbCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbEZvcm1hdFwiLCB0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzaG93SW5NdWx0aXBsZUNvbHVtbnNcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5kb1Nob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgaWYgKHRpdGxlKSB0aGlzLnRpdGxlID0gdGl0bGU7XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgfVxuICBnZXREeW5hbWljUHJvcGVydHlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2VsbFR5cGVcIjtcbiAgfVxuICBnZXREeW5hbWljVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhbGNDZWxsUXVlc3Rpb25UeXBlKCk7XG4gIH1cbiAgcHVibGljIGdldCBjb2xPd25lcigpOiBJTWF0cml4Q29sdW1uT3duZXIge1xuICAgIHJldHVybiB0aGlzLmNvbE93bmVyVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjb2xPd25lcih2YWx1ZTogSU1hdHJpeENvbHVtbk93bmVyKSB7XG4gICAgdGhpcy5jb2xPd25lclZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGFkZFVzZWRMb2NhbGVzKGxvY2FsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBzdXBlci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uYWRkVXNlZExvY2FsZXMobG9jYWxlcyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuaW5kZXhWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2VsbFR5cGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5jb2xPd25lcikge1xuICAgICAgdGhpcy5jb2xPd25lci5vbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICB9XG4gIHB1YmxpYyBzZXRJc1Zpc2libGUobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNWaXNpYmxlID0gbmV3VmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVmlzaWJsZUNlbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Zpc2libGVDZWxsO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzVmlzaWJsZUNlbGwobmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGFzVmlzaWJsZUNlbGwgPSBuZXdWYWw7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi50aXRsZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnRpdGxlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHRPckh0bWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dCA9IHZhbDtcbiAgfVxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlYWRPbmx5O1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlYWRPbmx5ID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5oYXNPdGhlcjtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5oYXNPdGhlciA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnZpc2libGVJZiA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGVuYWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5lbmFibGVJZjtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuYWJsZUlmID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZjtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVxdWlyZWRJZiA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dJbk11bHRpcGxlQ29sdW1ucyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SW5NdWx0aXBsZUNvbHVtbnNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1wiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCJdLmluZGV4T2YodGhpcy5jZWxsVHlwZSkgPiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dJbk11bHRpcGxlQ29sdW1ucyAmJiB0aGlzLmlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucztcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52YWxpZGF0b3JzO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIiwgXCJub25lXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbEV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG90YWxFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxFeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb3RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFR5cGUgIT0gXCJub25lXCIgfHwgISF0aGlzLnRvdGFsRXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbEZvcm1hdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxGb3JtYXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jVG90YWxGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxGb3JtYXRcIik7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbERpc3BsYXlTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbERpc3BsYXlTdHlsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsRGlzcGxheVN0eWxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxEaXNwbGF5U3R5bGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsQ3VycmVuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsQ3VycmVuY3kodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZ2V0Q3VycmVjeUNvZGVzKCkuaW5kZXhPZih2YWwpIDwgMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsQ3VycmVuY3lcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5XaWR0aFwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCBjb2xDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiA0KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0KSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUNlbGxRdWVzdGlvbihkYXRhOiBhbnkpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHFUeXBlID0gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZSgpO1xuICAgIHZhciBjZWxsUXVlc3Rpb24gPSA8UXVlc3Rpb24+dGhpcy5jcmVhdGVOZXdRdWVzdGlvbihxVHlwZSk7XG4gICAgdGhpcy5jYWxsT25DZWxsUXVlc3Rpb25VcGRhdGUoY2VsbFF1ZXN0aW9uLCBkYXRhKTtcbiAgICByZXR1cm4gY2VsbFF1ZXN0aW9uO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb24oXG4gICAgY2VsbFF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBkYXRhOiBhbnksXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKGNlbGxRdWVzdGlvbiwgb25VcGRhdGVKc29uKTtcbiAgICB0aGlzLmNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb24sIGRhdGEpO1xuICB9XG4gIHByaXZhdGUgY2FsbE9uQ2VsbFF1ZXN0aW9uVXBkYXRlKGNlbGxRdWVzdGlvbjogUXVlc3Rpb24sIGRhdGE6IGFueSkge1xuICAgIHZhciBxVHlwZSA9IGNlbGxRdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgdmFyIHFEZWZpbml0aW9uID0gKDxhbnk+bWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcylbcVR5cGVdO1xuICAgIGlmIChxRGVmaW5pdGlvbiAmJiBxRGVmaW5pdGlvbltcIm9uQ2VsbFF1ZXN0aW9uVXBkYXRlXCJdKSB7XG4gICAgICBxRGVmaW5pdGlvbltcIm9uQ2VsbFF1ZXN0aW9uVXBkYXRlXCJdKFxuICAgICAgICBjZWxsUXVlc3Rpb24sXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuY29sT3duZXIsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGRlZmF1bHRDZWxsVHlwZUNoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDZWxsUXVlc3Rpb25UeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2VsbFR5cGUgIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy5jZWxsVHlwZTtcbiAgICBpZiAodGhpcy5jb2xPd25lcikgcmV0dXJuIHRoaXMuY29sT3duZXIuZ2V0Q2VsbFR5cGUoKTtcbiAgICByZXR1cm4gc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCkge1xuICAgIHZhciBwcmV2Q2VsbFR5cGUgPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb25cbiAgICAgID8gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmdldFR5cGUoKVxuICAgICAgOiBcIlwiO1xuICAgIHZhciBjdXJDZWxsVHlwZSA9IHRoaXMuY2FsY0NlbGxRdWVzdGlvblR5cGUoKTtcbiAgICBpZiAoY3VyQ2VsbFR5cGUgPT09IHByZXZDZWxsVHlwZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucmVtb3ZlUHJvcGVydGllcyhwcmV2Q2VsbFR5cGUpO1xuICAgIH1cbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlTmV3UXVlc3Rpb24oY3VyQ2VsbFR5cGUpO1xuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5hZGRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbiAoc2VuZGVyLCBvcHRpb25zKSB7XG4gICAgICBzZWxmLmRvQ29sdW1uUHJvcGVydGllc0NoYW5nZWQob3B0aW9ucy5uYW1lLCBvcHRpb25zLm5ld1ZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UXVlc3Rpb24oY2VsbFR5cGU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSA8UXVlc3Rpb24+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhjZWxsVHlwZSk7XG4gICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgcXVlc3Rpb24gPSA8UXVlc3Rpb24+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInRleHRcIik7XG4gICAgfVxuICAgIHF1ZXN0aW9uLmxvYWRpbmdPd25lciA9IHRoaXM7XG4gICAgdGhpcy5zZXRRdWVzdGlvblByb3BlcnRpZXMocXVlc3Rpb24pO1xuICAgIHJldHVybiBxdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBvblVwZGF0ZUpzb246IChqc29uOiBhbnkpID0+IGFueSA9IG51bGxcbiAgKSB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGVRdWVzdGlvbikge1xuICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLnRlbXBsYXRlUXVlc3Rpb24sIHRydWUpO1xuICAgICAgaWYgKG9uVXBkYXRlSnNvbikge1xuICAgICAgICBvblVwZGF0ZUpzb24oanNvbik7XG4gICAgICB9XG4gICAgICBqc29uLnR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5kb0NvbHVtblByb3BlcnRpZXNDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGRvQ29sdW1uUHJvcGVydGllc0NoYW5nZWQobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKG5hbWUgPT0gXCJ2aXNpYmxlQ2hvaWNlc1wiKSByZXR1cm47IC8vVE9ETyBkZXNjcmlwdG9yIGRvZXNuJ3QgcmV0dXJuIHRoYXQgaXQgaXMgYSByZWFkLW9ubHkgcHJvcGVydHlcbiAgICBpZiAodGhpcy5jb2xPd25lciAhPSBudWxsICYmICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmNvbE93bmVyLm9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKHRoaXMsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkb1Nob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jb2xPd25lci5vblNob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuZ2V0RHluYW1pY1Byb3BlcnRpZXNCeU9iaih0aGlzLCBjdXJDZWxsVHlwZSk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhjdXJDZWxsVHlwZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICBkZWxldGUgKDxhbnk+dGhpcylbcHJvcC5uYW1lXTtcbiAgICAgIGlmIChwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICBkZWxldGUgKDxhbnk+dGhpcylbcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZFByb3BlcnRpZXMoY3VyQ2VsbFR5cGU6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMudGVtcGxhdGVRdWVzdGlvbjtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhjdXJDZWxsVHlwZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICB0aGlzLmFkZFByb3BlcnR5KHF1ZXN0aW9uLCBwcm9wLm5hbWUsIGZhbHNlKTtcbiAgICAgIGlmIChwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLmFkZFByb3BlcnR5KHF1ZXN0aW9uLCBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkUHJvcGVydHkoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICAgaXNSZWFkT25seTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgZGVzYyA9IHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKDxhbnk+cXVlc3Rpb24pW3Byb3BOYW1lXTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICg8YW55PmRlc2MpW1wic2V0XCJdID0gZnVuY3Rpb24gKHY6IGFueSkge1xuICAgICAgICAoPGFueT5xdWVzdGlvbilbcHJvcE5hbWVdID0gdjtcbiAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wTmFtZSwgZGVzYyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oY29sdW1uLCByb3csIGRhdGEpO1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZS51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IGRhdGEuY3JlYXRlUXVlc3Rpb24odGhpcy5yb3csIHRoaXMuY29sdW1uKTtcbiAgICByZXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGEudmFsaWRhdGVDZWxsKHJvdywgY29sdW1uLm5hbWUsIHJvdy52YWx1ZSk7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5nZXRQcm9wZXJ0aWVzKGNvbHVtbi5nZXRUeXBlKCkpLmZvckVhY2goXG4gICAgICAocHJvcGVydHkpID0+IHtcbiAgICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XG4gICAgICAgIGlmICgoPGFueT5jb2x1bW4pW3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc1twcm9wZXJ0eU5hbWVdID0gKDxhbnk+Y29sdW1uKVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93bkNlbGwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBwdWJsaWMgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApIHtcbiAgICBzdXBlcihjb2x1bW4sIHJvdywgZGF0YSk7XG4gICAgdGhpcy51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24oXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGFcbiAgKTogUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSA8UXVlc3Rpb24+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhcImV4cHJlc3Npb25cIik7XG4gICAgcmVzLnNldFN1cnZleUltcGwocm93KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgdGhpcy5jb2x1bW4udXBkYXRlQ2VsbFF1ZXN0aW9uKHRoaXMucXVlc3Rpb24sIG51bGwsIGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICBkZWxldGUganNvbltcImRlZmF1bHRWYWx1ZVwiXTtcbiAgICB9KTtcbiAgICB0aGlzLnF1ZXN0aW9uLmV4cHJlc3Npb24gPSB0aGlzLmdldFRvdGFsRXhwcmVzc2lvbigpO1xuICAgIHRoaXMucXVlc3Rpb24uZm9ybWF0ID0gdGhpcy5jb2x1bW4udG90YWxGb3JtYXQ7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW5jeSA9IHRoaXMuY29sdW1uLnRvdGFsQ3VycmVuY3k7XG4gICAgdGhpcy5xdWVzdGlvbi5kaXNwbGF5U3R5bGUgPSB0aGlzLmNvbHVtbi50b3RhbERpc3BsYXlTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9uLm1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29sdW1uLnRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgIHRoaXMucXVlc3Rpb24ubWluaW11bUZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2x1bW4udG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgdGhpcy5xdWVzdGlvbi51bmxvY0NhbGN1bGF0aW9uKCk7XG4gIH1cbiAgcHVibGljIGdldFRvdGFsRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbikgcmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy5jb2x1bW4udG90YWxUeXBlID09IFwibm9uZVwiKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZnVuTmFtZSA9IHRoaXMuY29sdW1uLnRvdGFsVHlwZSArIFwiSW5BcnJheVwiO1xuICAgIGlmICghRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmhhc0Z1bmN0aW9uKGZ1bk5hbWUpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gZnVuTmFtZSArIFwiKHtzZWxmfSwgJ1wiICsgdGhpcy5jb2x1bW4ubmFtZSArIFwiJylcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSVN1cnZleUltcGwsIElMb2NhbGl6YWJsZU93bmVyLCBJVGV4dFByb2Nlc3NvciB7XG4gIHB1YmxpYyBzdGF0aWMgUm93VmFyaWFibGVOYW1lID0gXCJyb3dcIjtcbiAgcHVibGljIHN0YXRpYyBPd25lclZhcmlhYmxlTmFtZSA9IFwic2VsZlwiO1xuICBwdWJsaWMgc3RhdGljIEluZGV4VmFyaWFibGVOYW1lID0gXCJyb3dJbmRleFwiO1xuXG4gIHByaXZhdGUgc3RhdGljIGlkQ291bnRlcjogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzcm93X1wiICsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuaWRDb3VudGVyKys7XG4gIH1cbiAgcHJvdGVjdGVkIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGE7XG4gIHByb3RlY3RlZCBpc1NldHRpbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGlkVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBUZXh0UHJlUHJvY2Vzc29yO1xuXG4gIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vblByb2Nlc3MgPSBmdW5jdGlvbiAoXG4gICAgICB0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZVxuICAgICkge1xuICAgICAgc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuaWRWYWx1ZSA9IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmdldElkKCk7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5jZWxsc1tpXS5xdWVzdGlvbjtcbiAgICAgIGlmICghcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHJlc3VsdFtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIGFsbFZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgcm93OiBhbGxWYWx1ZXMgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gYWxsVmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IGFsbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSwgcm93OiB0aGlzIH07XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLk93bmVyVmFyaWFibGVOYW1lXSA9IHRoaXMuZGF0YS52YWx1ZTtcbiAgICB9XG4gICAgdmFsdWVzW01hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLkluZGV4VmFyaWFibGVOYW1lXSA9IHRoaXMucm93SW5kZXg7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0ge307XG4gICAgcHJvcGVydGllc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWVdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWVdID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMuY2VsbHNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5jZWxsc1tpXS5xdWVzdGlvbjtcbiAgICAgIHZhciB2YWwgPSAhIXZhbHVlID8gdmFsdWVbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCldIDogbnVsbDtcbiAgICAgIHF1ZXN0aW9uLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWwpO1xuICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQodmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2VsbHNbaV0ucXVlc3Rpb24ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHJldHVybiAoPGFueT5zdXJ2ZXkpLmdldERhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaCwga2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlc0hhc2hba2V5XTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShuYW1lKTtcbiAgICByZXR1cm4gISFxdWVzdGlvbiA/IHF1ZXN0aW9uLnZhbHVlIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdDb2x1bW5WYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNTZXR0aW5nVmFsdWUpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkVmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgIHZhciBjaGFuZ2VkUXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgIHZhciBjaGFuZ2luZ1ZhbHVlID0gdGhpcy5kYXRhLm9uUm93Q2hhbmdpbmcodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICEhY2hhbmdlZFF1ZXN0aW9uICYmXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKGNoYW5naW5nVmFsdWUsIGNoYW5nZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUobmFtZSkudmFsdWUgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEub25Sb3dDaGFuZ2VkKFxuICAgICAgICB0aGlzLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgbmV3Q29sdW1uVmFsdWUgPT0gbnVsbCAmJiAhY2hhbmdlZFF1ZXN0aW9uXG4gICAgICApO1xuICAgICAgdGhpcy5vbkFueVZhbHVlQ2hhbmdlZChNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfVxuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7fVxuICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmdldFZhbHVlKG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4KTtcbiAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZXRWYWx1ZShuYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeCwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKHZhbFtrZXldICE9PSB1bmRlZmluZWQgJiYgdmFsW2tleV0gIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IFF1ZXN0aW9uIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNlbGxzW2ldLmNvbHVtbiA9PSBjb2x1bW4pIHJldHVybiB0aGlzLmNlbGxzW2ldLnF1ZXN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUgPT0gY29sdW1uTmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHNbaV0ucXVlc3Rpb247XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgICA/IHRoaXMuZGF0YS5nZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShjb2x1bW5OYW1lLCB0aGlzKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcyh2YWw6IGFueSkge1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUoa2V5KTtcbiAgICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgICB2YXIgcVZhbCA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBxdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhxVmFsLCBxdWVzdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGtleSwgcXVlc3Rpb24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoa2V5KSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRMb2NhbGUoKSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TWFya2Rvd25IdG1sKHRleHQpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jZWxsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jZWxsc1tpXS5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgICB0aGlzLnVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQodGhpcy5jZWxsc1tpXSwgbmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvblF1ZXN0aW9uUmVhZE9ubHlDaGFuZ2VkKHBhcmVudElzUmVhZE9ubHk6IGJvb2xlYW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghIXRoaXMuY2VsbHNbaV0ucXVlc3Rpb24pIHtcbiAgICAgICAgdGhpcy5jZWxsc1tpXS5xdWVzdGlvbi5yZWFkT25seSA9IHBhcmVudElzUmVhZE9ubHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDZWxsT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBjZWxsLnF1ZXN0aW9uW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkQ2VsbHModmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGlmICghY29sdW1uLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pO1xuICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgaWYgKCEhdmFsdWUgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2NvbHVtbi5uYW1lXSkpIHtcbiAgICAgICAgY2VsbC5xdWVzdGlvbi52YWx1ZSA9IHZhbHVlW2NvbHVtbi5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDZWxsKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25DZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcbiAgfVxuICBnZVN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFJvd0luZGV4KHRoaXMpICsgMSA6IC0xO1xuICB9XG4gIC8vSVRleHRQcm9jZXNzb3JcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdGV4dFZhbHVlLmlzRXhpc3RzID1cbiAgICAgIGZpcnN0TmFtZSA9PSBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWU7XG4gICAgdGV4dFZhbHVlLmNhblByb2Nlc3MgPSB0ZXh0VmFsdWUuaXNFeGlzdHM7XG4gICAgaWYgKCF0ZXh0VmFsdWUuaXNFeGlzdHMpIHJldHVybjtcbiAgICB2YXIgdmFsdWVzID0geyByb3c6IHRoaXMudmFsdWUgfTtcbiAgICB0ZXh0VmFsdWUudmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUsIHZhbHVlcyk7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nLCByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHRleHQgPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIGlmICghdGhpcy5nZXRTdXJ2ZXkoKSkgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3VydmV5KCkucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgfVxuICBwcm9jZXNzVGV4dEV4KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogYW55IHtcbiAgICB0ZXh0ID0gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIGlmICghdGhpcy5nZXRTdXJ2ZXkoKSkgcmV0dXJuIHRleHQ7XG4gICAgdmFyIGhhc0FsbFZhbHVlc09uTGFzdFJ1biA9IHRoaXMudGV4dFByZVByb2Nlc3Nvci5oYXNBbGxWYWx1ZXNPbkxhc3RSdW47XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0U3VydmV5KCkucHJvY2Vzc1RleHRFeCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGZhbHNlKTtcbiAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuID1cbiAgICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gJiYgaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blRvdGFsUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEpIHtcbiAgICBzdXBlcihkYXRhLCBudWxsKTtcbiAgICB0aGlzLmJ1aWxkQ2VsbHMobnVsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUNlbGwoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93blRvdGFsQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiAhdGhpcy5pc1NldHRpbmdWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhLm9uVG90YWxWYWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgcHJldlZhbHVlO1xuICAgIGRvIHtcbiAgICAgIHByZXZWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9IHdoaWxlICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHByZXZWYWx1ZSwgdGhpcy52YWx1ZSkgJiYgY291bnRlciA8IDMpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDZWxsT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICAoPE1hdHJpeERyb3Bkb3duVG90YWxDZWxsPmNlbGwpLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY291bnRlciA9IDE7XG4gIHByaXZhdGUgaWRWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIGl0ZW1WYWx1ZTogSXRlbVZhbHVlO1xuICBwdWJsaWMgbWluV2lkdGg6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB3aWR0aDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGxvY1RpdGxlOiBMb2NhbGl6YWJsZVN0cmluZztcbiAgcHVibGljIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbDtcbiAgcHVibGljIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb247XG4gIHB1YmxpYyBpc1JlbW92ZVJvdzogYm9vbGVhbjtcbiAgcHVibGljIGNob2ljZUluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLmNvdW50ZXIrKztcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1F1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmxvY1RpdGxlO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwidG9wXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0Vycm9yT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwiYm90dG9tXCIpO1xuICB9XG4gIHByaXZhdGUgc2hvd0Vycm9yT25Db3JlKGxvY2F0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5nZXRTaG93RXJyb3JMb2NhdGlvbigpID09IGxvY2F0aW9uICYmXG4gICAgICAoIXRoaXMuaXNDaG9pY2UgfHwgdGhpcy5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTaG93RXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhhc1F1ZXN0aW9uID8gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpdGVtKHZhbDogSXRlbVZhbHVlKSB7XG4gICAgdGhpcy5pdGVtVmFsdWUgPSB2YWw7XG4gICAgaWYgKCEhdmFsKSB7XG4gICAgICB2YWwuaGlkZUNhcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNob2ljZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDaG9pY2UgPyB0aGlzLml0ZW0udmFsdWUgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nob2ljZSAmJiB0aGlzLnF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0ZpcnN0Q2hvaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNob2ljZUluZGV4ID09PSAwO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBudW1iZXI7XG4gIHB1YmxpYyBjZWxsczogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbD4gPSBbXTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdy5jb3VudGVyKys7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlkVmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgaGVhZGVyUm93VmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcHJpdmF0ZSBmb290ZXJSb3dWYWx1ZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xuICBwcml2YXRlIGhhc1JlbW92ZVJvd3NWYWx1ZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyb3dzXCIpO1xuICAgIHRoaXMuYnVpbGQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5oYXNGb290ZXIgJiYgdGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZm9vdGVyUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWU7XG4gIH1cbiAgcHVibGljIGlzUmVxdWlyZVJlc2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmhhc1JlbW92ZVJvd3MgIT0gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93cyB8fFxuICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBoZWFkZXJSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJSb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZvb3RlclJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclJvd1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGQoKSB7XG4gICAgdGhpcy5oYXNSZW1vdmVSb3dzVmFsdWUgPSB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3dzO1xuICAgIC8vYnVpbGQgcm93cyBub3dcbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIHRoaXMuYnVpbGRIZWFkZXIoKTtcbiAgICB0aGlzLmJ1aWxkUm93cygpO1xuICAgIHRoaXMuYnVpbGRGb290ZXIoKTtcbiAgfVxuICBwdWJsaWMgb25BZGRlZFJvdygpIHtcbiAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA+PSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLnJvd3MucHVzaChcbiAgICAgIHRoaXMuY3JlYXRlSG9yaXpvbnRhbFJvdyhcbiAgICAgICAgdGhpcy5tYXRyaXgudmlzaWJsZVJvd3NbdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV1cbiAgICAgIClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBvblJlbW92ZWRSb3coaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoIDw9IGluZGV4KSByZXR1cm47XG4gICAgdGhpcy5yb3dzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkSGVhZGVyKCkge1xuICAgIHZhciBjb2xIZWFkZXJzID1cbiAgICAgIHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCAmJiB0aGlzLm1hdHJpeC5zaG93SGVhZGVyO1xuICAgIHZhciBpc1Nob3duID1cbiAgICAgIGNvbEhlYWRlcnMgfHxcbiAgICAgICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmICF0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dIZWFkZXJcIiwgaXNTaG93bik7XG4gICAgaWYgKCFpc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5oZWFkZXJSb3dWYWx1ZSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCAmJiB0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubWF0cml4LnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgICBpZiAoIWNvbHVtbi5oYXNWaXNpYmxlQ2VsbCkgY29udGludWU7XG4gICAgICAgIGlmIChjb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0hlYWRlcihjb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKHJvd3NbaV0ubG9jVGV4dCkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWF0cml4Lmhhc0Zvb3Rlcikge1xuICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKFxuICAgICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNSZW1vdmVSb3dzKSB7XG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZEZvb3RlcigpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0Zvb3RlcikgcmV0dXJuO1xuICAgIHRoaXMuZm9vdGVyUm93VmFsdWUgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KCk7XG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQpIHtcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2goXG4gICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3Rlcih0aGlzLmZvb3RlclJvdywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlRWRpdENlbGwoY2VsbCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5oYXNSZW1vdmVSb3dzKSB7XG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZFJvd3MoKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWxcbiAgICAgID8gdGhpcy5idWlsZEhvcml6b250YWxSb3dzKClcbiAgICAgIDogdGhpcy5idWlsZFZlcnRpY2FsUm93cygpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgcm93cyk7XG4gIH1cbiAgcHJpdmF0ZSBjYW5SZW1vdmVSb3cocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdHJpeC5jYW5SZW1vdmVSb3cocm93KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkSG9yaXpvbnRhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICB2YXIgcmVuZGVyZWRSb3dzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZUhvcml6b250YWxSb3cocm93c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRSb3dzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlSG9yaXpvbnRhbFJvdyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVUZXh0Q2VsbChyb3cubG9jVGV4dCkpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbaV07XG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xuICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKHJlcywgY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUmVtb3ZlUm93cykge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVSZW1vdmVSb3dDZWxsKHJvdykpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgYnVpbGRWZXJ0aWNhbFJvd3MoKTogQXJyYXk8UXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93PiB7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLm1hdHJpeC5jb2x1bW5zO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2wgPSBjb2x1bW5zW2ldO1xuICAgICAgaWYgKGNvbC5pc1Zpc2libGUgJiYgY29sLmhhc1Zpc2libGVDZWxsKSB7XG4gICAgICAgIGlmIChjb2wuaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZU11dGxpcGxlVmVydGljYWxSb3dzKHJlbmRlcmVkUm93cywgY29sLCBpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlZFJvd3MucHVzaCh0aGlzLmNyZWF0ZVZlcnRpY2FsUm93KGNvbCwgaSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1JlbW92ZVJvd3MpIHtcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSZW1vdmVSb3coKSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZFJvd3M7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZVZlcnRpY2FsUm93cyhcbiAgICByZW5kZXJlZFJvd3M6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdz4sXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBpbmRleDogbnVtYmVyXG4gICkge1xuICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRNdWx0aXBsZUNvbHVtbkNob2ljZXMoY29sdW1uKTtcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sdW1uLCBpbmRleCwgY2hvaWNlc1tpXSwgaSkpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZlcnRpY2FsUm93KFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjaG9pY2U6IEl0ZW1WYWx1ZSA9IG51bGwsXG4gICAgY2hvaWNlSW5kZXg6IG51bWJlciA9IC0xXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coKTtcbiAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xuICAgICAgdmFyIGxUaXRsZSA9ICEhY2hvaWNlID8gY2hvaWNlLmxvY1RleHQgOiBjb2x1bW4ubG9jVGl0bGU7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKGxUaXRsZSkpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChyb3dzW2ldLmNlbGxzW2luZGV4XSk7XG4gICAgICByQ2VsbC5pdGVtID0gY2hvaWNlO1xuICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSBjaG9pY2VJbmRleCA+PSAwID8gY2hvaWNlSW5kZXggOiBpO1xuICAgICAgcmVzLmNlbGxzLnB1c2gockNlbGwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXRyaXguaGFzVG90YWwpIHtcbiAgICAgIHJlcy5jZWxscy5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZUVkaXRDZWxsKHRoaXMubWF0cml4LnZpc2libGVUb3RhbFJvdy5jZWxsc1tpbmRleF0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlVmVydGljYWxSZW1vdmVSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdygpO1xuICAgIGlmICh0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKG51bGwpKTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlUmVtb3ZlUm93Q2VsbChyb3dzW2ldKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNUb3RhbCkge1xuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVUZXh0Q2VsbChudWxsKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhcbiAgICByUm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIGlzRm9vdGVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjZWxsLmNvbHVtbik7XG4gICAgaWYgKCFjaG9pY2VzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgckNlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwpO1xuICAgICAgaWYgKCFpc0Zvb3Rlcikge1xuICAgICAgICByQ2VsbC5pdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgICAgckNlbGwuY2hvaWNlSW5kZXggPSBpO1xuICAgICAgfVxuICAgICAgclJvdy5jZWxscy5wdXNoKHJDZWxsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0Q2VsbChcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGxcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgcmVzLmNlbGwgPSBjZWxsO1xuICAgIHJlcy5yb3cgPSBjZWxsLnJvdztcbiAgICByZXMucXVlc3Rpb24gPSBjZWxsLnF1ZXN0aW9uO1xuICAgIHJlcy5tYXRyaXggPSB0aGlzLm1hdHJpeDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTXV0bGlwbGVDb2x1bW5zRm9vdGVyKFxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjZWxsOiBNYXRyaXhEcm9wZG93bkNlbGxcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhyUm93LCBjZWxsLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlQ29sdW1uc0hlYWRlcihjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGNob2ljZXNbaV0ubG9jVGV4dCk7XG4gICAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2goY2VsbCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBhbnkge1xuICAgIHZhciBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24uY2hvaWNlcztcbiAgICBpZiAoISFjaG9pY2VzICYmIEFycmF5LmlzQXJyYXkoY2hvaWNlcykgJiYgY2hvaWNlcy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybiB0aGlzLm1hdHJpeC5jaG9pY2VzO1xuICAgIHZhciBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUNob2ljZXM7XG4gICAgaWYgKCFjaG9pY2VzIHx8ICFBcnJheS5pc0FycmF5KGNob2ljZXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY2hvaWNlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUhlYWRlckNlbGwoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlVGV4dENlbGwoISFjb2x1bW4gPyBjb2x1bW4ubG9jVGl0bGUgOiBudWxsKTtcbiAgICB0aGlzLnNldEhlYWRlckNlbGwoY29sdW1uLCBjZWxsKTtcbiAgICByZXR1cm4gY2VsbDtcbiAgfVxuICBwcml2YXRlIHNldEhlYWRlckNlbGwoXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXG4gICkge1xuICAgIGNlbGwubWluV2lkdGggPSBjb2x1bW4gIT0gbnVsbCA/IHRoaXMubWF0cml4LmdldENvbHVtbldpZHRoKGNvbHVtbikgOiBcIlwiO1xuICAgIGNlbGwud2lkdGggPSBjb2x1bW4gIT0gbnVsbCA/IGNvbHVtbi53aWR0aCA6IHRoaXMubWF0cml4LmdldFJvd1RpdGxlV2lkdGgoKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVJlbW92ZVJvd0NlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcbiAgICByZXMucm93ID0gcm93O1xuICAgIHJlcy5pc1JlbW92ZVJvdyA9IHRoaXMuY2FuUmVtb3ZlUm93KHJvdyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVRleHRDZWxsKFxuICAgIGxvY1RpdGxlOiBMb2NhbGl6YWJsZVN0cmluZ1xuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICB2YXIgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XG4gICAgY2VsbC5sb2NUaXRsZSA9ICEhbG9jVGl0bGVcbiAgICAgID8gbG9jVGl0bGVcbiAgICAgIDogbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMubWF0cml4LCBmYWxzZSk7XG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG1hdHJpeCBkcm9wZG93biBhbmQgbWF0cml4IGR5bmFtaWMgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFxuICAgIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gID5cbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdENlbGxUeXBlKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdENlbGxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKykgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZFRhYmxlVmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlO1xuICBwcm90ZWN0ZWQgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICB1cGRhdGVDZWxsc0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb2x1bW5MYXlvdXRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIG9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIG9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjazogKFxuICAgIHRhYmxlOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZVxuICApID0+IHZvaWQ7XG4gIG9uQ2VsbENyZWF0ZWRDYWxsYmFjazogKG9wdGlvbnM6IGFueSkgPT4gdm9pZDtcbiAgb25DZWxsVmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtblZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbHVtbnNcIiwgKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaXRlbS5jb2xPd25lciA9IHRoaXM7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjb2x1bW5zXCIsIGZ1bmN0aW9uIChcbiAgICAgIG5ld0NvbHVtbnM6IGFueVxuICAgICkge1xuICAgICAgc2VsZi51cGRhdGVDb2x1bW5zSW5kZXhlcyhuZXdDb2x1bW5zKTtcbiAgICAgIHNlbGYuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBudWxsO1xuICAgICAgc2VsZi5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgICBzZWxmLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJjb2x1bW5MYXlvdXRcIiwgXCJhZGRSb3dMb2NhdGlvblwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5jb2x1bW5MYXlvdXRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiY2VsbFR5cGVcIiwgXCJvcHRpb25zQ2FwdGlvblwiLCBcImNvbHVtbkNvbENvdW50XCIsIFwicm93VGl0bGVXaWR0aFwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgICAgIHNlbGYucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYuY29sdW1uc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXG4gICAgICAgIFwiY29sdW1uTGF5b3V0XCIsXG4gICAgICAgIFwic2hvd0hlYWRlclwiLFxuICAgICAgICBcIm1pblJvd0NvdW50XCIsXG4gICAgICAgIFwiaXNSZWFkT25seVwiLFxuICAgICAgICBcInJvd0NvdW50XCIsXG4gICAgICAgIFwiaGFzRm9vdGVyXCIsXG4gICAgICBdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmJhc2VcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUm93c0R5bmFtaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgY29sdW1uTGF5b3V0IHRvICd2ZXJ0aWNhbCcgdG8gcGxhY2UgY29sdW1ucyB2ZXJ0aWNhbGx5IGFuZCByb3dzIGhvcml6b250YWxseS4gSXQgbWFrZXMgc2Vuc2Ugd2hlbiB3ZSBoYXZlIG1hbnkgY29sdW1ucyBhbmQgZmV3IHJvd3MuXG4gICAqIEBzZWUgY29sdW1uc1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5MYXlvdXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5MYXlvdXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgY29sdW1uc0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0O1xuICB9XG4gIHNldCBjb2x1bW5zTG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbHVtbkxheW91dCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGNvbHVtbnMgYXJlIGxvY2F0ZWQgaG9yaXpvbnRhbGx5XG4gICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5MYXlvdXQgIT0gXCJ2ZXJ0aWNhbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9vdGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBjYW5SZW1vdmVSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgY2FuUmVtb3ZlUm93KHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIHN1cGVyLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGxvY2tSZXNldFJlbmRlcmVkVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG9uU3RhcnRSb3dBZGRpbmdSZW1vdmluZygpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBvbkVuZFJvd0FkZGluZygpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMucmVuZGVyZWRUYWJsZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGFibGUuaXNSZXF1aXJlUmVzZXQoKSkge1xuICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uQWRkZWRSb3coKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uRW5kUm93UmVtb3ZpbmcoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubG9ja1Jlc2V0UmVuZGVyZWRUYWJsZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGFibGUuaXNSZXF1aXJlUmVzZXQoKSkge1xuICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uUmVtb3ZlZFJvdyhpbmRleCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZXNldFJlbmRlcmVkVGFibGUoKSB7XG4gICAgaWYgKHRoaXMubG9ja1Jlc2V0UmVuZGVyZWRUYWJsZSB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUgPSBudWxsO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZFRhYmxlKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIHtcbiAgICBpZiAoIXRoaXMucmVuZGVyZWRUYWJsZVZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRUYWJsZSgpO1xuICAgICAgaWYgKCEhdGhpcy5vblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2sodGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTWF0cml4Um93Q3JlYXRlZChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcm93VmFsdWU6IHJvdy52YWx1ZSxcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uOiA8YW55Pm51bGwsXG4gICAgICBjb2x1bW5OYW1lOiA8YW55Pm51bGwsXG4gICAgICBjZWxsOiA8YW55Pm51bGwsXG4gICAgICBjZWxsUXVlc3Rpb246IDxhbnk+bnVsbCxcbiAgICAgIHZhbHVlOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGlvbnMuY29sdW1uID0gdGhpcy52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIG9wdGlvbnMuY29sdW1uTmFtZSA9IG9wdGlvbnMuY29sdW1uLm5hbWU7XG4gICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tpXTtcbiAgICAgIG9wdGlvbnMuY2VsbCA9IGNlbGw7XG4gICAgICBvcHRpb25zLmNlbGxRdWVzdGlvbiA9IGNlbGwucXVlc3Rpb247XG4gICAgICBvcHRpb25zLnZhbHVlID0gY2VsbC52YWx1ZTtcbiAgICAgIGlmICghIXRoaXMub25DZWxsQ3JlYXRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25DZWxsQ3JlYXRlZENhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbENyZWF0ZWQodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY2VsbCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBjZWxsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGUpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2VsbFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGhpcy5jZWxsVHlwZSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0NlbGxUeXBlKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy51cGRhdGVDZWxsc0NhbGxiYWNrKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnNDZWxsVHlwZSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jb2x1bW5zW2ldLmRlZmF1bHRDZWxsVHlwZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zSW5kZXhlcyhjb2xzOiBBcnJheTxNYXRyaXhEcm9wZG93bkNvbHVtbj4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbHNbaV0uc2V0SW5kZXgoaSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjb2x1bW4gY291bnQgZm9yIHJhZGlvZ3JvdXAgYW5kIGNoZWNrYm94ICBjZWxsIHR5cGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2x1bW5Db2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5Db2xDb3VudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbHVtbkNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbkNvbENvdW50XCIsIHZhbHVlKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnVwZGF0ZUNlbGxzQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG1pbmltdW0gY29sdW1uIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2x1bW5NaW5XaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5NaW5XaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbHVtbk1pbldpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTWluV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBzaG93IHRoZSBob3Jpem9udGFsIHNjcm9sbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaG9yaXpvbnRhbFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBob3Jpem9udGFsU2Nyb2xsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhvcml6b250YWxTY3JvbGxcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcbiAgfVxuICBvbkNvbHVtblByb3BlcnR5Q2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdy51cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkNoYW5nZWQoXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIGlmIChjb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMub25TaG93SW5NdWx0aXBsZUNvbHVtbnNDaGFuZ2VkKGNvbHVtbik7XG4gICAgfVxuICB9XG4gIG9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgfVxuICBvbkNvbHVtbkNlbGxUeXBlQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93VGl0bGVXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVIYXNGb290ZXIoKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzRm9vdGVyXCIsIHRoaXMuaGFzVG90YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG90YWwoKTogYm9vbGVhbiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnNbaV0uaGFzVG90YWwpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsVHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbigpO1xuICAgIHZhciBjb2x1bW5OYW1lID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHBhdGhbaV0gPT0gXCIuXCIpIGJyZWFrO1xuICAgICAgY29sdW1uTmFtZSA9IHBhdGhbaV0gKyBjb2x1bW5OYW1lO1xuICAgIH1cbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiBudWxsO1xuICAgIHZhciBxdWVzdGlvbiA9IGNvbHVtbi5jcmVhdGVDZWxsUXVlc3Rpb24obnVsbCk7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IpO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKHRoaXMuZ2V0Um93VmFsdWUoaSkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcm93LmNlbGxzW2pdLnF1ZXN0aW9uLmNsZWFyRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VG90YWxWYWx1ZTtcbiAgICBkbyB7XG4gICAgICBwcmV2VG90YWxWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy50b3RhbFZhbHVlKTtcbiAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSB3aGlsZSAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHByZXZUb3RhbFZhbHVlLCB0aGlzLnRvdGFsVmFsdWUpICYmXG4gICAgICBjb3VudGVyIDwgM1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNob3VsZFJ1bkNvbHVtbkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBydW5DZWxsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZXMgPSB0aGlzLmdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXMpO1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ucnVuQ29uZGl0aW9uKG5ld1ZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpIHtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnZpc2libGVDb2x1bW5zW2ldLnZpc2libGVJZikgY29udGludWU7XG4gICAgICBoYXNDaGFuZ2VkID1cbiAgICAgICAgdGhpcy5pc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMudmlzaWJsZUNvbHVtbnNbaV0pIHx8IGhhc0NoYW5nZWQ7XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHZhciBjdXJWaXMgPSBjb2x1bW4uaGFzVmlzaWJsZUNlbGw7XG4gICAgdmFyIGhhc1Zpc0NlbGwgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IHJvd3NbaV0uY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgIGlmICghIWNlbGwgJiYgISFjZWxsLnF1ZXN0aW9uICYmIGNlbGwucXVlc3Rpb24uaXNWaXNpYmxlKSB7XG4gICAgICAgIGhhc1Zpc0NlbGwgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1clZpcyAhPSBoYXNWaXNDZWxsKSB7XG4gICAgICBjb2x1bW4uaGFzVmlzaWJsZUNlbGwgPSBoYXNWaXNDZWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VyVmlzICE9IGhhc1Zpc0NlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blRvdGFsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykgcmV0dXJuO1xuICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXRSb3dDb25kaXRpb25WYWx1ZXModmFsdWVzKSxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBIYXNoVGFibGU8YW55PiB7XG4gICAgdmFyIG5ld1ZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIG5ld1ZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgIHZhciB0b3RhbFJvdyA9IHt9O1xuICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy50b3RhbFZhbHVlKSkge1xuICAgICAgdG90YWxSb3cgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudG90YWxWYWx1ZSkpO1xuICAgIH1cbiAgICBuZXdWYWx1ZXNbXCJyb3dcIl0gPSB7fTtcbiAgICBuZXdWYWx1ZXNbXCJ0b3RhbFJvd1wiXSA9IHRvdGFsUm93O1xuICAgIHJldHVybiBuZXdWYWx1ZXM7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29sdW1uc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29sdW1uIGJ5IGl0J3MgbmFtZS4gUmV0dXJucyBudWxsIGlmIGEgY29sdW1uIHdpdGggdGhpcyBuYW1lIGRvZXNuJ3QgZXhpc3QuXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLm5hbWUgPT0gY29sdW1uTmFtZSkgcmV0dXJuIHRoaXMuY29sdW1uc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0Q29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXRyaXhEcm9wZG93bkNvbHVtbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gd2lkdGguXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sdW1uLm1pbldpZHRoID8gY29sdW1uLm1pbldpZHRoIDogdGhpcy5jb2x1bW5NaW5XaWR0aDtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgY2hvaWNlcyBmb3IgZHJvcGRvd24sIGNoZWNrYm94IGFuZCByYWRpb2dyb3VwIGNlbGwgdHlwZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzKHZhbDogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgb3B0aW9ucyBjYXB0aW9uIGZvciBkcm9wZG93biBjZWxsIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwib3B0aW9uc0NhcHRpb25cIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvcHRpb25zQ2FwdGlvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3B0aW9uc0NhcHRpb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY09wdGlvbnNDYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIik7XG4gIH1cbiAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChyb3cpKTtcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbihcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZhbHVlT25Sb3dzR2VuZXJhdGlvbihyb3dzOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4pIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRydWUpO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShpKTtcbiAgICAgIHZhciByVmFsdWUgPSByb3cudmFsdWU7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHJvd1ZhbHVlLCByVmFsdWUpKSBjb250aW51ZTtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChyb3csIFwiXCIsIHJWYWx1ZSwgZmFsc2UsIG5ld1ZhbHVlKVxuICAgICAgICAudmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMob2xkVmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCB0b3RhbFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmhhc1RvdGFsIHx8ICF0aGlzLnZpc2libGVUb3RhbFJvdykgcmV0dXJuIHt9O1xuICAgIHJldHVybiB0aGlzLnZpc2libGVUb3RhbFJvdy52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaGFzVG90YWwpIHtcbiAgICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gdGhpcy5nZW5lcmF0ZVRvdGFsUm93KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsgc3VydmV5OiB0aGlzLnN1cnZleSB9O1xuICAgICAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSwgcHJvcGVydGllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFRvdGFsUm93O1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlVG90YWxSb3coKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0luZGV4ZXModGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZUhhc0Zvb3RlcigpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByb3cgdmFsdWUuIElmIHRoZSByb3cgdmFsdWUgaXMgZW1wdHksIHRoZSBvYmplY3QgaXMgZW1wdHk6IHt9LlxuICAgKiBAcGFyYW0gcm93SW5kZXggcm93IGluZGV4IGZyb20gMCB0byB2aXNpYmxlIHJvdyBjb3VudCAtIDEuXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93VmFsdWUocm93SW5kZXg6IG51bWJlcikge1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2aXNSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAocm93SW5kZXggPj0gdmlzUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3dWYWx1ZUNvcmUodmlzUm93c1tyb3dJbmRleF0sIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSByb3cgdmFsdWUuXG4gICAqIEBwYXJhbSByb3dJbmRleCByb3cgaW5kZXggZnJvbSAwIHRvIHZpc2libGUgcm93IGNvdW50IC0gMS5cbiAgICogQHBhcmFtIHJvd1ZhbHVlIGFuIG9iamVjdCB7XCJjb2x1bW4gbmFtZVwiOiBjb2x1bW5WYWx1ZSwuLi4gfVxuICAgKi9cbiAgcHVibGljIHNldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIsIHJvd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2aXNSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAocm93SW5kZXggPj0gdmlzUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZpc1Jvd3Nbcm93SW5kZXhdLnZhbHVlID0gcm93VmFsdWU7XG4gICAgdGhpcy5vblJvd0NoYW5nZWQodmlzUm93c1tyb3dJbmRleF0sIFwiXCIsIHJvd1ZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUobnVsbE9uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG4gICAgdmFyIHJlcyA9ICF0aGlzLnZhbHVlID8ge30gOiB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgIGlmIChudWxsT25FbXB0eSAmJiB0aGlzLmlzTWF0cml4VmFsdWVFbXB0eShyZXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dWYWx1ZUNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBxdWVzdGlvblZhbHVlOiBhbnksXG4gICAgY3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID1cbiAgICAgICEhcXVlc3Rpb25WYWx1ZSAmJiAhIXF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdXG4gICAgICAgID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xuICAgICAgcmVzdWx0ID0ge307XG4gICAgICBpZiAoISFxdWVzdGlvblZhbHVlKSB7XG4gICAgICAgIHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJvd0Rpc3BsYXlWYWx1ZShcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICBpZiAoIXJvd1ZhbHVlKSByZXR1cm4gcm93VmFsdWU7XG4gICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSByb3cuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUoa2V5KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgICAgcXVlc3Rpb24gPSB0aGlzLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGtleSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgIHJvd1ZhbHVlW2tleV0gPSBxdWVzdGlvbi5kaXNwbGF5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW47XG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gdHJ1ZTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSB0aGlzLnZpc2libGVSb3dzLm1hcChcbiAgICAgICAgKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpID0+IHtcbiAgICAgICAgICB2YXIgcm93RGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICAgIG5hbWU6IHJvdy5yb3dOYW1lLFxuICAgICAgICAgICAgdGl0bGU6IHJvdy5yb3dOYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHJvdy52YWx1ZSxcbiAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5nZXRSb3dEaXNwbGF5VmFsdWUocm93LCByb3cudmFsdWUpLFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcm93LmNlbGxzXG4gICAgICAgICAgICAgIC5tYXAoKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkgPT5cbiAgICAgICAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmdldFBsYWluRGF0YShvcHRpb25zKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gISFkKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJvd0RhdGFJdGVtW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV0gPSAoPGFueT5yb3cpW1xuICAgICAgICAgICAgICBjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJvd0RhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHt9XG4gIHByaXZhdGUgb25TZXRRdWVzdGlvblZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLm9uU2V0UXVlc3Rpb25WYWx1ZSgpO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXN0aW9uICYmXG4gICAgICAgICAgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRDb250YWluc0Vycm9ycygpIHx8XG4gICAgICB0aGlzLmNoZWNrRm9yQW5zd2Vyc09yRXJyb3JzKFxuICAgICAgICAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5jb250YWluc0Vycm9ycyxcbiAgICAgICAgZmFsc2VcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiZcbiAgICAgIHRoaXMuY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgICAgIChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHF1ZXN0aW9uLmlzQW5zd2VyZWQsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgcHJlZGljYXRlOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBib29sZWFuLFxuICAgIGV2ZXJ5OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGxzID0gcm93c1tpXS5jZWxscztcbiAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzVmlzaWJsZSlcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKCFldmVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChldmVyeSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV2ZXJ5ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9zSW5Db2x1bW5zID0gdGhpcy5oYXNFcnJvckluQ29sdW1ucyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgcmV0dXJuIHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spIHx8IGVycm9zSW5Db2x1bW5zO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGxzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5jZWxscztcbiAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb24gJiYgcXVlc3Rpb24uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlc3VsdCA9IHN1cGVyLmdldEFsbEVycm9ycygpO1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcblxuICAgIGlmIChyb3dzID09PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlcnJvcnMgPSByb3cuY2VsbHNbal0ucXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCk7XG4gICAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5Db2x1bW5zKGZpcmVDYWxsYmFjazogYm9vbGVhbiwgcmVjOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgICAgcXVlc3Rpb24ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghIXJlYyAmJiByZWMuaXNPblZhbHVlQ2hhbmdlZCA9PT0gdHJ1ZSAmJiBxdWVzdGlvbi5pc0VtcHR5KCkpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHJlcyA9IHF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbihmYWxzZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdENlbGxRdWVzdGlvbih0cnVlKTtcbiAgICByZXR1cm4gcXVlc3Rpb24gPyBxdWVzdGlvbi5pbnB1dElkIDogc3VwZXIuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0Q2VsbFF1ZXN0aW9uKG9uRXJyb3I6IGJvb2xlYW4pOiBRdWVzdGlvbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxscyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0uY2VsbHM7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghb25FcnJvcikgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbi5jdXJyZW50RXJyb3JDb3VudCA+IDApXG4gICAgICAgICAgcmV0dXJuIGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlUm93cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy52aXNpYmxlUm93c1tpXS5vblF1ZXN0aW9uUmVhZE9ubHlDaGFuZ2VkKHRoaXMuaXNSZWFkT25seSk7XG4gICAgfVxuICB9XG5cbiAgLy9JTWF0cml4RHJvcGRvd25EYXRhXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXN0aW9uQ29yZShyb3csIGNvbHVtbik7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uQ29yZShcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW5cbiAgKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbiA9IGNvbHVtbi5jcmVhdGVDZWxsUXVlc3Rpb24ocm93KTtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seSA9IHRydWU7XG4gICAgfVxuICAgIHF1ZXN0aW9uLnNldFN1cnZleUltcGwocm93KTtcbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGRlbGV0ZVJvd1ZhbHVlKFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBhbnkge1xuICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcbiAgICBkZWxldGUgbmV3VmFsdWVbcm93LnJvd05hbWVdO1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZSkubGVuZ3RoID09IDBcbiAgICAgID8gbnVsbFxuICAgICAgOiBuZXdWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzRG9pbmdvbkFueVZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICB0aGlzLmlzRG9pbmdvbkFueVZhbHVlQ2hhbmdlZCB8fFxuICAgICAgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIHZhciB0b3RhbFJvdyA9IHRoaXMudmlzaWJsZVRvdGFsUm93O1xuICAgIGlmICghIXRvdGFsUm93KSB7XG4gICAgICB0b3RhbFJvdy5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNPYmplY3QodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGdldFF1ZXN0aW9uID0gZnVuY3Rpb24gKGNvbE5hbWU6IGFueSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHNlbGYuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2VsZi5jb2x1bW5zW2ldLm5hbWUgPT09IGNvbE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcm93LmNlbGxzW2ldLnF1ZXN0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICByb3dWYWx1ZTogcm93VmFsdWUsXG4gICAgICB2YWx1ZTogISFyb3dWYWx1ZSA/IHJvd1ZhbHVlW2NvbHVtbk5hbWVdIDogbnVsbCxcbiAgICAgIGdldENlbGxRdWVzdGlvbjogZ2V0UXVlc3Rpb24sXG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DZWxsVmFsdWVDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpO1xuICAgIGlmICghIXRoaXMub25DZWxsVmFsdWVDaGFuZ2VkQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMub25DZWxsVmFsdWVDaGFuZ2VkQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5nZWQodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgdmFsaWRhdGVDZWxsKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogU3VydmV5RXJyb3Ige1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGdldFF1ZXN0aW9uID0gZnVuY3Rpb24gKGNvbE5hbWU6IGFueSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHNlbGYuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2VsZi5jb2x1bW5zW2ldLm5hbWUgPT09IGNvbE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcm93LmNlbGxzW2ldLnF1ZXN0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcm93OiByb3csXG4gICAgICBjb2x1bW5OYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgcm93VmFsdWU6IHJvd1ZhbHVlLFxuICAgICAgdmFsdWU6IHJvd1ZhbHVlW2NvbHVtbk5hbWVdLFxuICAgICAgZ2V0Q2VsbFF1ZXN0aW9uOiBnZXRRdWVzdGlvbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsaWRhdGUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgb25Sb3dDaGFuZ2luZyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuICEhcm93VmFsdWUgPyByb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgdmFyIG9sZFJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCksIHRydWUpO1xuICAgIG9wdGlvbnMub2xkVmFsdWUgPSAhIW9sZFJvd1ZhbHVlID8gb2xkUm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsO1xuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnZhbHVlO1xuICB9XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKHRydWUpO1xuICAgIHZhciBjb21iaW5lID0gdGhpcy5nZXROZXdWYWx1ZU9uUm93Q2hhbmdlZChcbiAgICAgIHJvdyxcbiAgICAgIGNvbHVtbk5hbWUsXG4gICAgICBuZXdSb3dWYWx1ZSxcbiAgICAgIGlzRGVsZXRpbmdWYWx1ZSxcbiAgICAgIHRoaXMuY3JlYXRlTmV3VmFsdWUoKVxuICAgICk7XG4gICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgY29tYmluZS52YWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2V0TmV3VmFsdWUoY29tYmluZS52YWx1ZSk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgIHRoaXMub25DZWxsVmFsdWVDaGFuZ2VkKHJvdywgY29sdW1uTmFtZSwgY29tYmluZS5yb3dWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0TmV3VmFsdWVPblJvd0NoYW5nZWQoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgbmV3Um93VmFsdWU6IGFueSxcbiAgICBpc0RlbGV0aW5nVmFsdWU6IGJvb2xlYW4sXG4gICAgbmV3VmFsdWU6IGFueVxuICApOiBhbnkge1xuICAgIHZhciByb3dWYWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgbmV3VmFsdWUsIHRydWUpO1xuICAgIGlmIChpc0RlbGV0aW5nVmFsdWUpIHtcbiAgICAgIGRlbGV0ZSByb3dWYWx1ZVtjb2x1bW5OYW1lXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSByb3cuY2VsbHNbaV0ucXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBkZWxldGUgcm93VmFsdWVba2V5XTtcbiAgICB9XG4gICAgaWYgKG5ld1Jvd1ZhbHVlKSB7XG4gICAgICBuZXdSb3dWYWx1ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmV3Um93VmFsdWUpKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBuZXdSb3dWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1Jvd1ZhbHVlW2tleV0pKSB7XG4gICAgICAgICAgcm93VmFsdWVba2V5XSA9IG5ld1Jvd1ZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNPYmplY3Qocm93VmFsdWUpICYmIE9iamVjdC5rZXlzKHJvd1ZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5kZWxldGVSb3dWYWx1ZShuZXdWYWx1ZSwgcm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IG5ld1ZhbHVlLCByb3dWYWx1ZTogcm93VmFsdWUgfTtcbiAgfVxuICBnZXRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiAtMTtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gIH1cbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMudmFsdWVOYW1lKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldFJvd0luZGV4KHJvdyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxRdWVzdGlvbj4oXG4gICAgICB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KFxuICAgICAgICB0aGlzLnZhbHVlTmFtZSxcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgaW5kZXhcbiAgICAgIClcbiAgICApO1xuICB9XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55IHtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuZGF0YSAmJlxuICAgICAgISF0aGlzLnZpc2libGVUb3RhbFJvdyAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24gJiZcbiAgICAgICF0aGlzLmlzU2V0dFxuICAgICkge1xuICAgICAgdGhpcy5kYXRhLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgsXG4gICAgICAgIHRoaXMudG90YWxWYWx1ZSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3NbaW5kZXhdLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICB9XG4gIHByaXZhdGUgaXNNYXRyaXhWYWx1ZUVtcHR5KHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5pc09iamVjdCh2YWxbaV0pICYmIE9iamVjdC5rZXlzKHZhbFtpXSkubGVuZ3RoID4gMClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09IDA7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIsXG4gIFtcbiAgICBcIiFuYW1lXCIsXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjZWxsVHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICAgIHZhciByZXMgPSBNYXRyaXhEcm9wZG93bkNvbHVtbi5nZXRDb2x1bW5UeXBlcygpO1xuICAgICAgICByZXMuc3BsaWNlKDAsIDAsIFwiZGVmYXVsdFwiKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY29sQ291bnRcIiwgZGVmYXVsdDogLTEsIGNob2ljZXM6IFstMSwgMCwgMSwgMiwgMywgNF0gfSxcbiAgICBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgfSxcbiAgICBcInJlYWRPbmx5OmJvb2xlYW5cIixcbiAgICBcIm1pbldpZHRoXCIsXG4gICAgXCJ3aWR0aFwiLFxuICAgIFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyZXF1aXJlZElmOmNvbmRpdGlvblwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2hvd0luTXVsdGlwbGVDb2x1bW5zOmJvb2xlYW5cIixcbiAgICAgIGRlcGVuZHNPbjogXCJjZWxsVHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9iai5pc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnM7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXG4gICAgICBjbGFzc05hbWVQYXJ0OiBcInZhbGlkYXRvclwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0b3RhbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInN1bVwiLCBcImNvdW50XCIsIFwibWluXCIsIFwibWF4XCIsIFwiYXZnXCJdLFxuICAgIH0sXG4gICAgXCJ0b3RhbEV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJ0b3RhbEZvcm1hdFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxGb3JtYXRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidG90YWxEaXNwbGF5U3R5bGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRvdGFsQ3VycmVuY3lcIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlY3lDb2RlcygpO1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IFwiVVNEXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTtcbiAgfVxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIixcbiAgICAgIGNsYXNzTmFtZTogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJjb2x1bW5zTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdLFxuICAgIH0sXG4gICAgXCJob3Jpem9udGFsU2Nyb2xsOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlW11cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZHJvcGRvd25cIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbHVtbkNvbENvdW50XCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0XSB9LFxuICAgIFwiY29sdW1uTWluV2lkdGhcIixcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhiYXNlXCJcbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlLnRzIiwiaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIG5vbiB2YWx1ZSBxdWVzdGlvbi4gVGhpcyBxdWVzdGlvbiBkb2Vzbid0IGFkZCBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGhpZGVzIHNvbWUgcHJvcGVydGllcywgaW5jbHVkaW5nIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTm9uVmFsdWUgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm5vbnZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChcbiAgICBvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PixcbiAgICBjb250ZXh0OiBhbnlcbiAgKSB7fVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibm9udmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWx1ZU5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiaXNSZXF1aXJlZFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZUxvY2F0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTm9uVmFsdWUoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbm5vbnZhbHVlLnRzIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuZXhwb3J0IGNsYXNzIFN0eWxlc01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBTdXJ2ZXlKU1N0eWxlc1NoZWV0SWQgPSBcInN1cnZleWpzLXN0eWxlc1wiO1xuXG4gIHB1YmxpYyBzdGF0aWMgU3R5bGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3NcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNFwiLFxuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2N1c3RvbV9oZWFkZXJcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNzVweDsgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcIixcbiAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9jb250YWluZXJcIjpcbiAgICAvLyAgIFwibWF4LXdpZHRoOiA4MCU7IG1hcmdpbjogYXV0bzsgcG9zaXRpb246IHJlbGF0aXZlOyBjb2xvcjogIzZkNzA3MjsgcGFkZGluZzogMCAxZW07XCIsXG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAucGFuZWwtYm9keVwiOlxuICAgIC8vICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMWVtIDFlbSA1ZW0gMWVtOyBib3JkZXItdG9wOiAycHggc29saWQgbGlnaHRncmF5O1wiLFxuXG4gICAgXCIuc3ZfbWFpbiBzcGFuXCI6IFwid29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X21haW4gbGVnZW5kXCI6IFwiYm9yZGVyOiBub25lOyBtYXJnaW46IDA7XCIsXG5cbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuXCI6IFwicGFkZGluZzogMC41ZW0gMWVtIDEuNWVtIDFlbTtcIixcbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xY2JjIGlucHV0W3R5cGU9Y2hlY2tib3hdLCAuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPXJhZGlvXVwiOlxuICAgICAgXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4XCIsXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0biBmaWVsZHNldFwiOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmVcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXIgXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luLXJpZ2h0OiAyNTBweDsgbWFyZ2luLWxlZnQ6IDQwcHg7IG1hcmdpbi10b3A6IDEwcHg7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9yYWRpb2dyb3VwX2NvbnRyb2xfbGFiZWxcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lOyBwb3NpdGlvbjogc3RhdGljO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveFwiOlxuICAgICAgXCJtYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O1wiLFxuXG4gICAgXCIuc3Zfcm93XCI6IFwiY2xlYXI6IGJvdGg7IG1pbi13aWR0aDozMDBweDtcIixcbiAgICBcIi5zdl9yb3cgLnN2X3FzdG5cIjogXCJmbG9hdDogbGVmdFwiLFxuICAgIFwiLnN2X3JvdyAuc3ZfcXN0bjpsYXN0LWNoaWxkXCI6IFwiZmxvYXQ6IG5vbmVcIixcbiAgICBcIi5zdl9xc3RuXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgb3ZlcmZsb3c6IGF1dG87IG1pbi13aWR0aDozMDBweDtcIixcbiAgICBcIi5zdl9wX2NvbnRhaW5lclwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1pbi13aWR0aDozMDBweDtcIixcbiAgICBcIi5zdl9xYmxuIC5jaGVja2JveC1tYXRlcmlhbFwiOiBcIm1hcmdpbi1yaWdodDogM3B4O1wiLFxuICAgIFwiLnN2X3FjYnggLmNoZWNrYm94LW1hdGVyaWFsXCI6IFwibWFyZ2luLXJpZ2h0OiA1cHg7XCIsXG4gICAgXCIuc3ZfcWNieCAuY2hlY2tib3ggbGFiZWxcIjogXCJqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xc3RuIC5yYWRpbyBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsID4gbGFiZWwgaW1nXCI6IFwicG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcXN0biBsYWJlbC5zdl9xX21fbGFiZWxcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBtYXJnaW46IDA7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTtcIixcbiAgICBcIi5zdl9xc3RuIHRkXCI6IFwicG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2X3FfbXRfaXRlbV92YWx1ZVwiOiBcImZsb2F0OiBsZWZ0O1wiLFxuICAgICdbZGlyPVwicnRsXCJdIC5zdl9xX210X2l0ZW1fdmFsdWUnOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIi5zdl9xc3RuLnN2X3FzdG5fbGVmdFwiOiBcIm1hcmdpbi10b3A6IDAuNzVlbTtcIixcbiAgICBcIi5zdl9xc3RuIC50aXRsZS1sZWZ0XCI6IFwiZmxvYXQ6IGxlZnQ7IG1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgICdbZGlyPVwicnRsXCJdIC5zdl9xc3RuIC50aXRsZS1sZWZ0JzogXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1sZWZ0OiAxZW07XCIsXG4gICAgXCIuc3ZfcXN0biAuY29udGVudC1sZWZ0XCI6IFwib3ZlcmZsb3c6IGhpZGRlblwiLFxuICAgIFwiLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUgLnN2X3FfcmFkaW9ncm91cF9vdGhlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2NoZWNrYm94X2lubGluZSAuc3ZfcV9jaGVja2JveF9vdGhlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUsIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOlxuICAgICAgXCJsaW5lLWhlaWdodDogMi41ZW07XCIsXG4gICAgXCIuZm9ybS1pbmxpbmUgLnN2X3FfY2hlY2tib3hfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjogXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5mb3JtLWlubGluZSAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X2ltZ3NlbCAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmU6bm90KDpsYXN0LWNoaWxkKVwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0XCI6IFwiYm9yZGVyOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9maWxlX3BsYWNlaG9sZGVyXCI6IFwiZGlzcGxheTpub25lXCIsXG5cbiAgICBcIi5zdl9wX3RpdGxlXCI6IFwicGFkZGluZy1sZWZ0OiAxZW07IHBhZGRpbmctYm90dG9tOiAwLjNlbTtcIixcbiAgICBcIi5zdl9wX3RpdGxlX2V4cGFuZGFibGVcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvblwiOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvbjo6YmVmb3JlXCI6XG4gICAgICBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHBhZGRpbmc6IDAuNWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE1DQXhNQ0lnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVEFnTVRBN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4emRIbHNaU0IwZVhCbFBTSjBaWGgwTDJOemN5SStEUW9KTG5OME1IdG1hV3hzT2lNMlJEY3dOekk3ZlEwS1BDOXpkSGxzWlQ0TkNqeHdiMng1WjI5dUlHTnNZWE56UFNKemREQWlJSEJ2YVc1MGN6MGlNaXd5SURBc05DQTFMRGtnTVRBc05DQTRMRElnTlN3MUlDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9wX3RpdGxlIC5zdl9wYW5lbF9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjpcbiAgICAgIFwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIixcbiAgICBcIi5zdl9wX2Zvb3RlclwiOiBcInBhZGRpbmctbGVmdDogMWVtOyBwYWRkaW5nLWJvdHRvbTogMWVtO3BhZGRpbmctdG9wOiAxZW07XCIsXG5cbiAgICBcIi5zdl9xX2ZpbGUgPiBpbnB1dFt0eXBlPWZpbGVdLCAuc3ZfcV9maWxlID4gYnV0dG9uXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2ZpbGVfcHJldmlld1wiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsgcGFkZGluZzogNXB4OyBtYXJnaW4tdG9wOiAxMHB4O1wiLFxuICAgIFwiLnN2X3FfZmlsZV9wcmV2aWV3ID4gYVwiOlxuICAgICAgXCJkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgdmVydGljYWwtYWxpZ246IHRvcDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIjogXCJsaW5lLWhlaWdodDogbm9ybWFsO1wiLFxuICAgIFwiLnN2X3FfZmlsZV9yZW1vdmVcIjogXCJkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyO1wiLFxuXG4gICAgXCIuc3ZfcV9tX2NlbGxfdGV4dFwiOiBcImN1cnNvcjogcG9pbnRlcjtcIixcblxuICAgIFwiLnN2X3FfZGRfb3RoZXJcIjogXCJtYXJnaW4tdG9wOiAxZW07XCIsXG4gICAgXCIuc3ZfcV9kZF9vdGhlciBpbnB1dFwiOiBcIndpZHRoOiAxMDAlO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0xXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC0yLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTJcIjpcbiAgICAgIFwid2lkdGg6IDUwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtMywgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC0zXCI6XG4gICAgICBcIndpZHRoOiAzMy4zMzMzMyU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTQsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtNFwiOlxuICAgICAgXCJ3aWR0aDogMjUlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC01LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTVcIjpcbiAgICAgIFwid2lkdGg6IDIwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0xLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTFcIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IG1heC13aWR0aDogMTAwJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tMiwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi0yXCI6XG4gICAgICBcIm1heC13aWR0aDogNTAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0zLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTNcIjpcbiAgICAgIFwibWF4LXdpZHRoOiAzMy4zMzMzMyU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTQsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tNFwiOlxuICAgICAgXCJtYXgtd2lkdGg6IDI1JTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tNSwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi01XCI6XG4gICAgICBcIm1heC13aWR0aDogMjAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3FfZmlsZV9pbnB1dFwiOiBcImNvbG9yOiB0cmFuc3BhcmVudDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2XCI6XG4gICAgICBcIm92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyBwYWRkaW5nOiA0cHg7IGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsgYm9yZGVyLXJhZGl1czogNHB4O1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsIGxhYmVsID4gZGl2ID4gaW1nLCAuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXYgPiBlbWJlZFwiOlxuICAgICAgXCJkaXNwbGF5OiBibG9jaztcIixcblxuICAgIFwiLnN2X3FzdG4gdGFibGUgdHIgdGQgLnN2X3FfbV9jZWxsX2xhYmVsXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwO1wiLFxuXG4gICAgXCJmLXBhbmVsXCI6IFwicGFkZGluZzogMC41ZW0gMWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGxpbmUtaGVpZ2h0OiAyZW07XCIsXG5cbiAgICBcIi5zdl9wcm9ncmVzc19iYXIgPiBzcGFuXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3Ffc2VsZWN0X2NvbHVtblwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1pbi13aWR0aDogMTAlO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uID4gKjpub3QoLnN2X3RlY2huaWNhbClcIjogXCJkaXNwbGF5OiBibG9jaztcIixcblxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW4gdGV4dGFyZWFcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IDA7IHBhZGRpbmctbGVmdDogMDsgbGluZS1oZWlnaHQ6IGluaXRpYWw7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtaGlkZGVuXCI6IFwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXZpc3VhbGx5aGlkZGVuXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAxcHggIWltcG9ydGFudDsgd2lkdGg6IDFweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogaGlkZGVuOyBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7IGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcIixcblxuICAgIC8vIHBhbmVsZHluYW1pYyBwcm9ncmVzc1xuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6XG4gICAgICBcImhlaWdodDogMC4xOWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgaGVpZ2h0OiAxMDAlOyBwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgLy8gRU8gcGFuZWxkeW5hbWljIHByb2dyZXNzXG5cbiAgICAvLyBwYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogMjUwcHg7IG1hcmdpbi10b3A6IDIwcHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCI6IFwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tdG9wOiAtMThweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG4tLWxpc3QtbW9kZVwiOlxuICAgICAgXCIgIGZsb2F0OiBub25lOyBtYXJnaW4tdG9wOiAxZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuIFwiOiBcIm1hcmdpbi10b3A6IDEuMjVlbTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlcjsgd2lkdGg6IDAuN2VtOyB0b3A6IC0wLjI4ZW07IHBvc2l0aW9uOiBhYnNvbHV0ZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCI6XG4gICAgICBcImxlZnQ6IC0xLjNlbTsgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4gXCI6XG4gICAgICBcInJpZ2h0OiAtMS4zZW07IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY3Vyc29yOiBhdXRvO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOlxuICAgICAgXCJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAwLjg3ZW07IG1hcmdpbi10b3A6IDAuNjllbTsgbWFyZ2luLWxlZnQ6IDRlbVwiLFxuICAgIC8vIEVPIHBhbmVsZHluYW1pY1xuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdpZHRoOiA2M3B4OyBoZWlnaHQ6IDI0cHg7IG1hcmdpbi1yaWdodDogMTdweDsgbWFyZ2luLWxlZnQ6IDIxcHg7IHBhZGRpbmc6IDJweCAzcHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4OyB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuNHM7IHRyYW5zaXRpb24tcHJvcGVydHk6IG1hcmdpbi1sZWZ0OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEwMCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWxcIjogXCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tbGVmdDogY2FsYyg1MCUgLSAxMHB4KTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1jaGVja2VkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiBjYWxjKDEwMCUgLSAyMHB4KTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuX19sYWJlbCBcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZSAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogY2FsYyg1MCUgLSAwLjYyNWVtKTtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuLS1jaGVja2VkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1ZW0pO1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIltzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3YtYm9vbGVhbl9fbGFiZWwgXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuLS1pbmRldGVybWluYXRlIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDUwJSAtIDAuNjI1ZW0pO1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuLS1jaGVja2VkIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1ZW0pO1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG5cbiAgICAvLyBFTyBib29sZWFuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9udW1cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX251bSArIHNwYW5cIjogXCJcIixcblxuICAgIC8vIFNpZ25hdHVyZVBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyBib3R0b206IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRyb2xzID4gYnV0dG9uXCI6IFwidXNlci1zZWxlY3Q6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lcj5kaXY+Y2FudmFzOmZvY3VzXCI6IFwib3V0bGluZTogbm9uZTtcIixcblxuICAgIC8vIGxvZ29cbiAgICAvLyBcIi5zdl9tYWluIC5zdl9oZWFkZXJcIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2xvZ29cIjogXCJcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS1sZWZ0XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXJpZ2h0OiAyZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tbGVmdDogMmVtOyBmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tcmlnaHQrLnN2LWxvZ28tLXJpZ2h0LXRhaWxcIjogXCJjbGVhcjogYm90aDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDtcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIE1lZGlhOiB7IFtrZXk6IHN0cmluZ106IHsgbWVkaWE6IHN0cmluZzsgc3R5bGU6IHN0cmluZyB9IH0gPSB7XG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtMVwiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0yXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTNcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtNFwiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC01XCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0blwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnRpdGxlLWxlZnRcIjoge1xuICAgICAgc3R5bGU6IFwiZmxvYXQ6IG5vbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGVcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRoZWFkXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRib2R5LCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0ciwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGRcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlOm5vdCguc3ZfcV9tYXRyaXgpIHRkOmJlZm9yZVwiOiB7XG4gICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKGhlYWRlcnMpO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS5zdl9xX21hdHJpeCB0ZDphZnRlclwiOiB7XG4gICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKGhlYWRlcnMpOyBwYWRkaW5nLWxlZnQ6IDFlbVwiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAucmFkaW8gbGFiZWwsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5jaGVja2JveCBsYWJlbFwiOiB7XG4gICAgICBzdHlsZTogXCJsaW5lLWhlaWdodDogMTJweDsgdmVydGljYWwtYWxpZ246IHRvcDtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gbGFiZWwuc3ZfcV9tX2xhYmVsXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGlubGluZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2N1c3RvbV9oZWFkZXJcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoM1wiOiB7XG4gICAgICBzdHlsZTogXCJmb250LXNpemU6IDEuNWVtO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDEzMDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAuc3ZfaGVhZGVyIGgzIHNwYW5cIjoge1xuICAgICAgc3R5bGU6IFwiZm9udC1zaXplOiAwLjc1ZW07XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNzAwcHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwX2NzcyAuc3YtcHJvZ3Jlc3NfX3RleHRcIjoge1xuICAgICAgc3R5bGU6IFwibWFyZ2luLWxlZnQ6IDhlbTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWluLXdpZHRoOiA3NjhweClcIixcbiAgICB9LFxuXG4gICAgXCIuc3Zfcm93XCI6IHtcbiAgICAgIHN0eWxlOiBcIiBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7XCIsXG4gICAgICBtZWRpYTogXCJAc3VwcG9ydHMgKGRpc3BsYXk6IGZsZXgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2LXZ1ZS1yb3ctYWRkaXRpb25hbC1kaXZcIjoge1xuICAgICAgc3R5bGU6IFwiIGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZmxleC1iYXNpczogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBzdXBwb3J0cyAoZGlzcGxheTogZmxleClcIixcbiAgICB9LFxuXG4gICAgXCIuc3Ytcm93ID4gLnN2LXJvd19fcGFuZWwsIC5zdi1yb3dfX3F1ZXN0aW9uOm5vdCg6bGFzdC1jaGlsZClcIjoge1xuICAgICAgc3R5bGU6IFwiZmxvYXQ6IGxlZnQ7XCIsXG4gICAgICBtZWRpYTpcbiAgICAgICAgXCJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSlcIixcbiAgICB9LFxuXG4gICAgXCJbZGlyPSdydGwnXSxbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgICBtZWRpYTpcbiAgICAgICAgXCJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSlcIixcbiAgICB9LFxuXG4gICAgXCIuc3Ytcm93ID4gLnN2LXJvd19fcGFuZWwsIC5zdi1yb3dfX3F1ZXN0aW9uXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIFRoZW1lQ29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjRmNGY0XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzBhYTM4NFwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICB9LFxuICAgIG9yYW5nZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y4ZjhmOFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiI2Y3ODExOVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiNlNzcxMDlcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiI2Y3ODExOVwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgfSxcbiAgICBkYXJrYmx1ZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZDlkOGRkXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y2ZjdmMlwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMyYzNmNWRcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgfSxcbiAgICBkYXJrcm9zZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGRkMmNlXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y3ZWZlZFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzY4NjU2ZVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiM1ODU1NWVcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgfSxcbiAgICBzdG9uZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjY2RjY2QyXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2VmZWRmNFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMxOTE5NTVcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgfSxcbiAgICB3aW50ZXI6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzgyYjhkYVwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkYWUxZTdcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMWUxZDIwXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIH0sXG4gICAgd2ludGVyc3RvbmU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiIzMyMzIzMlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmOGY4ZjhcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiM1YWM4ZmFcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMDZhMWU3XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIH0sXG4gICAgbW9kZXJuOiB7XG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzFhYjM5NFwiLFxuICAgICAgXCIkYWRkLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICAgIFwiJHJlbW92ZS1idXR0b24tY29sb3JcIjogXCIjZmYxODAwXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZDUyOTAxXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MFwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHRleHQtYm9yZGVyLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgICAgXCIkZGlzYWJsZWQtdGV4dC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwicmdiKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJGRyb3Bkb3duLWJvcmRlci1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYW5zd2VyLWJhY2tncm91bmQtY29sb3JcIjogXCJyZ2JhKDI2LCAxNzksIDE0OCwgMC4yKVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcInJnYmEoMjEzLCA0MSwgMSwgMC4yKVwiLFxuICAgICAgXCIkcmFkaW8tY2hlY2tlZC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGNsZWFuLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICB9LFxuICAgIGJvb3RzdHJhcDoge1xuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxOGE2ODlcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgIH0sXG4gICAgYm9vdHN0cmFwbWF0ZXJpYWw6IHtcbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMThhNjg5XCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgIH0sXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfZGVmYXVsdF9jc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGhyXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10sIC5zdl9kZWZhdWx0X2NzcyBidXR0b25cIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddOmhvdmVyLCAuc3ZfZGVmYXVsdF9jc3MgYnV0dG9uOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2hlYWRlclwiOiBcImNvbG9yOiAkaGVhZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jdXN0b21faGVhZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9ib2R5XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3NfYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3Jvd1wiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9yb290ID4gLnN2X3JvdzpudGgtY2hpbGQob2RkKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX3Jvb3QgPiAuc3Zfcm93Om50aC1jaGlsZChldmVuKVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX290aGVyIGlucHV0XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfdGV4dF9yb290XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfZHJvcGRvd25fY29udHJvbFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J3RleHQnXVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHNlbGVjdFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIHRleHRhcmVhXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXQ6bm90KFt0eXBlPSdidXR0b24nXSk6bm90KFt0eXBlPSdyZXNldCddKTpub3QoW3R5cGU9J3N1Ym1pdCddKTpub3QoW3R5cGU9J2ltYWdlJ10pOm5vdChbdHlwZT0nY2hlY2tib3gnXSk6bm90KFt0eXBlPSdyYWRpbyddKVwiOlxuICAgICAgXCJib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7Y29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0Om5vdChbdHlwZT0nYnV0dG9uJ10pOm5vdChbdHlwZT0ncmVzZXQnXSk6bm90KFt0eXBlPSdzdWJtaXQnXSk6bm90KFt0eXBlPSdpbWFnZSddKTpub3QoW3R5cGU9J2NoZWNrYm94J10pOm5vdChbdHlwZT0ncmFkaW8nXSk6Zm9jdXNcIjpcbiAgICAgIFwiYm9yZGVyOiAxcHggc29saWQgJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIC5zdl9zZWxlY3Rfd3JhcHBlciAuc3ZfcV9kcm9wZG93bl9jb250cm9sIFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Ffb3RoZXIgaW5wdXQ6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3RleHRfcm9vdDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfZHJvcGRvd25fY29udHJvbDpmb2N1c1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J3RleHQnXTpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgJy5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3EgaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLCAuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyc6XG4gICAgICBcIm91dGxpbmU6IDFweCBkb3R0ZWQgJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3Mgc2VsZWN0OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0ZXh0YXJlYTpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3Zfc2VsZWN0X3dyYXBwZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3Zfc2VsZWN0X3dyYXBwZXI6OmJlZm9yZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3JhdGluZ19pdGVtLmFjdGl2ZSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0XCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0OmhvdmVyXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0YWJsZS5zdl9xX21hdHJpeCB0clwiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0YWJsZS5zdl9xX21hdHJpeF9kcm9wZG93biB0clwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXhfZHluYW1pYyB0clwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9tX2NlbGxfc2VsZWN0ZWRcIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX3JlbW92ZTpob3ZlclwiOiBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ZpbGVfY2hvb3NlX2J1dHRvblwiOlxuICAgICAgXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX2Nob29zZV9idXR0b246aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yXCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9kZXNjcmlwdGlvblwiOiBcInBhZGRpbmctbGVmdDogMS4yOWVtO1wiLFxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuICAgIC8vZW8gYm9vbGVhblxuICB9O1xuICBwdWJsaWMgc3RhdGljIG1vZGVyblRoZW1lQ3NzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRyZW1vdmUtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3YtYnRuXCI6IFwiY29sb3I6ICRpbnB1dHMtYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBmaWxsOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tYWxsb3dob3Zlcjpob3ZlciAuc3YtY2hlY2tib3hfX3N2Z1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgZmlsbDogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNoZWNrYm94LS1jaGVja2VkIC5zdi1jaGVja2JveF9fc3ZnXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBmaWxsOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWNoZWNrZWQuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBmaWxsOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1jb21tZW50XCI6IFwiYm9yZGVyLWNvbG9yOiAkdGV4dC1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtY29tbWVudDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtY29tcGxldGVkcGFnZVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LWNvbnRhaW5lci1tb2Rlcm5cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtY29udGFpbmVyLW1vZGVybl9fdGl0bGVcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZGVzY3JpcHRpb25cIjogXCJjb2xvcjogJGRpc2FibGVkLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd25cIjogXCJib3JkZXItYm90dG9tOiAwLjA2ZW0gc29saWQgJHRleHQtYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkZHJvcGRvd24tYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvclwiOiBcImJvcmRlci1jb2xvcjogJGVycm9yLWNvbG9yOyBjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6cGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWRyb3Bkb3duLS1lcnJvcjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19kZWNvcmF0b3JcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2xlYW4tYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHJlbW92ZS1idXR0b24tY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fY2hvb3NlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fcmVtb3ZlLXN2Z1wiOiBcImZpbGw6ICNmZjE4MDA7XCIsXG4gICAgXCIuc3YtZmlsZV9fc2lnbiBhXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fY29tcGxldGUtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19uZXh0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fcHJldi1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3N0YXJ0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fcHJldmlldy1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX2VkaXQtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXI6aG92ZXIgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZCAuc3YtaW1hZ2VwaWNrZXJfX2ltYWdlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWltYWdlcGlja2VyX19pdGVtLS1kaXNhYmxlZC5zdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZCAuc3YtaW1hZ2VwaWNrZXJfX2ltYWdlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LWl0ZW1fX2NvbnRyb2w6Zm9jdXMgKyAuc3YtaXRlbV9fZGVjb3JhdG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4X190ZXh0LS3RgWhlY2tlZFwiOlxuICAgICAgXCJjb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1tYXRyaXhfX3RleHQtLWRpc2FibGVkLnN2LW1hdHJpeF9fdGV4dC0t0YFoZWNrZWRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4ZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJmaWxsOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImZpbGw6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc19fYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcHJvZ3Jlc3NfX3RleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX2VyYm94XCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fdGl0bGUtLWFuc3dlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYW5zd2VyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcXVlc3Rpb25fX3RpdGxlLS1lcnJvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGZpbGw6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhZGlvLS1hbGxvd2hvdmVyOmhvdmVyIC5zdi1yYWRpb19fc3ZnXCI6IFwiZmlsbDogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRyYWRpby1jaGVja2VkLWNvbG9yOyBmaWxsOiAkcmFkaW8tY2hlY2tlZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tZGlzYWJsZWQgLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvLS1kaXNhYmxlZC5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nIGlucHV0OmZvY3VzICsgLnN2LXJhdGluZ19fbWluLXRleHQgKyAuc3YtcmF0aW5nX19pdGVtLXRleHQsIC5zdi1yYXRpbmcgaW5wdXQ6Zm9jdXMgKyAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwib3V0bGluZS1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXI6IHNvbGlkIDAuMTg3NWVtICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nLS1kaXNhYmxlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyIC5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6IFwiYmFja2dyb3VuZDogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3Ytc2VsZWN0YmFzZV9fY2xlYXItYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGNsZWFuLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi10YWJsZVwiOiBcImJhY2tncm91bmQtY29sb3I6IHJnYmEoJG1haW4taG92ZXItY29sb3IsIDAuMSk7XCIsXG4gICAgXCIuc3YtdGV4dDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgJy5zdi10ZXh0W3R5cGU9XCJkYXRlXCJdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3InOlxuICAgICAgXCJjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXRleHQtLWVycm9yXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjo6LW1zLXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBib290c3RyYXBUaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcF9kZXNjcmlwdGlvblwiOiBcInBhZGRpbmctbGVmdDogMS42NmVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FzdG5fZXJyb3JfYm90dG9tXCI6IFwibWFyZ2luLXRvcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMDtcIixcbiAgICBcIi5zdl9tYWluIC5wcm9ncmVzc1wiOiBcIndpZHRoOiA2MCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcbiAgICBcIi5zdl9tYWluIC50YWJsZT50Ym9keT50cj50ZFwiOiBcIm1pbi13aWR0aDogOTBweDtcIixcbiAgICBcIi5zdl9tYWluIGYtcGFuZWwgLnN2X3FzdG5cIjogXCJwYWRkaW5nOiAwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGJvb3RzdHJhcG1hdGVyaWFsVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAuaXMtZm9jdXNlZCAuZm9ybS1jb250cm9sXCI6XG4gICAgICBcImxpbmVhci1ncmFkaWVudCgwZGVnLCAkbWFpbi1jb2xvciAycHgsICRtYWluLWNvbG9yIDApLGxpbmVhci1ncmFkaWVudCgwZGVnLCAjRDJEMkQyIDFweCwgdHJhbnNwYXJlbnQgMCk7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FzdG5cIjogXCJtYXJnaW4tYm90dG9tOiAxcmVtO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOlxuICAgICAgXCJoZWlnaHQ6IDEwMCU7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVja1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLmNoZWNrYm94LW1hdGVyaWFsIC5jaGVjazpiZWZvcmVcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2lyY2xlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgbGFiZWwucmFkaW8taW5saW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiAuY2hlY2tcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0LmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1kZWZhdWx0OmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeTphY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5vcGVuPi5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGlucHV0W3R5cGU9J2J1dHRvbiddLmJ0bi1wcmltYXJ5LCAuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgYnV0dG9uLmJ0bi1wcmltYXJ5XCI6XG4gICAgICBcImNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXS5idG4tcHJpbWFyeTpob3ZlciwgLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGJ1dHRvbi5idG4tcHJpbWFyeTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfZmlsZV9yZW1vdmU6aG92ZXJcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tZ3JvdXAgaW5wdXRbdHlwZT1maWxlXVwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG9wYWNpdHk6IDE7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzXCI6IFwid2lkdGg6IDYwJTsgaGVpZ2h0OiAxLjVlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4gLmNoZWNrYm94LWRlY29yYXRvclwiOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbC5zdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLXNsaWRlci1jb2xvcjtcIixcbiAgICAvL2VvIGJvb2xlYW5cbiAgfTtcblxuICBwcml2YXRlIHNoZWV0OiBDU1NTdHlsZVNoZWV0ID0gbnVsbDtcblxuICBzdGF0aWMgZmluZFNoZWV0KHN0eWxlU2hlZXRJZDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICAhIWRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSAmJlxuICAgICAgICAoPGFueT5kb2N1bWVudCkuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlW1wiaWRcIl0gPT09IHN0eWxlU2hlZXRJZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiA8Q1NTU3R5bGVTaGVldD5kb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlU2hlZXQoc3R5bGVTaGVldElkOiBzdHJpbmcpIHtcbiAgICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGUuaWQgPSBzdHlsZVNoZWV0SWQ7XG4gICAgLy8gQWRkIGEgbWVkaWEgKGFuZC9vciBtZWRpYSBxdWVyeSkgaGVyZSBpZiB5b3UnZCBsaWtlIVxuICAgIC8vIHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIFwic2NyZWVuXCIpXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDEwMjRweClcIilcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PnN0eWxlLnNoZWV0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcHBseVRoZW1lKFxuICAgIHRoZW1lTmFtZTogc3RyaW5nID0gXCJkZWZhdWx0XCIsXG4gICAgdGhlbWVTZWxlY3Rvcjogc3RyaW5nID0gXCIuc3ZfbWFpblwiXG4gICkge1xuICAgIGxldCBUaGVtZUNzczogYW55O1xuXG4gICAgaWYgKHRoZW1lTmFtZSA9PT0gXCJtb2Rlcm5cIikgdGhlbWVTZWxlY3RvciA9IFwiLnN2LXJvb3QtbW9kZXJuIFwiO1xuXG4gICAgaWYgKFxuICAgICAgW1wiYm9vdHN0cmFwXCIsIFwiYm9vdHN0cmFwbWF0ZXJpYWxcIiwgXCJtb2Rlcm5cIl0uaW5kZXhPZih0aGVtZU5hbWUpICE9PSAtMVxuICAgICkge1xuICAgICAgVGhlbWVDc3MgPSAoPGFueT5TdHlsZXNNYW5hZ2VyKVt0aGVtZU5hbWUgKyBcIlRoZW1lQ3NzXCJdO1xuICAgICAgc3VydmV5Q3NzLmN1cnJlbnRUeXBlID0gdGhlbWVOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBUaGVtZUNzcyA9IFN0eWxlc01hbmFnZXIuVGhlbWVDc3M7XG4gICAgICBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSBcInN0YW5kYXJkXCI7XG4gICAgfVxuXG4gICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgbGV0IHNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQodGhlbWVOYW1lICsgdGhlbWVTZWxlY3Rvcik7XG4gICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgIHNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgICAgbGV0IHRoZW1lID1cbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW3RoZW1lTmFtZV0gfHxcbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUaGVtZUNzcykuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBsZXQgY3NzUnVsZVRleHQgPSBUaGVtZUNzc1tzZWxlY3Rvcl07XG4gICAgICAgICAgT2JqZWN0LmtleXModGhlbWUpLmZvckVhY2goXG4gICAgICAgICAgICAoY29sb3JWYXJpYWJsZU5hbWUpID0+XG4gICAgICAgICAgICAgIChjc3NSdWxlVGV4dCA9IGNzc1J1bGVUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChcIlxcXFxcIiArIGNvbG9yVmFyaWFibGVOYW1lLCBcImdcIiksXG4gICAgICAgICAgICAgICAgdGhlbWVbY29sb3JWYXJpYWJsZU5hbWVdXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgICAgICAgdGhlbWVTZWxlY3RvciArIHNlbGVjdG9yICsgXCIgeyBcIiArIGNzc1J1bGVUZXh0ICsgXCIgfVwiLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgRW5hYmxlZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgdGhpcy5zaGVldCA9IFN0eWxlc01hbmFnZXIuZmluZFNoZWV0KFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkKTtcbiAgICAgIGlmICghdGhpcy5zaGVldCkge1xuICAgICAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldChcbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlN1cnZleUpTU3R5bGVzU2hlZXRJZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdHlsZXModGhpcy5zaGVldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVTdHlsZXMoc2hlZXQ6IENTU1N0eWxlU2hlZXQpIHtcbiAgICBpZiAoU3R5bGVzTWFuYWdlci5FbmFibGVkKSB7XG4gICAgICBPYmplY3Qua2V5cyhTdHlsZXNNYW5hZ2VyLlN0eWxlcykuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgc2VsZWN0b3IgKyBcIiB7IFwiICsgU3R5bGVzTWFuYWdlci5TdHlsZXNbc2VsZWN0b3JdICsgXCIgfVwiLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuTWVkaWEpLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgICAgIFN0eWxlc01hbmFnZXIuTWVkaWFbc2VsZWN0b3JdLm1lZGlhICtcbiAgICAgICAgICAgICAgXCIgeyBcIiArXG4gICAgICAgICAgICAgIHNlbGVjdG9yICtcbiAgICAgICAgICAgICAgXCIgeyBcIiArXG4gICAgICAgICAgICAgIFN0eWxlc01hbmFnZXIuTWVkaWFbc2VsZWN0b3JdLnN0eWxlICtcbiAgICAgICAgICAgICAgXCIgfSB9XCIsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N0eWxlc21hbmFnZXIudHMiLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBKc29uRXJyb3IsIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBJU3VydmV5LFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleUltcGwsXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUXVlc3Rpb24sXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIElQYWdlLFxuICBTdXJ2ZXlFcnJvcixcbiAgRXZlbnQsXG4gIElTdXJ2ZXlFcnJvck93bmVyLFxuICBJU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RWxlbWVudCxcbn0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuaW1wb3J0IHsgSVN1cnZleVRyaWdnZXJPd25lciwgU3VydmV5VHJpZ2dlciB9IGZyb20gXCIuL3RyaWdnZXJcIjtcbmltcG9ydCB7IENhbGN1bGF0ZWRWYWx1ZSB9IGZyb20gXCIuL2NhbGN1bGF0ZWRWYWx1ZVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgVGV4dFByZVByb2Nlc3NvciwgVGV4dFByZVByb2Nlc3NvclZhbHVlIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5pbXBvcnQgeyBkeFN1cnZleVNlcnZpY2UgfSBmcm9tIFwiLi9keFN1cnZleVNlcnZpY2VcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IEN1c3RvbUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcIi4vc3R5bGVzbWFuYWdlclwiO1xuaW1wb3J0IHsgU3VydmV5VGltZXIgfSBmcm9tIFwiLi9zdXJ2ZXl0aW1lclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQge1xuICBIdG1sQ29uZGl0aW9uSXRlbSxcbiAgVXJsQ29uZGl0aW9uSXRlbSxcbiAgRXhwcmVzc2lvbkl0ZW0sXG59IGZyb20gXCIuL2V4cHJlc3Npb25JdGVtc1wiO1xuaW1wb3J0IHsgRXhwcmVzc2lvblJ1bm5lciwgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG4vKipcbiAqIFRoZSBgU3VydmV5YCBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1cnZleSwgUGFnZXMsIFF1ZXN0aW9ucywgZmxvdyBsb2dpYyBhbmQgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5TW9kZWwgZXh0ZW5kcyBCYXNlXG4gIGltcGxlbWVudHNcbiAgICBJU3VydmV5LFxuICAgIElTdXJ2ZXlEYXRhLFxuICAgIElTdXJ2ZXlJbXBsLFxuICAgIElTdXJ2ZXlUcmlnZ2VyT3duZXIsXG4gICAgSVN1cnZleUVycm9yT3duZXIsXG4gICAgSUxvY2FsaXphYmxlT3duZXIge1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgcHJpdmF0ZSBzdGF0aWMgc3R5bGVzTWFuYWdlcjogU3R5bGVzTWFuYWdlciA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgcGxhdGZvcm06IHN0cmluZyA9IFwidW5rbm93blwiO1xuICBwdWJsaWMgZ2V0IHBsYXRmb3JtTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5wbGF0Zm9ybTtcbiAgfVxuICAvKipcbiAgICogWW91IGNhbiBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgZmllbGQgKGNvbW1lbnQgZmllbGQpIGZvciB0aGUgbW9zdCBvZiBxdWVzdGlvbnM7IHVzZXJzIGNhbiBlbnRlciBhZGRpdGlvbmFsIGNvbW1lbnRzIHRvIHRoZWlyIHJlc3BvbnNlLlxuICAgKiBUaGUgY29tbWVudCBmaWVsZCBpbnB1dCBpcyBzYXZlZCBhcyBgJ3F1ZXN0aW9uIG5hbWUnICsgJ2NvbW1lbnRQcmVmaXgnYC5cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBjb21tZW50UHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gIH1cbiAgcHVibGljIHNldCBjb21tZW50UHJlZml4KHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuY29tbWVudFByZWZpeCA9IHZhbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRQYWdlVmFsdWUoKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVudFBhZ2VWYWx1ZVwiLCBudWxsKTtcbiAgfVxuICBwcml2YXRlIHNldCBjdXJyZW50UGFnZVZhbHVlKHZhbDogUGFnZU1vZGVsKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVudFBhZ2VWYWx1ZVwiLCB2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWx1ZXNIYXNoOiBIYXNoVGFibGU8YW55PiA9IHt9O1xuICBwcml2YXRlIHZhcmlhYmxlc0hhc2g6IEhhc2hUYWJsZTxhbnk+ID0ge307XG5cbiAgcHJpdmF0ZSBsb2NhbGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29tcGxldGVkU3RhdGVWYWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICBwcml2YXRlIGlzVGltZXJTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGVkIGFuZCB0aGUgYG9uQ29tcGxldGVgIGV2ZW50IGlzIGZpcmVkLiBZb3UgY2FuIHByZXZlbnQgdGhlIHN1cnZleSBmcm9tIGNvbXBsZXRpbmcgYnkgc2V0dGluZyBgb3B0aW9ucy5hbGxvd0NvbXBsZXRlYCB0byBgZmFsc2VgXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmFsbG93Q29tcGxldGVgIC0gU3BlY2lmaWVzIHdoZXRoZXIgYSB1c2VyIGNhbiBjb21wbGV0ZSBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBzdXJ2ZXkgZnJvbSBjb21wbGV0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqIDxici8+IGBvcHRpb25zLmlzQ29tcGxldGVPblRyaWdnZXJgIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGluZyBvbiBcImNvbXBsZXRlXCIgdHJpZ2dlci5cbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgb25Db21wbGV0aW5nOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB1c2VyIGNsaWNrcyB0aGUgJ0NvbXBsZXRlJyBidXR0b24gYW5kIGZpbmlzaGVzIGEgc3VydmV5LiBVc2UgdGhpcyBldmVudCB0byBzZW5kIHRoZSBzdXJ2ZXkgZGF0YSB0byB5b3VyIHdlYiBzZXJ2ZXIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nKHRleHQpYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gc2hvdyB0aGF0IHRoZSBzdXJ2ZXkgaXMgc2F2aW5nIHN1cnZleSBkYXRhIG9uIHlvdXIgc2VydmVyLiBUaGUgYHRleHRgIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byBzaG93IGEgY3VzdG9tIG1lc3NhZ2UgaW5zdGVhZCBvZiBkZWZhdWx0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ0Vycm9yKHRleHQpYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gc2hvdyB0aGF0IGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyB0aGUgZGF0YSBvbiB5b3VyIHNlcnZlci4gSWYgeW91IHdhbnQgdG8gc2hvdyBhIGN1c3RvbSBlcnJvciwgdXNlIGFuIG9wdGlvbmFsIGB0ZXh0YCBwYXJhbWV0ZXIuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nU3VjY2Vzcyh0ZXh0KWAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIHNob3cgdGhhdCB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5IHNhdmVkIG9uIHRoZSBzZXJ2ZXIuXG4gICAqIDxici8+IGBvcHRpb25zLnNob3dEYXRhU2F2aW5nQ2xlYXJgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBoaWRlIHRoZSB0ZXh0IGFib3V0IHRoZSBzYXZpbmcgcHJvZ3Jlc3MuXG4gICAqIDxici8+IGBvcHRpb25zLmlzQ29tcGxldGVPblRyaWdnZXJgIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBzdXJ2ZXkgaXMgY29tcGxldGVkIG9uIFwiY29tcGxldGVcIiB0cmlnZ2VyLlxuICAgKiAgQHNlZSBkYXRhXG4gICAqIEBzZWUgY2xlYXJJbnZpc2libGVWYWx1ZXNcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqL1xuICBwdWJsaWMgb25Db21wbGV0ZTogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgdXNlciBjbGlja3MgdGhlICdDb21wbGV0ZScgYnV0dG9uLiBUaGUgZXZlbnQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBVUkwgb3BlbmVkIGFmdGVyIGNvbXBsZXRpbmcgYSBzdXJ2ZXkuXG4gICAqIFNwZWNpZnkgdGhlIGBuYXZpZ2F0ZVRvVXJsYCBwcm9wZXJ0eSB0byBtYWtlIHN1cnZleSBuYXZpZ2F0ZSB0byBhbm90aGVyIHVybC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudXJsYCAtIFNwZWNpZmllcyBhIFVSTCBvcGVuZWQgYWZ0ZXIgY29tcGxldGluZyBhIHN1cnZleS4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGNhbmNlbCB0aGUgbmF2aWdhdGlvbiBhbmQgc2hvdyB0aGUgY29tcGxldGVkIHN1cnZleSBwYWdlLlxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG9Vcmw6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgc3VydmV5IGNoYW5nZWQgaXQncyBzdGF0ZSBmcm9tIFwic3RhcnRpbmdcIiB0byBcInJ1bm5pbmdcIi4gVGhlIFwic3RhcnRpbmdcIiBzdGF0ZSBtZWFucyB0aGF0IHN1cnZleSBzaG93cyB0aGUgc3RhcnRlZCBwYWdlLlxuICAgKiBUaGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgYSBzdGFydCBwYWdlIGluIHlvdXIgc3VydmV5LiBJbiB0aGlzIGNhc2UsIGFuIGVuZCB1c2VyIHNob3VsZCBjbGljayB0aGUgXCJTdGFydFwiIGJ1dHRvbiB0byBzdGFydCB0aGUgc3VydmV5LlxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKi9cbiAgcHVibGljIG9uU3RhcnRlZDogRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LFxuICAgIGFueVxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2xpY2tpbmcgdGhlICdOZXh0JyBidXR0b24gaWYgdGhlIGBzZW5kUmVzdWx0T25QYWdlTmV4dGAgaXMgc2V0IHRvIGB0cnVlYC4gWW91IGNhbiB1c2UgaXQgdG8gc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIGZvciBleGFtcGxlLCBpZiB5b3VyIHN1cnZleSBpcyBsYXJnZSBlbm91Z2guXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIEBzZWUgc2VuZFJlc3VsdE9uUGFnZU5leHRcbiAgICovXG4gIHB1YmxpYyBvblBhcnRpYWxTZW5kOiBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCkgPT4gYW55LCBhbnk+ID0gbmV3IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksXG4gICAgYW55XG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGN1cnJlbnQgcGFnZSBjaGFuZ2VzIHRvIGFub3RoZXIgcGFnZS4gVHlwaWNhbGx5IGl0IGhhcHBlbnMgd2hlbiBhIHVzZXIgY2xpY2sgdGhlICdOZXh0JyBvciAnUHJldicgYnV0dG9ucy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbi5vbGRDdXJyZW50UGFnZWAgLSB0aGUgcHJldmlvdXMgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5uZXdDdXJyZW50UGFnZWAgLSBhIG5ldyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLmFsbG93Q2hhbmdpbmdgIC0gc2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgY3VycmVudCBwYWdlIGNoYW5naW5nLiBJdCBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICogPGJyLz4gYG9wdGlvbi5pc05leHRQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBuZXh0IHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIG5leHQgcGFnZSBhZnRlciBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIDxici8+IGBvcHRpb24uaXNQcmV2UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgcHJldmlvdXMgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgcHJldmlvdXMgcGFnZSBiZWZvcmUgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgcHJldlBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqIEBzZWUgb25DdXJyZW50UGFnZUNoYW5nZWRcbiAgICoqL1xuICBwdWJsaWMgb25DdXJyZW50UGFnZUNoYW5naW5nOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgY3VycmVudCBwYWdlIGhhcyBiZWVuIGNoYW5nZWQgdG8gYW5vdGhlciBwYWdlLiBUeXBpY2FsbHkgaXQgaGFwcGVucyB3aGVuIGEgdXNlciBjbGljayBvbiAnTmV4dCcgb3IgJ1ByZXYnIGJ1dHRvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb24ub2xkQ3VycmVudFBhZ2VgIC0gYSBwcmV2aW91cyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLm5ld0N1cnJlbnRQYWdlYCAtIGEgbmV3IGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24uaXNOZXh0UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgbmV4dCBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiA8YnIvPiBgb3B0aW9uLmlzUHJldlBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIHByZXZpb3VzIHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIHByZXZpb3VzIHBhZ2UgYmVmb3JlIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG9uQ3VycmVudFBhZ2VDaGFuZ2luZ1xuICAgKi9cbiAgcHVibGljIG9uQ3VycmVudFBhZ2VDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKSBpcyBjaGFuZ2VkLiBJdCBjYW4gYmUgZG9uZSB2aWEgVUkgYnkgYSB1c2VyIG9yIHByb2dyYW1tYXRpY2FsbHkgb24gY2FsbGluZyB0aGUgYHNldFZhbHVlYCBtZXRob2QuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHZhbHVlIG5hbWUgdGhhdCBoYXMgYmVpbmcgY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB3aGljaCBgcXVlc3Rpb24ubmFtZWAgZXF1YWxzIHRvIHRoZSB2YWx1ZSBuYW1lLiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBxdWVzdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXMgdXNlZC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBxdWVzdGlvbnMsIHRoZSBgb3B0aW9ucy5xdWVzdGlvbmAgaXMgbnVsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMub2xkVmFsdWVgIC0gYW4gb2xkLCBwcmV2aW91cyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuIFlvdSBjYW4gY2hhbmdlIGl0LlxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqIEBzZWUgb25WYWx1ZUNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdpbmc6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBxdWVzdGlvbiB2YWx1ZSAoaS5lLiwgYW5zd2VyKSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgcXVlc3Rpb24gdmFsdWUgY2FuIGJlIGNoYW5nZWQgaW4gVUkgKGJ5IGEgdXNlcikgb3IgcHJvZ3JhbW1hdGljYWxseSAob24gY2FsbGluZyBgc2V0VmFsdWVgIG1ldGhvZCkuXG4gICAqIFVzZSB0aGUgYG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZGAgYW5kIGBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWRgIGV2ZW50cyB0byBoYW5kbGUgY2hhbmdlcyBpbiBhIHF1ZXN0aW9uIGluIHRoZSBQYW5lbCBEeW5hbWljIGFuZCBhIGNlbGwgcXVlc3Rpb24gaW4gbWF0cmljZXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHZhbHVlIG5hbWUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIGBxdWVzdGlvbi5uYW1lYCBlcXVhbHMgdG8gdGhlIHZhbHVlIG5hbWUuIElmIHRoZXJlIGFyZSBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyB1c2VkLiBJZiB0aGVyZSBpcyBubyBzdWNoIHF1ZXN0aW9ucywgdGhlIGBvcHRpb25zLnF1ZXN0aW9uYCBpcyBgbnVsbGAuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqIEBzZWUgb25WYWx1ZUNoYW5naW5nXG4gICAqIEBzZWUgb25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGEgcXVlc3Rpb24gdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBxdWVzdGlvbiBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBRdWVzdGlvbi52aXNpYmlsZVxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblZpc2libGVDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgYSBwYWdlIHZpc2liaWxpdHkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBwYWdlIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudmlzaWJsZWAgLSBhIHBhZ2UgYHZpc2libGVgIGJvb2xlYW4gdmFsdWUuXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblBhZ2VWaXNpYmxlQ2hhbmdlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNoYW5naW5nIGEgcGFuZWwgdmlzaWJpbGl0eS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCB3aGljaCB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnZpc2libGVgIC0gYSBwYW5lbCBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBQYW5lbE1vZGVsLnZpc2liaWxlXG4gICAqIEBzZWUgUGFuZWxNb2RlbC52aXNpYmlsZUlmXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbFZpc2libGVDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY3JlYXRpbmcgYSBuZXcgcXVlc3Rpb24uXG4gICAqIFVubGlrZSB0aGUgb25RdWVzdGlvbkFkZGVkIGV2ZW50LCB0aGlzIGV2ZW50IGNhbGxzIGZvciBhbGwgcXVlc3Rpb24gY3JlYXRlZCBpbiBzdXJ2ZXkgaW5jbHVkaW5nIGluc2lkZTogYSBwYWdlLCBwYW5lbCwgbWF0cml4IGNlbGwsIGR5bmFtaWMgcGFuZWwgYW5kIG11bHRpcGxlIHRleHQuXG4gICAqIG9yIGluc2lkZSBhIG1hdHJpeCBjZWxsIG9yIGl0IGNhbiBiZSBhIHRleHQgcXVlc3Rpb24gaW4gbXVsdGlwbGUgdGV4dCBpdGVtcyBvciBpbnNpZGUgYSBwYW5lbCBvZiBhIHBhbmVsIGR5bmFtaWMuXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gc2V0IHVwIHByb3BlcnRpZXMgdG8gYSBxdWVzdGlvbiBiYXNlZCBvbiBpdCdzIHR5cGUgZm9yIGFsbCBxdWVzdGlvbnMsIHJlZ2FyZGxlc3Mgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCwgb24gdGhlIHBhZ2Ugb3IgaW5zaWRlIGEgbWF0cml4IGNlbGwuXG4gICAqIFBsZWFzZSBub3RlOiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBldmVudCBmb3IgcXVlc3Rpb25zIGxvYWRlZCBmcm9tIEpTT04gdGhlbiB5b3UgaGF2ZSB0byBjcmVhdGUgc3VydmV5IHdpdGggZW1wdHkvbnVsbCBKU09OIHBhcmFtZXRlciwgYXNzaWduIHRoZSBldmVudCBhbmQgY2FsbCBzdXJ2ZXkuZnJvbUpTT04oeW91ckpTT04pIGZ1bmN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG5ld2x5IGNyZWF0ZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqIEBzZWUgb25RdWVzdGlvbkFkZGVkXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvbkNyZWF0ZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcXVlc3Rpb24gaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbmV3bHkgYWRkZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5kZXhgIC0gYW4gaW5kZXggb2YgdGhlIHF1ZXN0aW9uIGluIHRoZSBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRQYW5lbGAgLSBhIGNvbnRhaW5lciB3aGVyZSBhIG5ldyBxdWVzdGlvbiBpcyBsb2NhdGVkLiBJdCBjYW4gYmUgYSBwYWdlIG9yIHBhbmVsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb290UGFuZWxgIC0gdHlwaWNhbGx5LCBpdCBpcyBhIHBhZ2UuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICogQHNlZSBvblF1ZXN0aW9uQ3JlYXRlZFxuICAgKi9cbiAgcHVibGljIG9uUXVlc3Rpb25BZGRlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcXVlc3Rpb24gZnJvbSBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcmVtb3ZlZCBxdWVzdGlvbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvblJlbW92ZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBwYW5lbCBpbnRvIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBuZXdseSBhZGRlZCBwYW5lbCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbmRleGAgLSBhbiBpbmRleCBvZiB0aGUgcGFuZWwgaW4gdGhlIGNvbnRhaW5lciAoYSBwYWdlIG9yIHBhbmVsKS5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFyZW50UGFuZWxgIC0gYSBjb250YWluZXIgKGEgcGFnZSBvciBwYW5lbCkgd2hlcmUgYSBuZXcgcGFuZWwgaXMgbG9jYXRlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm9vdFBhbmVsYCAtIGEgcm9vdCBjb250YWluZXIsIHR5cGljYWxseSBpdCBpcyBhIHBhZ2UuXG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uUGFuZWxBZGRlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcGFuZWwgZnJvbSBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcmVtb3ZlZCBwYW5lbCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvblBhbmVsUmVtb3ZlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIHBhZ2UgaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhZ2VgIC0gYSBuZXdseSBhZGRlZCBgcGFuZWxgIG9iamVjdC5cbiAgICogQHNlZSBQYW5lbE1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25QYWdlQWRkZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB2YWxpZGF0aW5nIHZhbHVlIGluIGEgcXVlc3Rpb24uIFlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIHVzaW5nIGBvcHRpb25zLmVycm9yYC4gVGhlIHN1cnZleSBibG9ja3MgY29tcGxldGluZyB0aGUgc3VydmV5IG9yIGdvaW5nIHRvIHRoZSBuZXh0IHBhZ2Ugd2hlbiB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSB2YWxpZGF0ZWQgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgY3VycmVudCBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JgIC0gYW4gZXJyb3Igc3RyaW5nLiBJdCBpcyBlbXB0eSBieSBkZWZhdWx0LlxuICAgKiBAc2VlIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnNcbiAgICogQHNlZSBvblNldHRpbmdRdWVzdGlvbkVycm9yc1xuICAgKi9cbiAgcHVibGljIG9uVmFsaWRhdGVRdWVzdGlvbjogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBlcnJvcnMgYXJlIGFzc2lnbmVkIHRvIGEgcXVlc3Rpb24uIFlvdSBtYXkgYWRkL3JlbW92ZS9tb2RpZnkgZXJyb3JzIGZvciBhIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHZhbGlkYXRlZCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JzYCAtIHRoZSBsaXN0IG9mIGVycm9ycy4gVGhlIGxpc3QgaXMgZW1wdHkgYnkgZGVmYXVsdCBhbmQgcmVtYWlucyBlbXB0eSBpZiBhIHZhbGlkYXRlZCBxdWVzdGlvbiBoYXMgbm8gZXJyb3JzLlxuICAgKiBAc2VlIG9uVmFsaWRhdGVRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byB2YWxpZGF0ZSBkYXRhIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhYCAtIHRoZSB2YWx1ZXMgb2YgYWxsIG5vbi1lbXB0eSBxdWVzdGlvbnMgb24gdGhlIGN1cnJlbnQgcGFnZS4gWW91IGNhbiBnZXQgYSBxdWVzdGlvbiB2YWx1ZSBhcyBgb3B0aW9ucy5kYXRhW1wibXlRdWVzdGlvbk5hbWVcIl1gLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcnNgIC0gc2V0IHlvdXIgZXJyb3JzIHRvIHRoaXMgb2JqZWN0IGFzOiBgb3B0aW9ucy5lcnJvcnNbXCJteVF1ZXN0aW9uTmFtZVwiXSA9IFwiRXJyb3IgdGV4dFwiO2AuIEl0IHdpbGwgYmUgc2hvd24gYXMgYSBxdWVzdGlvbiBlcnJvci5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29tcGxldGUoKWAgLSBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCBzdXJ2ZXkgdGhhdCB5b3VyIHNlcnZlciBjYWxsYmFjayBoYXMgYmVlbiBwcm9jZXNzZWQuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqIEBzZWUgb25WYWxpZGF0ZVBhbmVsXG4gICAqL1xuICBwdWJsaWMgb25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9uczogYW55ID0gbmV3IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gbW9kaWZ5IHRoZSBIVE1MIGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIEhUTUwgb24gYSBjb21wbGV0ZWQgcGFnZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbGAgLSBhbiBIVE1MIHRoYXQgeW91IG1heSBjaGFuZ2UgYmVmb3JlIHRleHQgcHJvY2Vzc2luZyBhbmQgdGhlbiByZW5kZXJpbmcuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqIEBzZWUgUXVlc3Rpb25IdG1sTW9kZWwuaHRtbFxuICAgKi9cbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiB2YWxpZGF0aW5nIGEgcGFuZWwuIFNldCB5b3VyIGVycm9yIHRvIGBvcHRpb25zLmVycm9yYCBhbmQgc3VydmV5IHdpbGwgc2hvdyB0aGUgZXJyb3IgZm9yIHRoZSBwYW5lbCBhbmQgYmxvY2sgY29tcGxldGluZyB0aGUgc3VydmV5IG9yIGdvaW5nIHRvIHRoZSBuZXh0IHBhZ2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIEBzZWUgb25WYWxpZGF0ZVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZVBhbmVsOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhlIGV2ZW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBlcnJvciB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIGFuIGVycm9yIHRleHQuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yYCAtIGFuIGluc3RhbmNlIG9mIHRoZSBgU3VydmV5RXJyb3JgIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgZXJyb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBlcnJvciBuYW1lcyBhcmUgYXZhaWxhYmxlOlxuICAgKiByZXF1aXJlZCwgcmVxdWlyZW9uZWFuc3dlciwgcmVxdWlyZW51bWVyaWMsIGV4Y2VlZHNpemUsIHdlYnJlcXVlc3QsIHdlYnJlcXVlc3RlbXB0eSwgb3RoZXJlbXB0eSxcbiAgICogdXBsb2FkaW5nZmlsZSwgcmVxdWlyZWRpbmFsbHJvd3NlcnJvciwgbWlucm93Y291bnRlcnJvciwga2V5ZHVwbGljYXRpb25lcnJvciwgY3VzdG9tXG4gICAqL1xuICBwdWJsaWMgb25FcnJvckN1c3RvbVRleHQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGUgdGhpcyBldmVudCB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBzdXJ2ZXkgZmluaXNoZWQgdmFsaWRhdGUgcXVlc3Rpb25zIG9uIHRoZSBjdXJyZW50IHBhZ2UuIEl0IGNvbW1vbmx5IGhhcHBlbnMgd2hlbiBhIHVzZXIgdHJ5IHRvIGdvIHRvIHRoZSBuZXh0IHBhZ2Ugb3IgY29tcGxldGUgdGhlIHN1cnZleVxuICAgKiBvcHRpb25zLnF1ZXN0aW9ucyAtIHRoZSBsaXN0IG9mIHF1ZXN0aW9ucyB0aGF0IGhhdmUgZXJyb3JzXG4gICAqIG9wdGlvbnMuZXJyb3JzIC0gdGhlIGxpc3Qgb2YgZXJyb3JzXG4gICAqIG9wdGlvbnMucGFnZSAtIHRoZSBwYWdlIHdoZXJlIHF1ZXN0aW9uKHMpIGFyZSBsb2NhdGVkXG4gICAqL1xuICBwdWJsaWMgb25WYWxpZGF0ZWRFcnJvcnNPbkN1cnJlbnRQYWdlOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgSFRNTCBjb250ZW50IGJlZm9yZSByZW5kZXJpbmcsIGZvciBleGFtcGxlIGBjb21wbGV0ZUh0bWxgIG9yIGBsb2FkaW5nSHRtbGAuXG4gICAqIGBvcHRpb25zLmh0bWxgIC0gc3BlY2lmaWVzIHRoZSBtb2RpZmllZCBIVE1MIGNvbnRlbnQuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGxvYWRpbmdIdG1sXG4gICAqL1xuICBwdWJsaWMgb25Qcm9jZXNzSHRtbDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBxdWVzdGlvbiB0aXRsZSBpbiBjb2RlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZWAgLSBhIGNhbGN1bGF0ZWQgcXVlc3Rpb24gdGl0bGUsIGJhc2VkIG9uIHF1ZXN0aW9uIGB0aXRsZWAsIGBuYW1lYCwgYGlzUmVxdWlyZWRgLCBhbmQgYHZpc2libGVJbmRleGAgcHJvcGVydGllcy5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25HZXRRdWVzdGlvblRpdGxlOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBwcm9jZXNzIHRoZSBtYXJrZG93biB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnRleHRgIC0gYSB0ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxgIC0gYW4gSFRNTCBjb250ZW50LiBJdCBpcyBgbnVsbGAgYnkgZGVmYXVsdC4gVXNlIHRoaXMgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgSFRNTCBjb250ZW50IHJlbmRlcmVkIGluc3RlYWQgb2YgYG9wdGlvbnMudGV4dGAuXG4gICAqL1xuICBwdWJsaWMgb25UZXh0TWFya2Rvd246IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBmaXJlcyB3aGVuIGl0IGdldHMgcmVzcG9uc2UgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2Ugb24gc2F2aW5nIHN1cnZleSByZXN1bHRzLiBVc2UgaXQgdG8gZmluZCBvdXQgaWYgdGhlIHJlc3VsdHMgaGF2ZSBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgaGFzIGJlZW4gc2VudCB0byB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSBpdCB0byBnZXQgcmVzdWx0cyBhZnRlciBjYWxsaW5nIHRoZSBgZ2V0UmVzdWx0YCBtZXRob2QuIEl0IHJldHVybnMgYSBzaW1wbGUgYW5hbHl0aWNzIGZyb20gW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnN1Y2Nlc3NgIC0gaXQgaXMgYHRydWVgIGlmIHRoZSByZXN1bHRzIHdlcmUgZ290IGZyb20gdGhlIHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhYCAtIHRoZSBvYmplY3QgYHtBbnN3ZXJzQ291bnQsIFF1ZXN0aW9uUmVzdWx0IDoge30gfWAuIGBBbnN3ZXJzQ291bnRgIGlzIHRoZSBudW1iZXIgb2YgcG9zdGVkIHN1cnZleSByZXN1bHRzLiBgUXVlc3Rpb25SZXN1bHRgIGlzIGFuIG9iamVjdCB3aXRoIGFsbCBwb3NzaWJsZSB1bmlxdWUgYW5zd2VycyB0byB0aGUgcXVlc3Rpb24gYW5kIG51bWJlciBvZiB0aGVzZSBhbnN3ZXJzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kYXRhTGlzdGAgLSBhbiBhcnJheSBvZiBvYmplY3RzIGB7bmFtZSwgdmFsdWV9YCwgd2hlcmUgYG5hbWVgIGlzIGEgdW5pcXVlIHZhbHVlL2Fuc3dlciB0byB0aGUgcXVlc3Rpb24gYW5kIGB2YWx1ZWAgaXMgYSBudW1iZXIvY291bnQgb2Ygc3VjaCBhbnN3ZXJzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXNwb25zZWAgLSB0aGUgc2VydmVyIHJlc3BvbnNlLlxuICAgKiBAc2VlIGdldFJlc3VsdFxuICAgKi9cbiAgcHVibGljIG9uR2V0UmVzdWx0OiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gdXBsb2FkaW5nIHRoZSBmaWxlIGluIFF1ZXN0aW9uRmlsZSB3aGVuIGBzdG9yZURhdGFBc1RleHRgIGlzIHNldCB0byBgZmFsc2VgLiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHVwbG9hZGVkIGZpbGUgbmFtZSBvciB0byBwcmV2ZW50IGEgcGFydGljdWxhciBmaWxlIGZyb20gYmVpbmcgdXBsb2FkZWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIGZpbGUgbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZmlsZWAgLSB0aGUgSmF2YXNjcmlwdCBGaWxlIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWNjZXB0YCAtIGEgYm9vbGVhbiB2YWx1ZSwgYHRydWVgIGJ5IGRlZmF1bHQuIFNldCBpdCB0byBgZmFsc2VgIHRvIGRlbnkgdGhpcyBmaWxlIHVwbG9hZGluZy5cbiAgICogQHNlZSB1cGxvYWRGaWxlc1xuICAgKiBAc2VlIFF1ZXN0aW9uRmlsZU1vZGVsLnN0b3JlRGF0YUFzVGV4dFxuICAgKi9cbiAgcHVibGljIG9uVXBsb2FkRmlsZXM6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBkb3dubG9hZGluZyBhIGZpbGUgaW4gUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byBwYXNzIHRoZSBmaWxlIHRvIGEgcHJldmlldy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29udGVudGAgLSB0aGUgZmlsZSBjb250ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5maWxlVmFsdWVgIC0gc2luZ2xlIGZpbGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9uIGRvd25sb2FkaW5nIHRoZSBmaWxlIGFuZCB0aGUgZG93bmxvYWRlZCBmaWxlIGNvbnRlbnQuXG4gICAqIEBzZWUgZG93bmxvYWRGaWxlXG4gICAqL1xuICBwdWJsaWMgb25Eb3dubG9hZEZpbGU6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgb24gY2xlYXJpbmcgdGhlIHZhbHVlIGluIGEgUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byByZW1vdmUgZmlsZXMgc3RvcmVkIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmZpbGVOYW1lYCAtIGEgcmVtb3ZlZCBmaWxlJ3MgbmFtZSwgc2V0IGl0IHRvIGBudWxsYCB0byBjbGVhciBhbGwgZmlsZXMuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9uIGNsZWFyaW5nIHRoZSBmaWxlcyBvcGVyYXRpb24uXG4gICAqIEBzZWUgY2xlYXJGaWxlc1xuICAgKi9cbiAgcHVibGljIG9uQ2xlYXJGaWxlczogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGNob2ljZXMgZm9yIHJhZGlvZ3JvdXAsIGNoZWNrYm94LCBhbmQgZHJvcGRvd24gaGFzIGJlZW4gbG9hZGVkIGZyb20gYSBSRVNUZnVsIHNlcnZpY2UgYW5kIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLlxuICAgKiBZb3UgbWF5IGNoYW5nZSB0aGUgY2hvaWNlcywgYmVmb3JlIHRoZXkgYXJlIGFzc2lnbmVkIG9yIGRpc2FibGUvZW5hYmxlZCBtYWtlIHZpc2libGUvaW52aXNpYmxlIHF1ZXN0aW9uLCBiYXNlZCBvbiBsb2FkZWQgcmVzdWx0cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYHF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbiB3aGVyZSBsb2FkZWQgY2hvaWNlcyBhcmUgZ29pbmcgdG8gYmUgYXNzaWduZWQuXG4gICAqIDxici8+IGBjaG9pY2VzYCAtIHRoZSBsb2FkZWQgY2hvaWNlcy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxvYWRlZCBjaG9pY2VzIHRvIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlcnZlclJlc3VsdGAgLSBhIHJlc3VsdCB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlciBhcyBpdCBpcy5cbiAgICovXG4gIHB1YmxpYyBvbkxvYWRDaG9pY2VzRnJvbVNlcnZlcjogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHN1cnZleSBpcyBsb2FkZWQgZnJvbSBhcGkuc3VydmV5anMuaW8gc2VydmljZS5cbiAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0byBwZXJmb3JtIG1hbmlwdWxhdGlvbiB3aXRoIHRoZSBzdXJ2ZXkgbW9kZWwgYWZ0ZXIgaXQgd2FzIGxvYWRlZCBmcm9tIHRoZSB3ZWIgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzdXJ2ZXlJZFxuICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIG9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2U6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBwcm9jZXNzaW5nIHRoZSB0ZXh0IHdoZW4gaXQgZmluZHMgYSB0ZXh0IGluIGJyYWNrZXRzOiBge3NvbWV2YWx1ZX1gLiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiBzdXJ2ZXkgcXVlc3Rpb24gdmFsdWVzIGFuZCB2YXJpYWJsZXMuXG4gICAqIEZvciBleGFtcGxlLCB5b3UgbWF5IHVzZSB0aGUgdGV4dCBwcm9jZXNzaW5nIGluIGxvYWRpbmcgY2hvaWNlcyBmcm9tIHRoZSB3ZWIuIElmIHlvdXIgYGNob2ljZXNCeVVybC51cmxgIGVxdWFscyB0byBcIlVybFRvU2VydmljZVRvR2V0QWxsQ2l0aWVzL3tjb3VudHJ5fS97c3RhdGV9XCIsXG4gICAqIHlvdSBtYXkgc2V0IG9uIHRoaXMgZXZlbnQgYG9wdGlvbnMudmFsdWVgIHRvIFwiYWxsXCIgb3IgZW1wdHkgc3RyaW5nIHdoZW4gdGhlIFwic3RhdGVcIiB2YWx1ZS9xdWVzdGlvbiBpcyBub24gc2VsZWN0ZWQgYnkgYSB1c2VyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzaW5nIHZhbHVlLCBmb3IgZXhhbXBsZSwgXCJzdGF0ZVwiIGluIG91ciBleGFtcGxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIHByb2Nlc3NpbmcgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNFeGlzdHNgIC0gYSBib29sZWFuIHZhbHVlLiBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgYW5kIHNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSBkb24ndC5cbiAgICovXG4gIHB1YmxpYyBvblByb2Nlc3NUZXh0VmFsdWU6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcXVlc3Rpb24uIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBxdWVzdGlvbiBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3Jvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwifWAuIFlvdSBjYW4gY2hhbmdlIHRoZW0gdG8geW91ciBvd24gQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBwdWJsaWMgb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXM6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcGFuZWwuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYW5lbCBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHBhZ2UuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWdlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFnZUNzc0NsYXNzZXM6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBzdXJ2ZXkgaXMgcmVuZGVyZWQgaW4gRE9NLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhIHJvb3QgSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhZ2UgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgc3VydmV5IGhlYWRlciBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlckhlYWRlcjogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcGFnZSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2Ugb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuIFR5cGljYWxseSB0aGUgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYWdlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcXVlc3Rpb24gaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcXVlc3Rpb24gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgbm9uLWNvbXBvc2l0ZSBxdWVzdGlvbiAodGV4dCwgY29tbWVudCwgZHJvcGRvd24sIHJhZGlvZ3JvdXAsIGNoZWNrYm94KSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogVGhpcyBldmVudCBpcyBub3QgZmlyZWQgZm9yIG1hdHJpY2VzLCBwYW5lbHMsIG11bHRpcGxlIHRleHQgYW5kIGltYWdlIHBpY2tlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBxdWVzdGlvbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhbmVsIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWRcbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYW5lbCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFuZWw6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcm93IGluIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSBuZXcgYWRkZWQgcm93LlxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwudmlzaWJsZVJvd3NcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd0FkZGVkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGFkZGluZyBhIG5ldyByb3cgaW4gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNhbkFkZFJvd2AgLSBzcGVjaWZpZXMgd2hldGhlciBhIG5ldyByb3cgY2FuIGJlIGFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QmVmb3JlUm93QWRkZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHJvdyBmcm9tIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbWF0cml4IHF1ZXN0aW9uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd0luZGV4YCAtIGEgcmVtb3ZlZCByb3cgaW5kZXhcbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIGEgcmVtb3ZlZCByb3cgb2JqZWN0XG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Um93UmVtb3ZlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSByZW5kZXJpbmcgXCJSZW1vdmVcIiBidXR0b24gZm9yIHJlbW92aW5nIGEgcm93IGZyb20gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd0luZGV4YCAtIGEgcm93IGluZGV4LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hbGxvd2AgLSBhIGJvb2xlYW4gcHJvcGVydHkuIFNldCBpdCB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJvdyByZW1vdmluZy5cbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QWxsb3dSZW1vdmVSb3c6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBmb3IgZXZlcnkgY2VsbCBjcmVhdGVkIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsYCAtIHRoZSBtYXRyaXggY2VsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbFF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbi9lZGl0b3IgaW4gdGhlIGNlbGwuIFlvdSBtYXkgY3VzdG9taXplIGl0LCBjaGFuZ2UgaXQncyBwcm9wZXJ0aWVzLCBsaWtlIGNob2ljZXMgb3IgdmlzaWJsZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93VmFsdWVgIC0gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHJvdy4gVG8gYWNjZXNzIGEgcGFydGljdWxhciBjb2x1bW4ncyB2YWx1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcm93LCB1c2U6IGBvcHRpb25zLnJvd1ZhbHVlW1wiY29sdW1uVmFsdWVcIl1gLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5gIC0gdGhlIG1hdHJpeCBjb2x1bW4gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bU5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsQ3JlYXRlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGFmdGVyIGlzIGhhcyBiZWVuIHJlbmRlcmVkIGluIERPTS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gdGhlIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbGAgLSB0aGUgbWF0cml4IGNlbGwuXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxRdWVzdGlvbmAgLSB0aGUgcXVlc3Rpb24vZWRpdG9yIGluIHRoZSBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhbiBIVE1MIGVsZW1lbnQgYm91bmQgdG8gdGhlIGBjZWxsUXVlc3Rpb25gIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29sdW1uYCAtIHRoZSBtYXRyaXggY29sdW1uIG9iamVjdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxDcmVhdGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeEFmdGVyQ2VsbFJlbmRlcjogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gY2VsbCB2YWx1ZSBpcyBjaGFuZ2VkIGluIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bU5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmdcbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkOiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgY2VsbCB2YWx1ZSBpbiBNYXRyaXggRHluYW1pYyBhbmQgTWF0cml4IERyb3Bkb3duIHF1ZXN0aW9ucy4gWW91IG1heSBjaGFuZ2UgdGhlIGBvcHRpb25zLnZhbHVlYCBwcm9wZXJ0eSB0byBjaGFuZ2UgYSBjZWxsIHZhbHVlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bU5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLm9sZFZhbHVlYCAtIHRoZSBvbGQgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2VsbCBxdWVzdGlvbiBieSBjb2x1bW4gbmFtZS5cbiAgICogQHNlZSBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWRcbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2luZzogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMgdmFsaWRhdGUgdGhlIGNlbGwgdmFsdWUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtTmFtZWAgLSB0aGUgbWF0cml4IGNvbHVtbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIGNlbGwgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4QmVmb3JlUm93QWRkZWRcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxWYWxpZGF0ZTogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIG5ldyBwYW5lbCBpbiBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHBhbmVsIHF1ZXN0aW9uLlxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnBhbmVsc1xuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsQWRkZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHBhbmVsIGZyb20gUGFuZWwgRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBwYW5lbCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxJbmRleGAgLSBhIHJlbW92ZWQgcGFuZWwgaW5kZXguXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcmVtb3ZlZCBwYW5lbC5cbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbC5wYW5lbHNcbiAgICovXG4gIHB1YmxpYyBvbkR5bmFtaWNQYW5lbFJlbW92ZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBldmVyeSBzZWNvbmQgaWYgdGhlIG1ldGhvZCBgc3RhcnRUaW1lcmAgaGFzIGJlZW4gY2FsbGVkLlxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSB0aW1lU3BlbnRcbiAgICogQHNlZSBQYWdlLnRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIG9uVGltZXI6IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSxcbiAgICBhbnlcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSBkaXNwbGF5aW5nIGEgbmV3IGluZm9ybWF0aW9uIGluIHRoZSBUaW1lciBQYW5lbC4gVXNlIGl0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIHRoZSB0aW1lciBwYW5lbCBpbmZvIHRleHQuXG4gICAqL1xuICBwdWJsaWMgb25UaW1lclBhbmVsSW5mb1RleHQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIGl0ZW0gdmFsdWUgaXMgY2hhbmdlZCBpbiBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgcGFuZWwgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIHRoZSBkeW5hbWljIHBhbmVsIGl0ZW0uXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIGl0ZW0gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLml0ZW1JbmRleGAgLSB0aGUgcGFuZWwgaXRlbSBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXRlbVZhbHVlYCAtIHRoZSBwYW5lbCBpdGVtIG9iamVjdC5cbiAgICogQHNlZSBvbkR5bmFtaWNQYW5lbEFkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZDogRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZGVmaW5lLCB3aGV0aGVyIGFuIGFuc3dlciB0byBhIHF1ZXN0aW9uIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIG9uIHdoaWNoIHlvdSBoYXZlIHRvIGRlY2lkZSBpZiB0aGUgYW5zd2VyIGlzIGNvcnJlY3Qgb3Igbm90LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZXN1bHRgIC0gcmV0dXJucyBgdHJ1ZWAsIGlmIGFuIGFuc3dlciBpcyBjb3JyZWN0LCBvciBgZmFsc2VgLCBpZiB0aGUgYW5zd2VyIGlzIG5vdCBjb3JyZWN0LiBVc2UgcXVlc3Rpb25zJyBgdmFsdWVgIGFuZCBgY29ycmVjdEFuc3dlcmAgcHJvcGVydGllcyB0byByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzYCAtIHlvdSBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb3JyZWN0IG9yIGluY29ycmVjdCBhbnN3ZXJzIGluIHRoZSBxdWVzdGlvbiwgZm9yIGV4YW1wbGUgZm9yIG1hdHJpeCwgd2hlcmUgZWFjaCByb3cgaXMgYSBxdWl6IHF1ZXN0aW9uLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZhbHVlXG4gICAqIEBzZWUgUXVlc3Rpb24uY29ycmVjdEFuc3dlclxuICAgKi9cbiAgcHVibGljIG9uSXNBbnN3ZXJDb3JyZWN0OiBFdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjb250cm9sIGRyYWcmZHJvcCBvcGVyYXRpb25zIGR1cmluZyBkZXNpZ24gbW9kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dgIC0gc2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnZ2luZy5cbiAgICogPGJyLz4gYG9wdGlvbnMudGFyZ2V0YCAtIGEgdGFyZ2V0IGVsZW1lbnQgdGhhdCBpcyBkcmFnZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zb3VyY2VgIC0gYSBzb3VyY2UgZWxlbWVudC4gSXQgY2FuIGJlIGBudWxsYCwgaWYgaXQgaXMgYSBuZXcgZWxlbWVudCwgZHJhZ2dpbmcgZnJvbSB0b29sYm94LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYXJlbnRgIC0gYSBwYWdlIG9yIHBhbmVsIHdoZXJlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbnNlcnRCZWZvcmVgIC0gYW4gZWxlbWVudCBiZWZvcmUgdGhlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLiBJdCBjYW4gYmUgYG51bGxgIGlmIHBhcmVudCBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGlzIGVtcHR5IG9yIGRyYWdnaW5nIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCBpbiBhIGNvbnRhaW5lci5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5zZXJ0QWZ0ZXJgIC0gYW4gZWxlbWVudCBhZnRlciB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuIEl0IGNhbiBiZSBgbnVsbGAgaWYgcGFyZW50IGNvbnRhaW5lciAocGFnZSBvciBwYW5lbCkgaXMgZW1wdHkgb3IgZHJhZ2dpbmcgZWxlbWVudCB0byB0aGUgZmlyc3QgcG9zaXRpb24gd2l0aGluIHRoZSBwYXJlbnQgY29udGFpbmVyLlxuICAgKiBAc2VlIHNldERlc2lnbk1vZGVcbiAgICogQHNlZSBpc0Rlc2lnbk1vZGVcbiAgICovXG4gIHB1YmxpYyBvbkRyYWdEcm9wQWxsb3c6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNvbnRyb2wgc2Nyb2xsaW5nIGVsZW1lbnQgdG8gdG9wLiBZb3UgY2FuIGNhbmNlbCB0aGUgZGVmYXVsdCBiZWhhdmlvciBieSBzZXR0aW5nIG9wdGlvbnMuY2FuY2VsIHByb3BlcnR5IHRvIHRydWUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRgIC0gYW4gZWxlbWVudCB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC4gSXQgY2FuIGJlIG51bGwgaWYgb3B0aW9ucy5wYWdlIGlzIG5vdCBudWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSB0aGF0IGlzIGdvaW5nIHRvIGJlIHNjcm9sbGVkIG9uIHRvcC4gSXQgY2FuIGJlIG51bGwgaWYgb3B0aW9ucy5xdWVzdGlvbiBpcyBub3QgbnVsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudElkYCAtIHRoZSB1bmlxdWUgZWxlbWVudCBET00gSWQuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbmNlbGAgLSBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGNhbmNlbCB0aGUgZGVmYXVsdCBzY3JvbGxpbmcuXG4gICAqL1xuICBwdWJsaWMgb25TY3JvbGxpbmdFbGVtZW50VG9Ub3A6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBTdXJ2ZXlNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcblxuICBwdWJsaWMgb25Mb2NhbGVDaGFuZ2VkRXZlbnQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU1vZGVsLCB2YWx1ZTogc3RyaW5nKSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KHNlbmRlcjogU3VydmV5TW9kZWwpID0+IGFueSwgYW55PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlcnJvcnMgb24gbG9hZGluZyBzdXJ2ZXkgSlNPTi4gSWYgdGhlIGxpc3QgaXMgZW1wdHkgYWZ0ZXIgbG9hZGluZyBhIEpTT04sIHRoZW4gdGhlIEpTT04gaXMgY29ycmVjdCBhbmQgaGFzIG5vIGVycm9ycy5cbiAgICogQHNlZSBKc29uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBqc29uRXJyb3JzOiBBcnJheTxKc29uRXJyb3I+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgU3VydmV5TW9kZWwuc3R5bGVzTWFuYWdlciA9IG5ldyBTdHlsZXNNYW5hZ2VyKCk7XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvZ29cIiwgdGhpcywgZmFsc2UpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsb2FkaW5nSHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwic3RhcnRTdXJ2ZXlUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYWdlUHJldlRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VOZXh0VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwcmV2aWV3VGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZWRpdFRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCB0aGlzLCB0cnVlKTtcblxuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBUZXh0UHJlUHJvY2Vzc29yKCk7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yLm9uUHJvY2VzcyA9IGZ1bmN0aW9uIChcbiAgICAgIHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlXG4gICAgKSB7XG4gICAgICBzZWxmLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInBhZ2VzXCIsIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XG4gICAgICBzZWxmLmRvT25QYWdlQWRkZWQodmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ0cmlnZ2Vyc1wiLCBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xuICAgICAgdmFsdWUuc2V0T3duZXIoc2VsZik7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImNhbGN1bGF0ZWRWYWx1ZXNcIiwgZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcbiAgICAgIHZhbHVlLnNldE93bmVyKHNlbGYpO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIiwgZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcbiAgICAgIHZhbHVlLmxvY093bmVyID0gc2VsZjtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIsIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IHNlbGY7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwibW9kZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLm9uTW9kZUNoYW5nZWQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcbiAgICBpZiAoanNvbk9iaikge1xuICAgICAgaWYgKHR5cGVvZiBqc29uT2JqID09PSBcInN0cmluZ1wiIHx8IGpzb25PYmogaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAganNvbk9iaiA9IEpTT04ucGFyc2UoanNvbk9iaiBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xuICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkLCB0aGlzLmNsaWVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYWdlcyBpbiB0aGUgc3VydmV5LCBpbmNsdWRpbmcgaW52aXNpYmxlIHBhZ2VzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKiBAc2VlIHZpc2libGVQYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gIH1cbiAgcHVibGljIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNzcztcbiAgfVxuICBwcml2YXRlIGNzc1ZhbHVlOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NWYWx1ZSA9IHt9O1xuICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc1ZhbHVlLCBzdXJ2ZXlDc3MuZ2V0Q3NzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgdGhpcy5jc3MpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbkNvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5jb21wbGV0ZVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uUHJldmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24ucHJldmlld1xuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uRWRpdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24uZWRpdFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uUHJldigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24ucHJldlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLnN0YXJ0XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25OZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5uZXh0XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZENzcygpIHtcbiAgICB2YXIgY3NzID0gdGhpcy5jc3M7XG4gICAgcmV0dXJuIGNzcy5ib2R5ICsgXCIgXCIgKyBjc3MuY29tcGxldGVkUGFnZTtcbiAgfVxuICBwcml2YXRlIGdldE5hdmlnYXRpb25Dc3MobWFpbjogc3RyaW5nLCBidG46IHN0cmluZykge1xuICAgIHZhciByZXMgPSBcIlwiO1xuICAgIGlmIChtYWluKSByZXMgPSBtYWluO1xuICAgIGlmIChidG4pIHJlcyArPSBcIiBcIiArIGJ0bjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBsaXN0IG9mIHRyaWdnZXJzIGluIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgU3VydmV5VHJpZ2dlclxuICAgKi9cbiAgcHVibGljIGdldCB0cmlnZ2VycygpOiBBcnJheTxTdXJ2ZXlUcmlnZ2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRyaWdnZXJzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHJpZ2dlcnModmFsOiBBcnJheTxTdXJ2ZXlUcmlnZ2VyPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRyaWdnZXJzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpc3Qgb2YgY2FsY3VsYXRlZCB2YWx1ZXMgaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBDYWxjdWxhdGVkVmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFZhbHVlcygpOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2FsY3VsYXRlZFZhbHVlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNhbGN1bGF0ZWRWYWx1ZXModmFsOiBBcnJheTxDYWxjdWxhdGVkVmFsdWU+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2FsY3VsYXRlZFZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gaWRlbnRpZmllciBvZiBhIHN1cnZleSBtb2RlbCBsb2FkZWQgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuIFdoZW4gc3BlY2lmaWVkLCB0aGUgc3VydmV5IEpTT04gaXMgYXV0b21hdGljYWxseSBsb2FkZWQgZnJvbSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleUlkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlJZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gaWRlbnRpZmllciBvZiBhIHN1cnZleSBtb2RlbCBzYXZlZCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuIFdoZW4gc3BlY2lmaWVkLCB0aGUgc3VydmV5IGRhdGEgaXMgYXV0b21hdGljYWxseSBzYXZlZCB0byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgb25Db21wbGV0ZVxuICAgKiBAc2VlIHN1cnZleVNob3dEYXRhU2F2aW5nXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleVBvc3RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlQb3N0SWRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdXJ2ZXlQb3N0SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlQb3N0SWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHVzZXIncyBpZGVudGlmaWVyIChlLmcuLCBlLW1haWwgb3IgdW5pcXVlIGN1c3RvbWVyIGlkKSBpbiB5b3VyIHdlYiBhcHBsaWNhdGlvbi5cbiAgICogSWYgeW91IGxvYWQgc3VydmV5IG9yIHBvc3Qgc3VydmV5IHJlc3VsdHMgZnJvbS90byBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSwgdGhlbiB0aGUgbGlicmFyeSBkbyBub3QgYWxsb3cgdXNlcnMgdG8gcnVuIHRoZSBzYW1lIHN1cnZleSB0aGUgc2Vjb25kIHRpbWUuXG4gICAqIE9uIHRoZSBzZWNvbmQgcnVuLCB0aGUgdXNlciB3aWxsIHNlZSB0aGUgc3VydmV5IGNvbXBsZXRlIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsaWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsaWVudElkXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xpZW50SWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGllbnRJZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBjb29raWUgbmFtZSB1c2VkIHRvIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGVtcHR5LCBiZWZvcmUgc3RhcnRpbmcgdGhlIHN1cnZleSwgdGhlIFN1cnZleSBsaWJyYXJ5IGNoZWNrcyBpZiB0aGUgY29va2llIHdpdGggdGhpcyBuYW1lIGV4aXN0cy5cbiAgICogSWYgaXQgaXMgYHRydWVgLCB0aGUgc3VydmV5IGdvZXMgdG8gY29tcGxldGUgbW9kZSBhbmQgYSB1c2VyIHNlZXMgdGhlIHN1cnZleSBjb21wbGV0ZSBwYWdlLiBPbiBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkgdGhlIGNvb2tpZSB3aXRoIHRoaXMgbmFtZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjb29raWVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvb2tpZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb29raWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29va2llTmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBzYXZlIHN1cnZleSByZXN1bHRzIG9uIGNvbXBsZXRpbmcgZXZlcnkgcGFnZS4gSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBgb25QYXJ0aWFsU2VuZGAgZXZlbnQgaXMgZmlyZWQuXG4gICAqIEBzZWUgb25QYXJ0aWFsU2VuZFxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbmRSZXN1bHRPblBhZ2VOZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZW5kUmVzdWx0T25QYWdlTmV4dFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzZW5kUmVzdWx0T25QYWdlTmV4dCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZW5kUmVzdWx0T25QYWdlTmV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0byBzaG93IHRoZSBwcm9ncmVzcyBvbiBzYXZpbmcvc2VuZGluZyBkYXRhIGludG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXlTaG93RGF0YVNhdmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5U2hvd0RhdGFTYXZpbmdcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3VydmV5U2hvd0RhdGFTYXZpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5U2hvd0RhdGFTYXZpbmdcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGZpcnN0IGlucHV0IGlzIGZvY3VzZWQgb24gc2hvd2luZyBhIG5leHQgb3IgYSBwcmV2aW91cyBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGZpcnN0IGlucHV0IGlzIGZvY3VzZWQgaWYgdGhlIGN1cnJlbnQgcGFnZSBoYXMgZXJyb3JzLlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgICh0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWApIGlmIHlvdSBkbyBub3Qgd2FudCB0byBicmluZyB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgaGFzIGVycm9yIG9uIHRoZSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBmb2N1c09uRmlyc3RFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNPbkZpcnN0RXJyb3JcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBmb2N1c09uRmlyc3RFcnJvcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmb2N1c09uRmlyc3RFcnJvclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG5hdmlnYXRpb24gYnV0dG9ucyBwb3NpdGlvbi5cbiAgICogUG9zc2libGUgdmFsdWVzOiAnYm90dG9tJyAoZGVmYXVsdCksICd0b3AnLCAnYm90aCcgYW5kICdub25lJy4gU2V0IGl0IHRvICdub25lJyB0byBoaWRlICdQcmV2JywgJ05leHQnIGFuZCAnQ29tcGxldGUnIGJ1dHRvbnMuXG4gICAqIEl0IG1ha2VzIHNlbnNlIGlmIHlvdSBhcmUgZ29pbmcgdG8gY3JlYXRlIGEgY3VzdG9tIG5hdmlnYXRpb24sIGhhdmUgb25seSBhIHNpbmdsZSBwYWdlLCBvciB0aGUgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAuXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKiBAc2VlIHNob3dQcmV2QnV0dG9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dOYXZpZ2F0aW9uQnV0dG9ucygpOiBzdHJpbmcgfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TmF2aWdhdGlvbkJ1dHRvbnModmFsOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWwgPSBcImJvdHRvbVwiO1xuICAgIH1cbiAgICBpZiAodmFsID09PSBmYWxzZSkge1xuICAgICAgdmFsID0gXCJub25lXCI7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIFwiUHJldlwiIGJ1dHRvbiBpbiBpdHMgcGFnZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIHByZXZlbnQgZW5kLXVzZXJzIGZyb20gZ29pbmcgYmFjayB0byB0aGVpciBhbnN3ZXJzLlxuICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldkJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZCdXR0b25cIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldkJ1dHRvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldkJ1dHRvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgU3VydmV5IGRpc3BsYXlzIHN1cnZleSB0aXRsZSBpbiBpdHMgcGFnZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIGhpZGUgYSBzdXJ2ZXkgdGl0bGUuXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGl0bGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGl0bGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpdGxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBTdXJ2ZXkgZGlzcGxheXMgcGFnZSB0aXRsZXMuIFNldCBpdCB0byBgZmFsc2VgIHRvIGhpZGUgcGFnZSB0aXRsZXMuXG4gICAqIEBzZWUgUGFnZU1vZGVsLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQYWdlVGl0bGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZVRpdGxlc1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQYWdlVGl0bGVzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlVGl0bGVzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIE9uIGZpbmlzaGluZyB0aGUgc3VydmV5IHRoZSBjb21wbGV0ZSBwYWdlIGlzIHNob3duLiBTZXQgdGhlIHByb3BlcnR5IHRvIGBmYWxzZWAsIHRvIGhpZGUgdGhlIGNvbXBsZXRlIHBhZ2UuXG4gICAqIEBzZWUgZGF0YVxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dDb21wbGV0ZWRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93Q29tcGxldGVkUGFnZVwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dDb21wbGV0ZWRQYWdlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dDb21wbGV0ZWRQYWdlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGEgdXJsIHlvdSB3YW50IHRvIG5hdmlnYXRlIGFmdGVyIGEgdXNlciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkuXG4gICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBhZnRlciBjYWxsaW5nIG9uQ29tcGxldGUgZXZlbnQuIEluIGNhc2UgY2FsbGluZyBvcHRpb25zLnNob3dEYXRhU2F2aW5nIGNhbGxiYWNrIGluIG9uQ29tcGxldGUgZXZlbnQsIG5hdmlnYXRlVG9Vcmwgd2lsbCBiZSB1c2VkIG9uIGNhbGxpbmcgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3MgY2FsbGJhY2suXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRlVG9VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRlVG9VcmwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpc3Qgb2YgVVJMIGNvbmRpdGlvbiBpdGVtcy4gSWYgdGhlIGV4cHJlc3Npb24gb2YgdGhpcyBpdGVtIHJldHVybnMgYHRydWVgLCB0aGVuIHN1cnZleSB3aWxsIG5hdmlnYXRlIHRvIHRoZSBpdGVtIFVSTC5cbiAgICogQHNlZSBVcmxDb25kaXRpb25JdGVtXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKi9cbiAgcHVibGljIGdldCBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb24oKTogQXJyYXk8VXJsQ29uZGl0aW9uSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb24odmFsOiBBcnJheTxVcmxDb25kaXRpb25JdGVtPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblwiLCB2YWwpO1xuICB9XG5cbiAgcHVibGljIGdldE5hdmlnYXRlVG9VcmwoKTogc3RyaW5nIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0RXhwcmVzc2lvbkl0ZW1PblJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXG4gICAgKTtcbiAgICB2YXIgdXJsID0gISFpdGVtID8gKDxVcmxDb25kaXRpb25JdGVtPml0ZW0pLnVybCA6IHRoaXMubmF2aWdhdGVUb1VybDtcbiAgICBpZiAoISF1cmwpIHtcbiAgICAgIHVybCA9IHRoaXMucHJvY2Vzc1RleHQodXJsLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBwcml2YXRlIG5hdmlnYXRlVG8oKSB7XG4gICAgdmFyIHVybCA9IHRoaXMuZ2V0TmF2aWdhdGVUb1VybCgpO1xuICAgIHZhciBvcHRpb25zID0geyB1cmw6IHVybCB9O1xuICAgIHRoaXMub25OYXZpZ2F0ZVRvVXJsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnVybCB8fCAhd2luZG93IHx8ICF3aW5kb3cubG9jYXRpb24pIHJldHVybjtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG9wdGlvbnMudXJsO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHJlcXVpcmVkIHF1ZXN0aW9uIG1hcmsuIFRoZSByZXF1aXJlZCBxdWVzdGlvbiBtYXJrIGlzIGEgY2hhciBvciBzdHJpbmcgdGhhdCBpcyByZW5kZXJlZCBpbiB0aGUgcmVxdWlyZWQgcXVlc3Rpb25zJyB0aXRsZXMuXG4gICAqIEBzZWUgUXVlc3Rpb24udGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkVGV4dFwiLCBcIipcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZFRleHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gaGlkZSBhbGwgcmVxdWlyZWQgZXJyb3JzLlxuICAgKi9cbiAgcHVibGljIGhpZGVSZXF1aXJlZEVycm9yczogYm9vbGVhbiA9IGZhbHNlO1xuICBiZWZvcmVTZXR0aW5nUXVlc3Rpb25FcnJvcnMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPlxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oaWRlUmVxdWlyZWRFcnJvcnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlcnJvcnNbaV0uZ2V0RXJyb3JUeXBlKCkgPT0gXCJyZXF1aXJlZFwiKSB7XG4gICAgICAgICAgZXJyb3JzW2ldLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uU2V0dGluZ1F1ZXN0aW9uRXJyb3JzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZmlyc3QgcXVlc3Rpb24gaW5kZXguIFRoZSBmaXJzdCBxdWVzdGlvbiBpbmRleCBpcyAnMScgYnkgZGVmYXVsdC4gWW91IG1heSBzdGFydCBpdCBmcm9tICcxMDAnIG9yIGZyb20gJ0EnLCBieSBzZXR0aW5nICcxMDAnIG9yICdBJyB0byB0aGlzIHByb3BlcnR5LlxuICAgKiBZb3UgY2FuIHNldCB0aGUgc3RhcnQgaW5kZXggdG8gXCIoMSlcIiBvciBcIiMgQSlcIiBvciBcImEpXCIgdG8gcmVuZGVyIHF1ZXN0aW9uIG51bWJlciBhcyAoMSksICMgQSkgYW5kIGEpIGFjY29yZGluZ2x5LlxuICAgKiBAc2VlIFF1ZXN0aW9uLnRpdGxlXG4gICAqIEBzZWUgcmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblN0YXJ0SW5kZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFwiT3RoZXJzXCIgb3B0aW9uIHRleHQgaXMgc3RvcmVkIGFzIHF1ZXN0aW9uIGNvbW1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgXCJPdGhlcnNcIiBpbnB1dCBpbiB0aGUgY2hlY2tib3gvcmFkaW9ncm91cC9kcm9wZG93biBpcyBzdG9yZWQgYXMgYFwicXVlc3Rpb24gbmFtZSBcIiArIFwiLUNvbW1lbnRcImAuIFRoZSB2YWx1ZSBpdHNlbGYgaXMgYFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiYC5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgYFwicXVlc3Rpb24gbmFtZVwiYCBrZXkuXG4gICAqIEBzZWUgY29tbWVudFByZWZpeFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBzdG9yZU90aGVyc0FzQ29tbWVudCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgbWF4aW11bSBsZW5ndGggZm9yIHF1ZXN0aW9ucyBsaWtlIHRleHQgYW5kIGNvbW1lbnQsIGluY2x1ZGluZyBtYXRyaXggY2VsbCBxdWVzdGlvbnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwYCwgdGhhdCBtZWFucyB0aGF0IHRoZSB0ZXh0IGFuZCBjb21tZW50IGhhdmUgdGhlIHNhbWUgbWF4IGxlbmd0aCBhcyB0aGUgc3RhbmRhcmQgSFRNTCBpbnB1dCAtIDUyNDI4OCBjaGFyYWN0ZXJzOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X21heGxlbmd0aC5hc3AuXG4gICAqIEBzZWUgbWF4T3RoZXJzTGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFRleHRMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGV4dExlbmd0aFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRleHRMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUZXh0TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aCBmb3IgcXVlc3Rpb24gY29tbWVudHMgYW5kIG90aGVyc1xuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMGAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgcXVlc3Rpb24gY29tbWVudHMgaGF2ZSB0aGUgc2FtZSBtYXggbGVuZ3RoIGFzIHRoZSBzdGFuZGFyZCBIVE1MIGlucHV0IC0gNTI0Mjg4IGNoYXJhY3RlcnM6IGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9hdHRfaW5wdXRfbWF4bGVuZ3RoLmFzcC5cbiAgICogQHNlZSBRdWVzdGlvbi5oYXNDb21tZW50XG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzT3RoZXJcbiAgICogQHNlZSBtYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heE90aGVyc0xlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhPdGhlcnNMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhPdGhlcnNMZW5ndGhcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNlcyB3aGV0aGVyIGEgdXNlciBjYW4gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGFuc3dlcmluZyBhbGwgdGhlIHF1ZXN0aW9ucyBvbiBhIHBhZ2Ugd2l0aG91dCBwcmVzc2luZyB0aGUgXCJOZXh0XCIgYnV0dG9uLlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHRydWVgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgc3VibWl0IHN1cnZleSBkYXRhIGF1dG9tYXRpY2FsbHkuXG4gICAqIC0gYGF1dG9nb25leHRgIC0gbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5IGJ1dCBkbyBub3Qgc3VibWl0IHN1cnZleSBkYXRhLlxuICAgKiAtIGBmYWxzZWAgLSBkbyBub3QgbmF2aWdhdGUgdGhlIG5leHQgcGFnZSBhbmQgZG8gbm90IHN1Ym1pdCBzdXJ2ZXkgZGF0YSBhdXRvbWF0aWNhbGx5LlxuICAgKiBAc2VlIHNob3dOYXZpZ2F0aW9uQnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBnb05leHRQYWdlQXV0b21hdGljKCk6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZ29OZXh0UGFnZUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4gfCBcImF1dG9nb25leHRcIikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgYSBzdXJ2ZXkgaXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgd2hlbiBgZ29OZXh0UGFnZUF1dG9tYXRpYyA9IHRydWVgLiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VibWl0IHN1cnZleSBhdXRvbWF0aWNhbGx5IG9uIGNvbXBsZXRpbmcgdGhlIGxhc3Qgc3VydmV5IHBhZ2UuXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHZhbGlkYXRlcyB0aGUgcXVlc3Rpb24gYW5zd2Vycy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uTmV4dFBhZ2VgIChkZWZhdWx0KSAtIGNoZWNrIGVycm9ycyBvbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHBhZ2Ugb3Igb24gY29tcGxldGluZyB0aGUgc3VydmV5LlxuICAgKiAtIGBvblZhbHVlQ2hhbmdlZGAgLSBjaGVjayBlcnJvcnMgb24gZXZlcnkgcXVlc3Rpb24gdmFsdWUgKGkuZS4sIGFuc3dlcikgY2hhbmdpbmcuXG4gICAqIC0gYG9uQ29tcGxldGVgIC0gdG8gdmFsaWRhdGUgYWxsIHZpc2libGUgcXVlc3Rpb25zIG9uIGNvbXBsZXRlIGJ1dHRvbiBjbGljay4gSWYgdGhlcmUgYXJlIGVycm9ycyBvbiBwcmV2aW91cyBwYWdlcywgdGhlbiB0aGUgcGFnZSB3aXRoIHRoZSBmaXJzdCBlcnJvciBiZWNvbWVzIHRoZSBjdXJyZW50LlxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0Vycm9yc01vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tFcnJvcnNNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hlY2tFcnJvcnNNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHVwZGF0ZXMgaXRzIHF1ZXN0aW9ucycgdGV4dCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbkJsdXJgIChkZWZhdWx0KSAtIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIGFmdGVyIGFuIGlucHV0IGxvc2VzIHRoZSBmb2N1cy5cbiAgICogLSBgb25UeXBpbmdgIC0gdXBkYXRlIHRoZSB2YWx1ZSBvZiB0ZXh0IHF1ZXN0aW9ucywgXCJ0ZXh0XCIgYW5kIFwiY29tbWVudFwiLCBvbiBldmVyeSBrZXkgcHJlc3MuXG4gICAqXG4gICAqIE5vdGUsIHRoYXQgc2V0dGluZyB0byBcIm9uVHlwaW5nXCIgbWF5IGxlYWQgdG8gYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW4gY2FzZSB5b3UgaGF2ZSBtYW55IGV4cHJlc3Npb25zIGluIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRleHRVcGRhdGVNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dFVwZGF0ZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGludmlzaWJsZSBkYXRhIGlzIGluY2x1ZGVkIGluIHN1cnZleSBkYXRhLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgbm9uZWAgLSBpbmNsdWRlIHRoZSBpbnZpc2libGUgdmFsdWVzIGludG8gdGhlIHN1cnZleSBkYXRhLlxuICAgKiAtIGBvbkhpZGRlbmAgLSBjbGVhciB0aGUgcXVlc3Rpb24gdmFsdWUgd2hlbiBpdCBiZWNvbWVzIGludmlzaWJsZS4gSWYgYSBxdWVzdGlvbiBoYXMgdmFsdWUgYW5kIGl0IHdhcyBpbnZpc2libGUgaW5pdGlhbGx5IHRoZW4gc3VydmV5IGNsZWFycyB0aGUgdmFsdWUgb24gY29tcGxldGluZy5cbiAgICogLSBgb25Db21wbGV0ZWAgKGRlZmF1bHQpIC0gY2xlYXIgaW52aXNpYmxlIHF1ZXN0aW9uIHZhbHVlcyBvbiBzdXJ2ZXkgY29tcGxldGUuIEluIHRoaXMgY2FzZSwgdGhlIGludmlzaWJsZSBxdWVzdGlvbnMgd2lsbCBub3QgYmUgc3RvcmVkIG9uIHRoZSBzZXJ2ZXIuXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZVxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2xlYXJJbnZpc2libGVWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjbGVhckludmlzaWJsZVZhbHVlcyh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHZhbCA9IFwib25Db21wbGV0ZVwiO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKSB2YWwgPSBcIm5vbmVcIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCBxdWVzdGlvbiB2YWx1ZXMgZnJvbSB0aGUgc3VydmV5LCB0aGF0IGVuZC11c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gZW50ZXIuXG4gICAqIEZvciBleGFtcGxlIHRoZSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZXhpc3RzIGluIGEgcmFkaW9ncm91cC9kcm9wZG93bi9jaGVja2JveCBjaG9pY2VzIG9yIG1hdHJpeCByb3dzL2NvbHVtbnMuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2xlYXIgdmFsdWVzIGZvciBpbnZpc2libGUgcXVlc3Rpb25zIG9yIHZhbHVlcyB0aGF0IGRvZXNuJ3QgYXNzb2NpYXRlZCB3aXRoIHF1ZXN0aW9ucy5cbiAgICogSW4gZmFjdCB0aGlzIGZ1bmN0aW9uIGp1c3QgY2FsbCBjbGVhckluY29ycmVjdFZhbHVlcyBmdW5jdGlvbiBvZiBhbGwgcXVlc3Rpb25zIGluIHRoZSBzdXJ2ZXlcbiAgICogQHNlZSBRdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlc1xuICAgKiBAc2VlIFBhZ2UuY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICogQHNlZSBQYW5lbC5jbGVhckluY29ycmVjdFZhbHVlc1xuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHN1cnZleSBsb2NhbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGl0IGlzIGVtcHR5LCB0aGlzIG1lYW5zIHRoZSAnZW4nIGxvY2FsZSBpcyB1c2VkLlxuICAgKiBZb3UgY2FuIHNldCBpdCB0byAnZGUnIC0gR2VybWFuLCAnZnInIC0gRnJlbmNoIGFuZCBzbyBvbi4gVGhlIGxpYnJhcnkgaGFzIGJ1aWx0LWluIGxvY2FsaXphdGlvbiBmb3Igc2V2ZXJhbCBsYW5ndWFnZXMuIFRoZSBsaWJyYXJ5IGhhcyBhIG11bHRpLWxhbmd1YWdlIHN1cHBvcnQgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgIHN1cnZleUxvY2FsaXphdGlvbi5jdXJyZW50TG9jYWxlID0gdmFsdWU7XG4gICAgdGhpcy5sb2NhbGVWYWx1ZSA9IHN1cnZleUxvY2FsaXphdGlvbi5jdXJyZW50TG9jYWxlO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvY2FsZVwiLCB0aGlzLmxvY2FsZVZhbHVlKTtcbiAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5vbkxvY2FsZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uTG9jYWxlQ2hhbmdlZEV2ZW50LmZpcmUodGhpcywgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGxvY2FsZXMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgY3VycmVudCBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0VXNlZExvY2FsZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIGxvY3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIHRoaXMuYWRkVXNlZExvY2FsZXMobG9jcyk7XG4gICAgLy9SZXBsYWNlIHRoZSBkZWZhdWx0IGxvY2FsZSB3aXRoIHRoZSByZWFsIG9uZVxuICAgIHZhciBpbmRleCA9IGxvY3MuaW5kZXhPZihcImRlZmF1bHRcIik7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHZhciBkZWZhdWx0TG9jID0gc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gICAgICAvL1JlbW92ZSB0aGUgZGVmYXVsdExvY1xuICAgICAgdmFyIGRlZkluZGV4ID0gbG9jcy5pbmRleE9mKGRlZmF1bHRMb2MpO1xuICAgICAgaWYgKGRlZkluZGV4ID4gLTEpIHtcbiAgICAgICAgbG9jcy5zcGxpY2UoZGVmSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaW5kZXggPSBsb2NzLmluZGV4T2YoXCJkZWZhdWx0XCIpO1xuICAgICAgbG9jc1tpbmRleF0gPSBkZWZhdWx0TG9jO1xuICAgIH1cbiAgICByZXR1cm4gbG9jcztcbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2NhbGVDaGFuZ2VkKCkge31cbiAgLy9JTG9jYWxpemFibGVPd25lclxuICBnZXRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXlNYXJrZG93bkh0bWwodGhpcywgdGV4dCk7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHQodGV4dCwgdHJ1ZSk7XG4gIH1cbiAgZ2V0TG9jU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoc3RyKTtcbiAgfVxuICAvL0lTdXJ2ZXlFcnJvck93bmVyXG4gIGdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvcik6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHRleHQ6IHRleHQsIG5hbWU6IGVycm9yLmdldEVycm9yVHlwZSgpLCBlcnJvcjogZXJyb3IgfTtcbiAgICB0aGlzLm9uRXJyb3JDdXN0b21UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGV4dDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dCB0aGF0IGlzIGRpc3BsYXllZCB3aGVuIHRoZXJlIGFyZSBubyBhbnkgdmlzaWJsZSBwYWdlcyBhbmQgcXVlc3Rpb25hLlxuICAgKi9cbiAgcHVibGljIGdldCBlbXB0eVN1cnZleVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJlbXB0eVN1cnZleVwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgc3VydmV5IHRpdGxlLlxuICAgKiBAc2VlIGRlc2NyaXB0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGl0bGVcIik7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgZGVzY3JpcHRpb24uIFRoZSBzdXJ2ZXkgZGVzY3JpcHRpb24gaXMgZGlzcGxheWVkIHVuZGVyIGEgc3VydmV5IHRpdGxlLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJkZXNjcmlwdGlvblwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0Rlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImRlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgbG9nby5cbiAgICogQHNlZSB0aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBsb2dvKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9nb1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvZ28odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9nb1wiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0xvZ28oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgc3VydmV5IGxvZ28gd2lkdGguXG4gICAqIEBzZWUgbG9nb1xuICAgKi9cbiAgcHVibGljIGdldCBsb2dvV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1dpZHRoXCIsIDMwMCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvV2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIGhlaWdodC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29IZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCAyMDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0hlaWdodCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIHBvc2l0aW9uLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb1Bvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29Qb3NpdGlvblwiLCBcImxlZnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvUG9zaXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29Qb3NpdGlvblwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNMb2dvKCkge1xuICAgIHJldHVybiAhIXRoaXMubG9nbyAmJiB0aGlzLmxvZ29Qb3NpdGlvbiAhPT0gXCJub25lXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0xvZ29CZWZvcmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaGFzTG9nbyAmJlxuICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJ0b3BcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNMb2dvQWZ0ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaGFzTG9nbyAmJlxuICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwiYm90dG9tXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvZ29DbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgdmFyIGxvZ29DbGFzc2VzOiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBsZWZ0OiBcInN2LWxvZ28tLWxlZnRcIixcbiAgICAgIHJpZ2h0OiBcInN2LWxvZ28tLXJpZ2h0XCIsXG4gICAgICB0b3A6IFwic3YtbG9nby0tdG9wXCIsXG4gICAgICBib3R0b206IFwic3YtbG9nby0tYm90dG9tXCIsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jc3MubG9nbyArIFwiIFwiICsgbG9nb0NsYXNzZXNbdGhpcy5sb2dvUG9zaXRpb25dO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbG9nbyBmaXQgbW9kZS5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29GaXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0ZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvZ29GaXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJsb2dvRml0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgSFRNTCBjb250ZW50IGRpc3BsYXllZCBvbiB0aGUgY29tcGxldGUgcGFnZS4gVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvbXBsZXRlIHBhZ2UgdGV4dC5cbiAgICogQHNlZSBzaG93Q29tcGxldGVkUGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlZEh0bWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVkSHRtbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0NvbXBsZXRlZEh0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVkSHRtbFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgSFRNTCBjb25kaXRpb24gaXRlbXMuIElmIHRoZSBleHByZXNzaW9uIG9mIHRoaXMgaXRlbSByZXR1cm5zIGB0cnVlYCwgdGhlbiBhIHN1cnZleSB3aWxsIHVzZSB0aGlzIGl0ZW0gSFRNTCBpbnN0ZWFkIG9mIGBjb21wbGV0ZWRIdG1sYC5cbiAgICogQHNlZSBIdG1sQ29uZGl0aW9uSXRlbVxuICAgKiBAc2VlIGNvbXBsZXRlSHRtbFxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZWRIdG1sT25Db25kaXRpb24oKTogQXJyYXk8SHRtbENvbmRpdGlvbkl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uKHZhbDogQXJyYXk8SHRtbENvbmRpdGlvbkl0ZW0+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYSBnaXZlbiBleHByZXNzaW9uIGFuZCByZXR1cm5zIGEgcmVzdWx0IHZhbHVlLlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvblxuICAgKi9cbiAgcHVibGljIHJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblJ1bm5lcihleHByZXNzaW9uKS5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhIGdpdmVuIGV4cHJlc3Npb24gYW5kIHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAuXG4gICAqIEBwYXJhbSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgcnVuQ29uZGl0aW9uKGV4cHJlc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKGV4cHJlc3Npb24pLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgICB0aGlzLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICAgICk7XG4gICAgcmV0dXJuICEhaXRlbSA/ICg8SHRtbENvbmRpdGlvbkl0ZW0+aXRlbSkuaHRtbCA6IHRoaXMuY29tcGxldGVkSHRtbDtcbiAgfVxuICBwcml2YXRlIGdldEV4cHJlc3Npb25JdGVtT25SdW5Db25kaXRpb24oXG4gICAgaXRlbXM6IEFycmF5PEV4cHJlc3Npb25JdGVtPlxuICApOiBFeHByZXNzaW9uSXRlbSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcykpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgSFRNTCBjb250ZW50IGRpc3BsYXllZCB0byBhbiBlbmQgdXNlciB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgc3VydmV5LlxuICAgKiBAc2VlIGNsaWVudElkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBsZXRlZEJlZm9yZUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29tcGxldGVkQmVmb3JlSHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSFRNTCB0aGF0IHNob3dzIG9uIGxvYWRpbmcgc3VydmV5IEpzb24gZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgc3VydmV5SWRcbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbG9hZGluZ0h0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2FkaW5nSHRtbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvYWRpbmdIdG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxvYWRpbmdIdG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9hZGluZ0h0bWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibG9hZGluZ0h0bWxcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ1N0YXJ0JyBidXR0b24gY2FwdGlvbi5cbiAgICogVGhlICdTdGFydCcgYnV0dG9uIGlzIHNob3duIG9uIHRoZSBzdGFydGVkIHBhZ2UuIFNldCB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgdG8gYHRydWVgLCB0byBkaXNwbGF5IHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0U3VydmV5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwic3RhcnRTdXJ2ZXlUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBzdGFydFN1cnZleVRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic3RhcnRTdXJ2ZXlUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jU3RhcnRTdXJ2ZXlUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInN0YXJ0U3VydmV5VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnUHJldicgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VQcmV2VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZVByZXZUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VQcmV2VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZVByZXZUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnTmV4dCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFnZU5leHRUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInBhZ2VOZXh0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlTmV4dFRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZU5leHRUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZU5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VOZXh0VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIEdldHMgb3Igc2V0cyB0aGUgJ0NvbXBsZXRlJyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb21wbGV0ZVRleHRcIixcbiAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlVGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZVRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NDb21wbGV0ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tcGxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnUHJldmlldycgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJldmlld1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInByZXZpZXdUZXh0XCIsXG4gICAgICB0aGlzLmdldExvY1N0cmluZyhcInByZXZpZXdUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByZXZpZXdUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInByZXZpZXdUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUHJldmlld1RleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicHJldmlld1RleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqICBHZXRzIG9yIHNldHMgdGhlICdFZGl0JyBidXR0b24gY2FwdGlvbi5cbiAgICogQHNlZSBsb2NhbGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgcHJldmlld1RleHRcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqL1xuICBwdWJsaWMgZ2V0IGVkaXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJlZGl0VGV4dFwiLFxuICAgICAgdGhpcy5nZXRMb2NTdHJpbmcoXCJlZGl0VGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBlZGl0VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJlZGl0VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY0VkaXRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVkaXRUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGF0dGVybiBmb3IgcXVlc3Rpb24gdGl0bGUuIERlZmF1bHQgaXMgXCJudW1UaXRsZVJlcXVpcmVcIiwgMS4gV2hhdCBpcyB5b3VyIG5hbWU/ICosXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvIG51bVJlcXVpcmVUaXRsZTogMS4gKiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gcmVxdWlyZU51bVRpdGxlOiAqIDEuIFdoYXQgaXMgeW91ciBuYW1lP1xuICAgKiBZb3UgY2FuIHNldCBpdCB0byBudW1UaXRsZSAocmVtb3ZlIHJlcXVpcmUgc3ltYm9sIGNvbXBsZXRlbHkpOiAxLiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsIFwibnVtVGl0bGVSZXF1aXJlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVBhdHRlcm4odmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2YWwgIT09IFwibnVtUmVxdWlyZVRpdGxlXCIgJiZcbiAgICAgIHZhbCAhPT0gXCJyZXF1aXJlTnVtVGl0bGVcIiAmJlxuICAgICAgdmFsICE9IFwibnVtVGl0bGVcIlxuICAgICkge1xuICAgICAgdmFsID0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZVBhdHRlcm5cIiwgdmFsKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlUGF0dGVybk9wdGlvbnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgdmFyIHRpdGxlID0gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvblRpdGxlUGF0dGVyblRleHRcIik7XG4gICAgdmFyIG51bSA9ICEhdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggPyB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA6IFwiMS5cIjtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGl0bGUgKyBcIiBcIiArIHRoaXMucmVxdWlyZWRUZXh0LFxuICAgIH0pO1xuICAgIHJlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiBcIm51bVJlcXVpcmVUaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgdGl0bGUsXG4gICAgfSk7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwicmVxdWlyZU51bVRpdGxlXCIsXG4gICAgICB0ZXh0OiB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJudW1UaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aXRsZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBxdWVzdGlvbiB0aXRsZSB0ZW1wbGF0ZS4gT2Jzb2xldGUsIHBsZWFzZSB1c2UgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqIEBzZWUgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9IHRoaXMuZ2V0TmV3VGl0bGVQYXR0ZXJuKHZhbHVlKTtcbiAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgICB2YWx1ZSxcbiAgICAgIFwibm9cIixcbiAgICAgIHRoaXMucXVlc3Rpb25TdGFydEluZGV4LFxuICAgICAgXCIxXCJcbiAgICApO1xuICAgIHRoaXMucmVxdWlyZWRUZXh0ID0gdGhpcy5nZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICAgIHZhbHVlLFxuICAgICAgXCJyZXF1aXJlXCIsXG4gICAgICB0aGlzLnJlcXVpcmVkVGV4dCxcbiAgICAgIFwiKlwiXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldE5ld1RpdGxlUGF0dGVybih0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHN0cnMgPSBbXTtcbiAgICAgIHdoaWxlICh0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSA+IC0xKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3Vic3RyKHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIpICsgMSk7XG4gICAgICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgaWYgKGluZCA8IDApIGJyZWFrO1xuICAgICAgICBzdHJzLnB1c2godGVtcGxhdGUuc3Vic3RyKDAsIGluZCkpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cihpbmQgKyAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHN0cnNbMF0gPT0gXCJyZXF1aXJlXCIpIHJldHVybiBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICAgICAgICBpZiAoc3Ryc1sxXSA9PSBcInJlcXVpcmVcIiAmJiBzdHJzLmxlbmd0aCA9PSAzKSByZXR1cm4gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgICAgICAgaWYgKHN0cnMuaW5kZXhPZihcInJlcXVpcmVcIikgPCAwKSByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cnMubGVuZ3RoID09IDEgJiYgc3Ryc1swXSA9PSBcInRpdGxlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtVGl0bGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50VmFsdWU6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIG5hbWUgPSBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKG5hbWUpO1xuICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICB2YXIgaSA9IGluZCAtIDE7XG4gICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ9XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA8IGluZCAtIDEpIHtcbiAgICAgIHByZWZpeCA9IHRlbXBsYXRlLnN1YnN0cihpICsgMSwgaW5kIC0gaSAtIDEpO1xuICAgIH1cbiAgICBpbmQgKz0gbmFtZS5sZW5ndGg7XG4gICAgaSA9IGluZDtcbiAgICBmb3IgKDsgaSA8IHRlbXBsYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ7XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA+IGluZCkge1xuICAgICAgcG9zdGZpeCA9IHRlbXBsYXRlLnN1YnN0cihpbmQsIGkgLSBpbmQpO1xuICAgIH1cbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHByZWZpeC5sZW5ndGggJiYgcHJlZml4LmNoYXJDb2RlQXQoaSkgPCAzMykgaSsrO1xuICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoaSk7XG4gICAgaSA9IHBvc3RmaXgubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaSA+PSAwICYmIHBvc3RmaXguY2hhckNvZGVBdChpKSA8IDMzKSBpLS07XG4gICAgcG9zdGZpeCA9IHBvc3RmaXguc3Vic3RyKDAsIGkgKyAxKTtcbiAgICBpZiAoIXByZWZpeCAmJiAhcG9zdGZpeCkgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB2YXIgdmFsdWUgPSAhIWN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4gcHJlZml4ICsgdmFsdWUgKyBwb3N0Zml4O1xuICB9XG4gIGdldCBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5pc0VtcHR5KSByZXR1cm4gdGl0bGU7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgdGl0bGU6IHRpdGxlIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHN1cnZleSBkaXNwbGF5cyBwYWdlIG51bWJlcnMgb24gcGFnZXMgdGl0bGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UGFnZU51bWJlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlTnVtYmVyc1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UGFnZU51bWJlcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1BhZ2VOdW1iZXJzKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VOdW1iZXJzXCIsIHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgcXVlc3Rpb24gbnVtYmVycyBhcmUgZGlzcGxheWVkLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgb25gIC0gZGlzcGxheSBxdWVzdGlvbiBudW1iZXJzXG4gICAqIC0gYG9ucGFnZWAgLSBkaXNwbGF5IHF1ZXN0aW9uIG51bWJlcnMsIHN0YXJ0IG51bWJlcmluZyBvbiBldmVyeSBwYWdlXG4gICAqIC0gYG9mZmAgLSB0dXJuIG9mZiB0aGUgbnVtYmVyaW5nIGZvciBxdWVzdGlvbnMgdGl0bGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dRdWVzdGlvbk51bWJlcnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsdWU6IHN0cmluZykge1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSBcIm9ucGFnZVwiID8gXCJvblBhZ2VcIiA6IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHN1cnZleSBwcm9ncmVzcyBiYXIgcG9zaXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGB0b3BgIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIHRvcFxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIGJvdHRvbVxuICAgKiAtIGBib3RoYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIGJvdGggc2lkZXM6IHRvcCBhbmQgYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJvZ3Jlc3NCYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1Byb2dyZXNzQmFyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJvZ3Jlc3NCYXJcIiwgbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdHlwZSBvZiBpbmZvIGluIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBwYWdlc2AgKGRlZmF1bHQpLFxuICAgKiAtIGBxdWVzdGlvbnNgLFxuICAgKiAtIGBjb3JyZWN0UXVlc3Rpb25zYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NCYXJUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHByb2dyZXNzQmFyVHlwZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NCYXJUeXBlXCIsIG5ld1ZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwidG9wXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90dG9tXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0L0hUTUwgdGhhdCBpcyByZW5kZXJlZCBhcyBhIHN1cnZleSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgYm90dG9tYCAtIHNob3cgYSBxdWVzdGlvbiB0aXRsZSB0byBib3R0b21cbiAgICogLSBgbGVmdGAgLSBzaG93IGEgcXVlc3Rpb24gdGl0bGUgdG8gbGVmdFxuICAgKiAtIGB0b3BgIC0gc2hvdyBhIHF1ZXN0aW9uIHRpdGxlIHRvIHRvcC5cbiAgICpcbiAgICogPiBTb21lIHF1ZXN0aW9ucywgZm9yIGV4YW1wbGUgbWF0cml4ZXMsIGRvIG5vdCBzdXBwb3J0ICdsZWZ0JyB2YWx1ZS4gVGhlIHRpdGxlIGZvciB0aGVtIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB0b3AuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzcygpIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGVycm9yIG1lc3NhZ2UgcG9zaXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGB0b3BgIC0gdG8gc2hvdyBxdWVzdGlvbiBlcnJvcihzKSBvdmVyIHRoZSBxdWVzdGlvbixcbiAgICogLSBgYm90dG9tYCAtIHRvIHNob3cgcXVlc3Rpb24gZXJyb3IocykgdW5kZXIgdGhlIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25FcnJvckxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIiwgdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gZGVzY3JpcHRpb24gcG9zaXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGB1bmRlclRpdGxlYCAtIHNob3cgcXVlc3Rpb24gZGVzY3JpcHRpb24gdW5kZXIgdGhlIHF1ZXN0aW9uIHRpdGxlLFxuICAgKiAtIGB1bmRlcklucHV0YCAtIHNob3cgcXVlc3Rpb24gZGVzY3JpcHRpb24gdW5kZXIgdGhlIHF1ZXN0aW9uIGlucHV0IGluc3RlYWQgb2YgcXVlc3Rpb24gdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc3VydmV5IGVkaXQgbW9kZS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYGVkaXRgIChkZWZhdWx0KSAtIG1ha2UgYSBzdXJ2ZXkgZWRpdGFibGUsXG4gICAqIC0gYGRpc3BsYXlgIC0gbWFrZSBhIHN1cnZleSByZWFkLW9ubHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1vZGUodmFsdWU6IHN0cmluZykge1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodmFsdWUgPT0gdGhpcy5tb2RlKSByZXR1cm47XG4gICAgaWYgKHZhbHVlICE9IFwiZWRpdFwiICYmIHZhbHVlICE9IFwiZGlzcGxheVwiKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibW9kZVwiLCB2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBvbk1vZGVDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgcGFnZS5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCBwYWdlLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIG9iamVjdCB0aGF0IHN0b3JlcyB0aGUgc3VydmV5IHJlc3VsdHMvZGF0YS4gWW91IGNhbiBzZXQgaXQgZGlyZWN0bHkgYXMgYHsgJ3F1ZXN0aW9uIG5hbWUnOiBxdWVzdGlvblZhbHVlLCAuLi4gfWBcbiAgICpcbiAgICogPiBJZiB5b3Ugc2V0IHRoZSBgZGF0YWAgcHJvcGVydHkgYWZ0ZXIgY3JlYXRpbmcgdGhlIHN1cnZleSwgeW91IG1heSBuZWVkIHRvIHNldCB0aGUgYGN1cnJlbnRQYWdlTm9gIHRvIGAwYCwgaWYgeW91IGFyZSB1c2luZyBgdmlzaWJsZUlmYCBwcm9wZXJ0aWVzIGZvciBxdWVzdGlvbnMvcGFnZXMvcGFuZWxzIHRvIGVuc3VyZSB0aGF0IHlvdSBhcmUgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgcGFnZS5cbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKiBAc2VlIGdldFZhbHVlXG4gICAqIEBzZWUgbWVyZ2VEYXRhXG4gICAqIEBzZWUgY3VycmVudFBhZ2VOb1xuICAgKi9cbiAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFsdWVzSGFzaCkge1xuICAgICAgdmFyIGRhdGFWYWx1ZSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSk7XG4gICAgICBpZiAoZGF0YVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkYXRhVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FsY3VhdGVkVmFsdWVzSW50b1Jlc3VsdChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIHNldCBkYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMudmFsdWVzSGFzaCA9IHt9O1xuICAgIHRoaXMuc2V0RGF0YUNvcmUoZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIE1lcmdlIHRoZSB2YWx1ZXMgaW50byBzdXJ2ZXkuZGF0YS4gSXQgd29ya3MgYXMgc3VydmV5LmRhdGEsIGV4Y2VwdCBpdCBkb2Vzbid0IGNsZWFuIHRoZSBleGlzdGluZyBkYXRhLCBidXQgb3ZlcnJpZGVzIHRoZW0uXG4gICAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gbWVyZ2UuIEl0IHNob3VsZCBiZSBhbiBvYmplY3Qge2tleVZhbHVlOiBWYWx1ZSwgLi4ufVxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKi9cbiAgcHVibGljIG1lcmdlRGF0YShkYXRhOiBhbnkpIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICB0aGlzLnNldERhdGFDb3JlKGRhdGEpO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhQ29yZShkYXRhOiBhbnkpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwga2V5LCBkYXRhW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUFsbFF1ZXN0aW9uc1ZhbHVlKCk7XG4gICAgdGhpcy5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQoXCJcIik7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRDYWxjdWF0ZWRWYWx1ZXNJbnRvUmVzdWx0KHJlc3VsdDogYW55KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsVmFsdWUuaW5jbHVkZUludG9SZXN1bHQgJiZcbiAgICAgICAgISFjYWxWYWx1ZS5uYW1lICYmXG4gICAgICAgIHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSkgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdFtjYWxWYWx1ZS5uYW1lXSA9IHRoaXMuZ2V0VmFyaWFibGUoY2FsVmFsdWUubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgc3VydmV5IHJlc3VsdCBkYXRhIGFzIGFuIGFycmF5IG9mIHBsYWluIG9iamVjdHM6IHdpdGggcXVlc3Rpb24gYHRpdGxlYCwgYG5hbWVgLCBgdmFsdWVgLCBhbmQgYGRpc3BsYXlWYWx1ZWAuXG4gICAqXG4gICAqIEZvciBjb21wbGV4IHF1ZXN0aW9ucyAobGlrZSBtYXRyaXgsIGV0Yy4pIGBpc05vZGVgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cykuXG4gICAqXG4gICAqIFNldCBgb3B0aW9ucy5pbmNsdWRlRW1wdHlgIHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gc2tpcCBlbXB0eSBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuO1xuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxhbnk+ID0gW107XG4gICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKS5mb3JFYWNoKChxdWVzdGlvbikgPT4ge1xuICAgICAgdmFyIHJlc3VsdEl0ZW0gPSAoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgICBpZiAoISFyZXN1bHRJdGVtKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdEl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBjb25kaXRpb25WZXJzaW9uID0gMDtcbiAgZ2V0RmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YXJpYWJsZXNIYXNoKSB2YWx1ZXNba2V5XSA9IHRoaXMudmFyaWFibGVzSGFzaFtrZXldO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlc0hhc2gpXG4gICAgICB2YWx1ZXNba2V5XSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSk7XG4gICAgdmFsdWVzW1wiY29uZGl0aW9uVmVyc2lvblwiXSA9ICsrdGhpcy5jb25kaXRpb25WZXJzaW9uO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlc0hhc2hba2V5XTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdmFsdWVzSGFzaFtrZXldID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGRlbGV0ZURhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGRlbGV0ZSB2YWx1ZXNIYXNoW2tleV07XG4gIH1cbiAgLy8gcHJvdGVjdGVkIGl0ZXJhdGVEYXRhVmFsdWVzSGFzaChmdW5jOiAoaGFzaDogYW55LCBrZXk6IGFueSkgPT4gdm9pZCkge1xuICAvLyAgIHZhciBrZXlzOiBhbnlbXSA9IFtdO1xuICAvLyAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhbHVlc0hhc2gpIHtcbiAgLy8gICAgIGtleXMucHVzaChrZXkpO1xuICAvLyAgIH1cbiAgLy8gICBrZXlzLmZvckVhY2goa2V5ID0+IGZ1bmModGhpcy52YWx1ZXNIYXNoLCBrZXkpKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjb21tZW50cyBmcm9tIHRoZSBkYXRhLlxuICAgKiBAc2VlIGRhdGFcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudHMoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXNIYXNoKSB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5jb21tZW50UHJlZml4KSA+IDApIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB2aXNpYmxlIHBhZ2VzLiBJZiBhbGwgcGFnZXMgYXJlIHZpc2libGUsIHRoZW4gdGhpcyBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzYW1lIGxpc3QgYXMgdGhlIGBwYWdlc2AgcHJvcGVydHkuXG4gICAqIEBzZWUgcGFnZXNcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZVxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VzKCk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucGFnZXM7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxQYWdlTW9kZWw+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgY29udGFpbnMgbm8gcGFnZXMuIFRoZSBzdXJ2ZXkgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7XG4gIH1cbiAgLyoqXG4gICAqIERlcHJlY2F0ZWQuIFVzZSB0aGUgYHBhZ2VDb3VudGAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlQ291bnQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN1cnZleSBwYWdlIGNvdW50LlxuICAgKiBAc2VlIHZpc2libGVQYWdlQ291bnRcbiAgICogQHNlZSBwYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgb2YgdmlzaWJsZSBwYWdlcyB3aXRoaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBwYWdlQ291bnRcbiAgICogQHNlZSB2aXNpYmxlUGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS4gVGhpcyBwcm9wZXJ0eSB3b3JrcyBpZiB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRlZFBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICB2YXIgcGFnZSA9XG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBwYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBzdXJ2ZXkgcGFnZS4gSWYgYSBzdXJ2ZXkgaXMgcmVuZGVyZWQsIHRoZW4gdGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgcGFnZSB0aGF0IGEgdXNlciBjYW4gc2VlL2VkaXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRQYWdlKCk6IGFueSB7XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgPCAwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5vbkNvbnRhaW5zUGFnZUNhbGxiYWNrIHx8XG4gICAgICAgICAgIXRoaXMub25Db250YWluc1BhZ2VDYWxsYmFjayh0aGlzLmN1cnJlbnRQYWdlVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPT0gbnVsbCAmJiB2UGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgbmV3UGFnZSA9IHRoaXMuZ2V0UGFnZUJ5T2JqZWN0KHZhbHVlKTtcbiAgICBpZiAoISF2YWx1ZSAmJiAhbmV3UGFnZSkgcmV0dXJuO1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAobmV3UGFnZSAhPSBudWxsICYmIHZQYWdlcy5pbmRleE9mKG5ld1BhZ2UpIDwgMCkgcmV0dXJuO1xuICAgIGlmIChuZXdQYWdlID09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFBhZ2VWYWx1ZTtcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VDaGFuZ2luZyhuZXdQYWdlLCBvbGRWYWx1ZSkpIHJldHVybjtcbiAgICBpZiAoISFuZXdQYWdlKSB7XG4gICAgICBuZXdQYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gbmV3UGFnZTtcbiAgICBpZiAoISFuZXdQYWdlKSB7XG4gICAgICBuZXdQYWdlLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICAgIG5ld1BhZ2Uuc2V0V2FzU2hvd24odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlQ2hhbmdlZChuZXdQYWdlLCBvbGRWYWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYWdlQnlPYmplY3QodmFsdWU6IGFueSk6IFBhZ2VNb2RlbCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHZhbHVlLmdldFR5cGUgJiYgdmFsdWUuZ2V0VHlwZSgpID09IFwicGFnZVwiKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcbiAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VCeU5hbWUoU3RyaW5nKHZhbHVlKSk7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhciBpbmRleCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IHZQYWdlcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHZQYWdlc1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgdmlzaWJsZSBwYWdlcyBhcnJheS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFBhZ2VObygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudFBhZ2VObyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gdlBhZ2VzLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbdmFsdWVdO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHF1ZXN0aW9uIGRpc3BsYXkgb3JkZXIuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMuIFlvdSBjYW4gcmFuZG9taXplIHF1ZXN0aW9ucyBvbiBhIHNwZWNpZmljIHBhZ2UuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGByYW5kb21gIC0gcmFuZG9taXplIHF1ZXN0aW9uc1xuICAgKiAtIGBpbml0aWFsYCAtIGtlZXAgcXVlc3Rpb25zIGluIHRoZSBzYW1lIG9yZGVyLCBhcyBpbiBhIHN1cnZleSBtb2RlbC5cbiAgICogQHNlZSBTdXJ2ZXlQYWdlLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uc09yZGVyKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uc09yZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBmb2N1cyB0byB0aGUgZmlyc3QgcXVlc3Rpb24gd2l0aCB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdFF1ZXN0aW9uKCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcGFnZS5zY3JvbGxUb1RvcCgpO1xuICAgICAgcGFnZS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcbiAgICB9XG4gIH1cbiAgc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuO1xuICAgIHBhZ2Uuc2Nyb2xsVG9Ub3AoKTtcbiAgICBpZiAodGhpcy5mb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWMpIHtcbiAgICAgIHBhZ2UuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1cnZleSBzdGF0ZTpcbiAgICpcbiAgICogLSBgbG9hZGluZ2AgLSBsb2FkaW5nIGZyb20gdGhlIEpTT04sXG4gICAqIC0gYGNvbXBsZXRlZGAgLSBhIHVzZXIgaGFzIGNvbXBsZXRlZCB0aGUgc3VydmV5LFxuICAgKiAtIGBzdGFydGluZ2AgLSB0aGUgc3RhcnRlZCBwYWdlIGlzIHNob3dpbmcsXG4gICAqIC0gYHJ1bm5pbmdgIC0gYSB1c2VyIGFuc3dlcnMgcXVlc3Rpb25zIHJpZ2h0IG5vdyxcbiAgICogLSBgZW1wdHlgIC0gdGhlcmUgaXMgbm90aGluZyB0byBzaG93IGluIHRoZSBjdXJyZW50IHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybiBcImxvYWRpbmdcIjtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCkgcmV0dXJuIFwiY29tcGxldGVkXCI7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZWRCZWZvcmUpIHJldHVybiBcImNvbXBsZXRlZGJlZm9yZVwiO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRGVzaWduTW9kZSAmJlxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU3RhcnRlZFN0YXRlICYmXG4gICAgICB0aGlzLnN0YXJ0ZWRQYWdlXG4gICAgKVxuICAgICAgcmV0dXJuIFwic3RhcnRpbmdcIjtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA/IFwicHJldmlld1wiIDogXCJlbXB0eVwiO1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID8gXCJydW5uaW5nXCIgOiBcImVtcHR5XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0NvbXBsZXRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzU2hvd2luZ1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1ByZXZpZXdcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzU2hvd2luZ1ByZXZpZXcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldyA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdQcmV2aWV3XCIsIHZhbCk7XG4gICAgdGhpcy5vblNob3dpbmdQcmV2aWV3Q2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzU3RhcnRlZFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1N0YXJ0ZWRTdGF0ZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgaXNTdGFydGVkU3RhdGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0NvbXBsZXRlZEJlZm9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRCZWZvcmVcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzQ29tcGxldGVkQmVmb3JlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkQmVmb3JlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0xvYWRpbmdcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzTG9hZGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0xvYWRpbmdcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcGxldGVkU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZWRTdGF0ZVZhbHVlO1xuICB9XG4gIGdldCBjb21wbGV0ZWRTdGF0ZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q29tcGxldGVkU3RhdGUodmFsdWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wbGV0ZWRTdGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBpZiAodmFsdWUgPT0gXCJzYXZpbmdcIikgdGV4dCA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwic2F2aW5nRGF0YVwiKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcImVycm9yXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFFcnJvclwiKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcInN1Y2Nlc3NcIikgdGV4dCA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwic2F2aW5nRGF0YVN1Y2Nlc3NcIik7XG4gICAgfVxuICAgIHRoaXMuY29tcGxldGVkU3RhdGVUZXh0VmFsdWUgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHN1cnZleSBkYXRhIGFuZCBzdGF0ZS4gSWYgdGhlIHN1cnZleSBoYXMgYSBgY29tcGxldGVkYCBzdGF0ZSwgaXQgd2lsbCBnZXQgYSBgcnVubmluZ2Agc3RhdGUuXG4gICAqIEBwYXJhbSBjbGVhckRhdGEgY2xlYXIgdGhlIGRhdGFcbiAgICogQHBhcmFtIGdvdG9GaXJzdFBhZ2UgbWFrZSB0aGUgZmlyc3QgcGFnZSBhcyBhIGN1cnJlbnQgcGFnZS5cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGNsZWFyKGNsZWFyRGF0YTogYm9vbGVhbiA9IHRydWUsIGdvdG9GaXJzdFBhZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgIHRoaXMudmFyaWFibGVzSGFzaCA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnRpbWVTcGVudCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnRpbWVTcGVudCA9IDA7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNldFdhc1Nob3duKGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5pc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb21wbGV0ZWRCZWZvcmUgPSBmYWxzZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZDtcbiAgICBpZiAoZ290b0ZpcnN0UGFnZSAmJiB0aGlzLnZpc2libGVQYWdlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbMF07XG4gICAgfVxuICAgIGlmIChjbGVhckRhdGEpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzV2l0aERlZmF1bHRzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBtZXJnZVZhbHVlcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XG4gICAgaWYgKCFkZXN0IHx8ICFzcmMpIHJldHVybjtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzcmNba2V5XTtcbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKCFkZXN0W2tleV0pIGRlc3Rba2V5XSA9IHt9O1xuICAgICAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCBkZXN0W2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzV2l0aERlZmF1bHRzKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLmlzTG9hZGluZykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFnZXNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcXVlc3Rpb25zW2pdLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDdXN0b21XaWRnZXRzKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIGlmICghcGFnZSkgcmV0dXJuO1xuICAgIHBhZ2UudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICB9XG4gIHByb3RlY3RlZCBjdXJyZW50UGFnZUNoYW5naW5nKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG9sZEN1cnJlbnRQYWdlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld0N1cnJlbnRQYWdlOiBuZXdWYWx1ZSxcbiAgICAgIGFsbG93Q2hhbmdpbmc6IHRydWUsXG4gICAgICBpc05leHRQYWdlOiB0aGlzLmlzTmV4dFBhZ2UobmV3VmFsdWUsIG9sZFZhbHVlKSxcbiAgICAgIGlzUHJldlBhZ2U6IHRoaXMuaXNQcmV2UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgIH07XG4gICAgdGhpcy5vbkN1cnJlbnRQYWdlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5hbGxvd0NoYW5naW5nO1xuICB9XG4gIHByb3RlY3RlZCBjdXJyZW50UGFnZUNoYW5nZWQobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCkge1xuICAgIHRoaXMub25DdXJyZW50UGFnZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBvbGRDdXJyZW50UGFnZTogb2xkVmFsdWUsXG4gICAgICBuZXdDdXJyZW50UGFnZTogbmV3VmFsdWUsXG4gICAgICBpc05leHRQYWdlOiB0aGlzLmlzTmV4dFBhZ2UobmV3VmFsdWUsIG9sZFZhbHVlKSxcbiAgICAgIGlzUHJldlBhZ2U6IHRoaXMuaXNQcmV2UGFnZShuZXdWYWx1ZSwgb2xkVmFsdWUpLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgaXNOZXh0UGFnZShuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFuZXdWYWx1ZSB8fCAhb2xkVmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3VmFsdWUudmlzaWJsZUluZGV4ID09IG9sZFZhbHVlLnZpc2libGVJbmRleCArIDE7XG4gIH1cbiAgcHJpdmF0ZSBpc1ByZXZQYWdlKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1ZhbHVlIHx8ICFvbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXdWYWx1ZS52aXNpYmxlSW5kZXggKyAxID09IG9sZFZhbHVlLnZpc2libGVJbmRleDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvZ3Jlc3MgdGhhdCBhIHVzZXIgbWFkZSB3aGlsZSBnb2luZyB0aHJvdWdoIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgPT09IFwicXVlc3Rpb25zXCIpIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc1dpdGhJbnB1dCgpO1xuICAgICAgdmFyIGFuc3dlcmVkUXVlc3Rpb25zQ291bnQgPSBxdWVzdGlvbnMucmVkdWNlKFxuICAgICAgICAoYTogbnVtYmVyLCBiOiBRdWVzdGlvbikgPT4gYSArIChiLmlzRW1wdHkoKSA/IDAgOiAxKSxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHJldHVybiBNYXRoLmNlaWwoKGFuc3dlcmVkUXVlc3Rpb25zQ291bnQgKiAxMDApIC8gcXVlc3Rpb25zLmxlbmd0aCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2dyZXNzQmFyVHlwZSA9PT0gXCJjb3JyZWN0UXVlc3Rpb25zXCIpIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc1dpdGhJbnB1dCgpO1xuICAgICAgdmFyIGNvcnJlY3RBbnN3ZXJzQ291bnQgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKChjb3JyZWN0QW5zd2Vyc0NvdW50ICogMTAwKSAvIHF1ZXN0aW9ucy5sZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChpbmRleCAqIDEwMCkgLyB0aGlzLnZpc2libGVQYWdlQ291bnQpO1xuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25zV2l0aElucHV0KCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIGFsbFF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFsbFF1ZXN0aW9uc1tpXS5oYXNJbnB1dCkge1xuICAgICAgICBxdWVzdGlvbnMucHVzaChhbGxRdWVzdGlvbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnKSBwb3NpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBcIm5vbmVcIjtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgaWYgKCFwYWdlKSByZXR1cm4gXCJub25lXCI7XG4gICAgaWYgKHBhZ2UubmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5ID09PSBcInNob3dcIikge1xuICAgICAgcmV0dXJuIFwiYm90dG9tXCI7XG4gICAgfVxuICAgIGlmIChwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSA9PT0gXCJoaWRlXCIpIHtcbiAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvd05hdmlnYXRpb25CdXR0b25zO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIGluIGVkaXQgbW9kZS5cbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImVkaXRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGxldGVCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzRWRpdE1vZGUgJiZcbiAgICAgICghdGhpcy5pc1Nob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgfHwgdGhpcy5zdGF0ZSA9PSBcInByZXZpZXdcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNQcmV2aWV3QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PSBcInJ1bm5pbmdcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NhbmNlbFByZXZpZXdCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzRWRpdE1vZGUgJiZcbiAgICAgIHRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlICYmXG4gICAgICB0aGlzLnN0YXRlID09IFwicHJldmlld1wiXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgaW4gcHJldmlldyBtb2RlLlxuICAgKiBAc2VlIG1vZGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImRpc3BsYXlcIiB8fCB0aGlzLnN0YXRlID09IFwicHJldmlld1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcIm9uVHlwaW5nXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUuIEl0IGlzIHVzZWQgYnkgU3VydmV5SlMgRWRpdG9yLlxuICAgKiBAc2VlIHNldERlc2lnbk1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rlc2lnbk1vZGU7XG4gIH1cbiAgcHJpdmF0ZSBfaXNEZXNpZ25Nb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdXJ2ZXkgaW50byBkZXNpZ24gbW9kZS5cbiAgICogQHBhcmFtIHZhbHVlIHVzZSB0cnVlIHRvIHNldCB0aGUgc3VydmV5IGludG8gdGhlIGRlc2lnbiBtb2RlLlxuICAgKi9cbiAgcHVibGljIHNldERlc2lnbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0Rlc2lnbk1vZGUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uUXVlc3Rpb25zT25QYWdlTW9kZUNoYW5nZWQoXCJzdGFuZGFyZFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2hvdyBhbGwgZWxlbWVudHMgaW4gdGhlIHN1cnZleSwgcmVnYXJkbGVzcyB0aGVpciB2aXNpYmlsaXR5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SW52aXNpYmxlRWxlbWVudHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dJbnZpc2libGVFbGVtZW50c1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW52aXNpYmxlRWxlbWVudHModmFsOiBib29sZWFuKSB7XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0ludmlzaWJsZUVsZW1lbnRzXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUFsbEVsZW1lbnRzVmlzaWJpbGl0eSh2aXNQYWdlcyk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodmlzUGFnZXM6IEFycmF5PFBhZ2VNb2RlbD4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHBhZ2UudXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICAgIGlmICh2aXNQYWdlcy5pbmRleE9mKHBhZ2UpID4gLTEgIT0gcGFnZS5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgIHZpc2libGU6IHBhZ2UuaXNWaXNpYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBhcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuc2hvd0ludmlzaWJsZUVsZW1lbnRzO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJlRW1wdHlFbGVtZW50c0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICB0aGlzLnNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgPT0gXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiBhIHVzZXIgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoZSBzdXJ2ZXkgaW4gdGhpcyBicm93c2VyIGFuZCB0aGVyZSBpcyBhIGNvb2tpZSBhYm91dCBpdC4gU3VydmV5IGdvZXMgdG8gYGNvbXBsZXRlZGAgc3RhdGUgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLlxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBzZXRDb29raWVcbiAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICogQHNlZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBoYXNDb29raWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZTtcbiAgICByZXR1cm4gY29va2llcyAmJiBjb29raWVzLmluZGV4T2YodGhpcy5jb29raWVOYW1lICsgXCI9dHJ1ZVwiKSA+IC0xO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvb2tpZSB3aXRoIGBjb29raWVOYW1lYCBpbiB1c2VyJ3MgYnJvd3Nlci4gSXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IG9uIHN1cnZleSBjb21wbGV0ZSBpZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IHZhbHVlIGlzIG5vdCBlbXB0eS5cbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgaGFzQ29va2llXG4gICAqIEBzZWUgZGVsZXRlQ29va2llXG4gICAqL1xuICBwdWJsaWMgc2V0Q29va2llKCkge1xuICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XG4gICAgZG9jdW1lbnQuY29va2llID1cbiAgICAgIHRoaXMuY29va2llTmFtZSArIFwiPXRydWU7IGV4cGlyZXM9RnJpLCAzMSBEZWMgOTk5OSAwOjA6MCBHTVRcIjtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29va2llIHdpdGggYGNvb2tpZU5hbWVgIGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKiBAc2VlIGhhc0Nvb2tpZVxuICAgKiBAc2VlIHNldENvb2tpZVxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUNvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuY29va2llTmFtZSkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IHRoaXMuY29va2llTmFtZSArIFwiPTtcIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIHN1cnZleSBtdXN0IGlnbm9yZSB2YWxpZGF0aW9uIGxpa2UgcmVxdWlyZWQgcXVlc3Rpb25zIGFuZCBvdGhlcnMsIG9uIGBuZXh0UGFnZWAgYW5kIGBjb21wbGV0ZUxhc3RQYWdlYCBmdW5jdGlvbiBjYWxscy4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgaWdub3JlVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gdGhlIG5leHQgcGFnZS5cbiAgICpcbiAgICogUmV0dXJucyBgZmFsc2VgIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAqXG4gICAqIC0gaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlLlxuICAgKiAtIGlmIHRoZSBjdXJyZW50IHBhZ2UgY29udGFpbnMgZXJyb3JzIChmb3IgZXhhbXBsZSwgYSByZXF1aXJlZCBxdWVzdGlvbiBpcyBlbXB0eSkuXG4gICAqIEBzZWUgaXNDdXJyZW50UGFnZUhhc0Vycm9yc1xuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKi9cbiAgcHVibGljIG5leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTGFzdFBhZ2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzT25OYXZpZ2F0ZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaWdub3JlVmFsaWRhdGlvbiB8fCAhdGhpcy5pc0VkaXRNb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2hlY2tFcnJvcnNNb2RlID09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRoaXMuaGFzRXJyb3JzKHRydWUsIHRydWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDdXJyZW50UGFnZUhhc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrRm9yQXN5bmNRdWVzdGlvblZhbGlkYXRpb24oZG9Db21wbGV0ZSk7XG4gIH1cbiAgcHJpdmF0ZSBhc3luY1ZhbGlkYXRpb25RdWVzaXRvbnM6IEFycmF5PFF1ZXN0aW9uPjtcbiAgcHJpdmF0ZSBjaGVja0ZvckFzeW5jUXVlc3Rpb25WYWxpZGF0aW9uKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0aGlzLmNsZWFyQXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zKCk7XG4gICAgdmFyIHF1ZXN0aW9uczogQXJyYXk8UXVlc3Rpb24+ID0gdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycykge1xuICAgICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jUXVlc3Rpb25WYWxpZGF0b3JzKGRvQ29tcGxldGUsIGhhc0Vycm9ycyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zLnB1c2gocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucygpIHtcbiAgICBpZiAoISF0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucykge1xuICAgICAgdmFyIGFzeW5RdWVzdGlvbnMgPSB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhc3luUXVlc3Rpb25zW2ldLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMgPSBbXTtcbiAgfVxuICBwcml2YXRlIG9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMoXG4gICAgZG9Db21wbGV0ZTogYm9vbGVhbixcbiAgICBoYXNFcnJvcnM6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgdGhpcy5jbGVhckFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYXN5blF1ZXN0aW9ucyA9IHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzeW5RdWVzdGlvbnNbaV0uaXNSdW5uaW5nVmFsaWRhdG9ycykgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZUNvcmUoZG9Db21wbGV0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiB0aGUgY3VycmVudCBwYWdlIGNvbnRhaW5zIGVycm9ycywgZm9yIGV4YW1wbGUsIHRoZSByZXF1aXJlZCBxdWVzdGlvbiBpcyBlbXB0eSBvciBhIHF1ZXN0aW9uIHZhbGlkYXRpb24gaXMgZmFpbGVkLlxuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ3VycmVudFBhZ2VIYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiBhbnkgb2YgdGhlIHN1cnZleSBwYWdlcyBjb250YWlucyBlcnJvcnMuXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIGB0cnVlYCwgdG8gc2hvdyBlcnJvcnMgaW4gVUkuXG4gICAqIEBwYXJhbSBmb2N1c09uRmlyc3RFcnJvciBzZXQgaXQgdG8gYHRydWVgIHRvIGZvY3VzIG9uIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGRvZXNuJ3QgcGFzcyB0aGUgdmFsaWRhdGlvbiBhbmQgbWFrZSB0aGUgcGFnZSwgd2hlcmUgdGhlIHF1ZXN0aW9uIGlzIGxvY2F0ZWQsIHRoZSBjdXJyZW50LlxuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICBmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGZvY3VzT25GaXJzdEVycm9yOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdmFyIGZpcnN0RXJyb3JQYWdlID0gbnVsbDtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZpc1BhZ2VzW2ldLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIGZvY3VzT25GaXJzdEVycm9yKSkge1xuICAgICAgICBpZiAoIWZpcnN0RXJyb3JQYWdlKSBmaXJzdEVycm9yUGFnZSA9IHZpc1BhZ2VzW2ldO1xuICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZm9jdXNPbkZpcnN0RXJyb3IgJiYgISFmaXJzdEVycm9yUGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGZpcnN0RXJyb3JQYWdlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBzdXJ2ZXkgZWxlbWVudHMgKHBhZ2VzLCBwYW5lbHMsIGFuZCBxdWVzdGlvbnMpIGhhdmUgdW5pcXVlIHF1ZXN0aW9uIG5hbWVzLlxuICAgKiBZb3UgY2FuIGNoZWNrIGZvciB1bmlxdWUgbmFtZXMgZm9yIGluZGl2aWR1YWwgcGFnZSBhbmQgcGFuZWwgKGFuZCBhbGwgdGhlaXIgZWxlbWVudHMpIG9yIGEgcXVlc3Rpb24uXG4gICAqIElmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBhIHN1cnZleSBjaGVja3MgdGhhdCBhbGwgaXRzIGVsZW1lbnRzIGhhdmUgdW5pcXVlIG5hbWVzLlxuICAgKiBAcGFyYW0gZWxlbWVudCBwYWdlLCBwYW5lbCBvciBxdWVzdGlvbiwgaXQgaXMgYG51bGxgIGJ5IGRlZmF1bHQsIHRoYXQgbWVhbnMgYWxsIHN1cnZleSBlbGVtZW50cyB3aWxsIGJlIGNoZWNrZWRcbiAgICovXG4gIHB1YmxpYyBlbnN1cmVVbmlxdWVOYW1lcyhlbGVtZW50OiBJU3VydmV5RWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5lbnN1cmVVbmlxdWVOYW1lKHRoaXMucGFnZXNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LmlzUGFnZSkge1xuICAgICAgdGhpcy5lbnN1cmVVbmlxdWVQYWdlTmFtZShlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgdGhpcy5lbnN1cmVVbmlxdWVQYW5lbE5hbWUoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmlzUGFnZSB8fCBlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9ICg8SVBhbmVsPmVsZW1lbnQpLmVsZW1lbnRzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmVuc3VyZVVuaXF1ZU5hbWVzKGVsZW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnN1cmVVbmlxdWVRdWVzdGlvbk5hbWUoZWxlbWVudCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlUGFnZU5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICAobmFtZTogc3RyaW5nKTogSVN1cnZleUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVQYW5lbE5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICAgIGVsZW1lbnQsXG4gICAgICAobmFtZTogc3RyaW5nKTogSVN1cnZleUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJ5TmFtZShuYW1lKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlUXVlc3Rpb25OYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgICBlbGVtZW50LFxuICAgICAgKG5hbWU6IHN0cmluZyk6IElTdXJ2ZXlFbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIGdldEVsZW1lbnRCeU5hbWU6IChuYW1lOiBzdHJpbmcpID0+IElTdXJ2ZXlFbGVtZW50XG4gICkge1xuICAgIHZhciBleGlzdGluZ0VsZW1lbnQgPSBnZXRFbGVtZW50QnlOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgaWYgKCFleGlzdGluZ0VsZW1lbnQgfHwgZXhpc3RpbmdFbGVtZW50ID09IGVsZW1lbnQpIHJldHVybjtcbiAgICB2YXIgbmV3TmFtZSA9IHRoaXMuZ2V0TmV3TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgIHdoaWxlICghIWdldEVsZW1lbnRCeU5hbWUobmV3TmFtZSkpIHtcbiAgICAgIHZhciBuZXdOYW1lID0gdGhpcy5nZXROZXdOYW1lKGVsZW1lbnQubmFtZSk7XG4gICAgfVxuICAgIGVsZW1lbnQubmFtZSA9IG5ld05hbWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHBvcyA9IG5hbWUubGVuZ3RoO1xuICAgIHdoaWxlIChwb3MgPiAwICYmIG5hbWVbcG9zIC0gMV0gPj0gXCIwXCIgJiYgbmFtZVtwb3MgLSAxXSA8PSBcIjlcIikge1xuICAgICAgcG9zLS07XG4gICAgfVxuICAgIHZhciBiYXNlID0gbmFtZS5zdWJzdHIoMCwgcG9zKTtcbiAgICB2YXIgbnVtID0gMDtcbiAgICBpZiAocG9zIDwgbmFtZS5sZW5ndGgpIHtcbiAgICAgIG51bSA9IHBhcnNlSW50KG5hbWUuc3Vic3RyKHBvcykpO1xuICAgIH1cbiAgICBudW0rKztcbiAgICByZXR1cm4gYmFzZSArIG51bTtcbiAgfVxuICBwcml2YXRlIGNoZWNrSXNDdXJyZW50UGFnZUhhc0Vycm9ycyhcbiAgICBpc0ZvY3VzZU9uRmlyc3RFcnJvcjogYm9vbGVhbiA9IHVuZGVmaW5lZFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyh0aGlzLmN1cnJlbnRQYWdlLCBpc0ZvY3VzZU9uRmlyc3RFcnJvcik7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0lzUGFnZUhhc0Vycm9ycyhcbiAgICBwYWdlOiBQYWdlTW9kZWwsXG4gICAgaXNGb2N1c2VPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzRm9jdXNlT25GaXJzdEVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlzRm9jdXNlT25GaXJzdEVycm9yID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICB9XG4gICAgaWYgKCFwYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmVzID0gcGFnZS5oYXNFcnJvcnModHJ1ZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpO1xuICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZShwYWdlKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuaXNFbXB0eSB8fCAhcGFnZSkgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnNPblBhZ2UgPSBwYWdlLnF1ZXN0aW9ucztcbiAgICB2YXIgcXVlc3Rpb25zID0gbmV3IEFycmF5PFF1ZXN0aW9uPigpO1xuICAgIHZhciBlcnJvcnMgPSBuZXcgQXJyYXk8U3VydmV5RXJyb3I+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnNPblBhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zT25QYWdlW2ldO1xuICAgICAgaWYgKHEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcS5lcnJvcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChxLmVycm9yc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbnM6IHF1ZXN0aW9ucyxcbiAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgcGFnZTogcGFnZSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gYSBwcmV2aW91cyBwYWdlLiBJZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlLCBgcHJldlBhZ2VgIHJldHVybnMgYGZhbHNlYC4gYHByZXZQYWdlYCBkb2VzIG5vdCBwZXJmb3JtIGFueSBjaGVja3MsIHJlcXVpcmVkIHF1ZXN0aW9ucyBjYW4gYmUgZW1wdHkuXG4gICAqIEBzZWUgaXNGaXJzdFBhZ2VcbiAgICovXG4gIHB1YmxpYyBwcmV2UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uQnV0dG9uKCk7XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB2UGFnZXNbaW5kZXggLSAxXTtcbiAgfVxuICAvKipcbiAgICogQ29tcGxldGVzIHRoZSBzdXJ2ZXksIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3Qgb25lLiBJdCByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIGxhc3QgcGFnZSBoYXMgZXJyb3JzLlxuICAgKiBJZiB0aGUgbGFzdCBwYWdlIGhhcyBubyBlcnJvcnMsIGBjb21wbGV0ZUxhc3RQYWdlYCBjYWxscyBgZG9Db21wbGV0ZWAgYW5kIHJldHVybnMgYHRydWVgLlxuICAgKiBAc2VlIGlzQ3VycmVudFBhZ2VIYXNFcnJvcnNcbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIGRvQ29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBjb21wbGV0ZUxhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZSh0cnVlKTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLmNhbmNlbFByZXZpZXcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGlzTmF2aWdhdGlvbkJ1dHRvblByZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG5hdmlnYXRpb25Nb3VzZURvd24oKTogYm9vbGVhbiB7XG4gICAgdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpIHtcbiAgICB0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2hvdyBwcmV2aWV3IGZvciB0aGUgc3VydmV5LiBHbyB0byB0aGUgXCJwcmV2aWV3XCIgc3RhdGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgY2FuY2VsUHJldmlld1xuICAgKiBAc2VlIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgc2hvd1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5yZXNldE5hdmlnYXRpb25CdXR0b24oKTtcbiAgICBpZiAodGhpcy5oYXNFcnJvcnNPbk5hdmlnYXRlKHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2FuZWwgcHJldmlldyBhbmQgZ28gYmFjayB0byB0aGUgXCJydW5uaW5nXCIgc3RhdGUuXG4gICAqIEBwYXJhbSBjdXJQYWdlIC0gYSBuZXcgY3VycmVudCBwYWdlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVyZmluZWQgdGhlbiB0aGUgbGFzdCBwYWdlIGJlY29tZXMgY3VycmVudC5cbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGNhbmNlbFByZXZpZXcoY3VyUGFnZTogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm47XG4gICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ID0gZmFsc2U7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGN1clBhZ2UpICYmIHRoaXMudmlzaWJsZVBhZ2VDb3VudCA+IDApIHtcbiAgICAgIGN1clBhZ2UgPSB0aGlzLnZpc2libGVQYWdlQ291bnQgLSAxO1xuICAgIH1cbiAgICBpZiAoY3VyUGFnZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGN1clBhZ2U7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3QnlQYWdlKHBhbmVsOiBJUGFuZWwpOiBhbnkge1xuICAgIHZhciBwYWdlSW5kZXggPSB0aGlzLmdldFZpc2libGVQYWdlSW5kZXhCeVJvb3RQYW5lbChwYW5lbCk7XG4gICAgdGhpcy5jYW5jZWxQcmV2aWV3KHBhZ2VJbmRleCA+IC0xID8gcGFnZUluZGV4IDogdW5kZWZpbmVkKTtcbiAgfVxuICBwcml2YXRlIGdldFZpc2libGVQYWdlSW5kZXhCeVJvb3RQYW5lbChwYW5lbDogSVBhbmVsKTogbnVtYmVyIHtcbiAgICBpZiAoIXBhbmVsKSByZXR1cm4gLTE7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMuZ2V0QWxsUGFuZWxzKCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBhbmVsc1tpXS5wYXJlbnQgPT09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkge1xuICAgICAgICBpZiAocGFuZWxzW2ldID09IHBhbmVsKSByZXR1cm4gaW5kZXg7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9DdXJyZW50UGFnZUNvbXBsZXRlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIGlmICh0aGlzLmhhc0Vycm9yc09uTmF2aWdhdGUoZG9Db21wbGV0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGUpO1xuICB9XG4gIHByaXZhdGUgZG9DdXJyZW50UGFnZUNvbXBsZXRlQ29yZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZG9Db21wbGV0ZSkge1xuICAgICAgdGhpcy5kb0NvbXBsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9OZXh0UGFnZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogT2Jzb2xldGUgdXNlIHRoZSBgcXVlc3Rpb25zT25QYWdlTW9kZWAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICogQHNlZSBxdWVzdGlvbnNPblBhZ2VNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzU2luZ2xlUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNPblBhZ2VNb2RlID09IFwic2luZ2xlUGFnZVwiO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNTaW5nbGVQYWdlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9IHZhbCA/IFwic2luZ2xlUGFnZVwiIDogXCJzdGFuZGFyZFwiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHN1cnZleSBjb21iaW5lcyBxdWVzdGlvbnMsIHBhbmVscywgYW5kIHBhZ2VzLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgc2luZ2xlUGFnZWAgLSBjb21iaW5lIGFsbCBzdXJ2ZXkgcGFnZXMgaW4gYSBzaW5nbGUgcGFnZS4gUGFnZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gcGFuZWxzLlxuICAgKiAtIGBxdWVzdGlvblBlclBhZ2VgIC0gc2hvdyBvbmUgcXVlc3Rpb24gcGVyIHBhZ2UuIFN1cnZleSB3aWxsIGNyZWF0ZSBhIHNlcGFyYXRlIHBhZ2UgZm9yIGV2ZXJ5IHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPblBhZ2VNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09uUGFnZU1vZGVcIiwgXCJzdGFuZGFyZFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uc09uUGFnZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBzdXJ2ZXkgcGFnZSBpcyBhIHN0YXJ0IHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIGB0cnVlYCwgdG8gbWFrZSB0aGUgZmlyc3QgcGFnZSBhIHN0YXJ0aW5nIHBhZ2UuXG4gICAqIEFuIGVuZCB1c2VyIGNhbm5vdCBuYXZpZ2F0ZSB0byB0aGUgc3RhcnQgcGFnZSBhbmQgdGhlIHN0YXJ0IHBhZ2UgZG9lcyBub3QgYWZmZWN0IGEgc3VydmV5IHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsIHZhbCk7XG4gIH1cbiAgaXNQYWdlU3RhcnRlZChwYWdlOiBJUGFnZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgJiYgdGhpcy5wYWdlc1swXSA9PT0gcGFnZVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd0FsbFF1ZXN0aW9uc1wiIG9yIFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCIgdG8gcHJldmlldyByZXN1bHRzIHRvIGEgdXNlciBiZWZvcmUgaGUvc2hlIGNvbXBsZXRlcyB0aGUgc3VydmV5LlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIiwgXCJub1ByZXZpZXdcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHZhciBwcmV2aWV3ID0gdGhpcy5zaG93UHJldmlld0JlZm9yZUNvbXBsZXRlO1xuICAgIHJldHVybiBwcmV2aWV3ID09IFwic2hvd0FsbFF1ZXN0aW9uc1wiIHx8IHByZXZpZXcgPT0gXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkO1xuICAgIHRoaXMucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMucGFnZXNbMF0sICF0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCk7XG4gIH1cbiAgcnVubmluZ1BhZ2VzOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIG9uU2hvd2luZ1ByZXZpZXdDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHtcbiAgICAgIHRoaXMucnVubmluZ1BhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICB0aGlzLnNldHVwUGFnZXNGb3JQYWdlTW9kZXModHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJ1bm5pbmdQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLnJ1bm5pbmdQYWdlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmdQYWdlcyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQWxsRWxlbWVudHNWaXNpYmlsaXR5KHRoaXMucGFnZXMpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlTm8gPSAwO1xuICB9XG4gIG9yaWdpb25hbFBhZ2VzOiBhbnkgPSBudWxsO1xuICBwcm90ZWN0ZWQgb25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPT0gXCJzdGFuZGFyZFwiIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICBpZiAodGhpcy5vcmlnaW9uYWxQYWdlcykge1xuICAgICAgICB0aGlzLnJlc3RvcmVPcmlnaW9uYWxQYWdlcyh0aGlzLm9yaWdpb25hbFBhZ2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3JpZ2lvbmFsUGFnZXMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9sZFZhbHVlIHx8IG9sZFZhbHVlID09IFwic3RhbmRhcmRcIikge1xuICAgICAgICB0aGlzLm9yaWdpb25hbFBhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldHVwUGFnZXNGb3JQYWdlTW9kZXModGhpcy5pc1NpbmdsZVBhZ2UpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXN0b3JlT3JpZ2lvbmFsUGFnZXMob3JpZ2luYWxQYWdlczogQXJyYXk8UGFnZU1vZGVsPikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChvcmlnaW5hbFBhZ2VzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXR1cFBhZ2VzRm9yUGFnZU1vZGVzKGlzU2luZ2xlUGFnZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNDbGVhcigpO1xuICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQgPyAxIDogMDtcbiAgICBzdXBlci5zdGFydExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHZhciBuZXdQYWdlcyA9IHRoaXMuY3JlYXRlUGFnZXNGb3JRdWVzdGlvbk9uUGFnZU1vZGUoXG4gICAgICBpc1NpbmdsZVBhZ2UsXG4gICAgICBzdGFydEluZGV4XG4gICAgKTtcbiAgICB2YXIgZGVsZXRlZExlbiA9IHRoaXMucGFnZXMubGVuZ3RoIC0gc3RhcnRJbmRleDtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShzdGFydEluZGV4LCBkZWxldGVkTGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZXNbaV0pO1xuICAgIH1cbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdQYWdlc1tpXS5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICAgIG5ld1BhZ2VzW2ldLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgfVxuICAgIHRoaXMuZG9FbGVtZW50c09uTG9hZCgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlUGFnZXNGb3JRdWVzdGlvbk9uUGFnZU1vZGUoXG4gICAgaXNTaW5nbGVQYWdlOiBib29sZWFuLFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlclxuICApOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICBpZiAoaXNTaW5nbGVQYWdlKSB7XG4gICAgICByZXR1cm4gW3RoaXMuY3JlYXRlU2luZ2xlUGFnZShzdGFydEluZGV4KV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVBhZ2VzRm9yRXZlcnlRdWVzdGlvbihzdGFydEluZGV4KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVNpbmdsZVBhZ2Uoc3RhcnRJbmRleDogbnVtYmVyKTogUGFnZU1vZGVsIHtcbiAgICB2YXIgc2luZ2xlID0gdGhpcy5jcmVhdGVOZXdQYWdlKFwiYWxsXCIpO1xuICAgIHNpbmdsZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgdmFyIHBhbmVsID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICAgICAgc2luZ2xlLmFkZFBhbmVsKHBhbmVsKTtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocGFnZSk7XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICAgIGlmICghdGhpcy5zaG93UGFnZVRpdGxlcykge1xuICAgICAgICBwYW5lbC50aXRsZSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGU7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleDogbnVtYmVyKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UGFnZU1vZGVsPiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9yaWdpbmFsUGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAvLyBJbml0aWFsaXplIHJhbmRvbWl6YXRpb25cbiAgICAgIG9yaWdpbmFsUGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3JpZ2luYWxQYWdlLmVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSBvcmlnaW5hbFBhZ2UuZWxlbWVudHNbal07XG4gICAgICAgIHZhciBlbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbEVsZW1lbnQuZ2V0VHlwZSgpKTtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgICAgICAvL0Rlc2VyaWFsaXplIHBhZ2UgcHJvcGVydGllcyBvbmx5LCBleGNsdWRpbmcgZWxlbWVudHNcbiAgICAgICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIHBhZ2VKc29uID0ganNvbk9iai50b0pzb25PYmplY3Qob3JpZ2luYWxQYWdlKTtcblxuICAgICAgICB2YXIgcGFnZSA9IDxQYWdlTW9kZWw+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbFBhZ2UuZ2V0VHlwZSgpKTtcbiAgICAgICAgcGFnZS5mcm9tSlNPTihwYWdlSnNvbik7XG4gICAgICAgIHBhZ2UubmFtZSA9IFwicGFnZVwiICsgKHJlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICByZXMucHVzaChwYWdlKTtcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChvcmlnaW5hbEVsZW1lbnQpO1xuICAgICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIGVsZW1lbnQpO1xuICAgICAgICBwYWdlLmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBvbmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IDA7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcmV2QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlIHx8ICF0aGlzLnNob3dQcmV2QnV0dG9uKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLnZpc2libGVQYWdlc1t0aGlzLmN1cnJlbnRQYWdlTm8gLSAxXTtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpIDw9IDA7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgcmV0dXJuIHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpID09IHZQYWdlcy5sZW5ndGggLSAxO1xuICB9XG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIHN1cnZleS5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gICAqXG4gICAqIC0gd3JpdGVzIGNvb2tpZSBpZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IGlzIG5vdCBlbXB0eVxuICAgKiAtIHNldHMgdGhlIHN1cnZleSBpbnRvIGBjb21wbGV0ZWRgIHN0YXRlXG4gICAqIC0gZmlyZXMgdGhlIGBvbkNvbXBsZXRlYCBldmVudFxuICAgKiAtIGNhbGxzIGBzZW5kUmVzdWx0YCBmdW5jdGlvbi5cbiAgICpcbiAgICogQ2FsbGluZyB0aGUgYGRvQ29tcGxldGVgIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24sIHVubGlrZSB0aGUgYGNvbXBsZXRlTGFzdFBhZ2VgIGZ1bmN0aW9uLlxuICAgKiBJdCBjYWxscyBgbmF2aWdhdGVUb1VybGAgYWZ0ZXIgY2FsbGluZyBgb25Db21wbGV0ZWAgZXZlbnQuXG4gICAqIEluIGNhc2UgY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ2AgY2FsbGJhY2sgaW4gdGhlIGBvbkNvbXBsZXRlYCBldmVudCwgYG5hdmlnYXRlVG9VcmxgIGlzIHVzZWQgb24gY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3NgIGNhbGxiYWNrLlxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBkb0NvbXBsZXRlKGlzQ29tcGxldGVPblRyaWdnZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHZhciBvbkNvbXBsZXRpbmdPcHRpb25zID0ge1xuICAgICAgYWxsb3dDb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGlzQ29tcGxldGVPblRyaWdnZXI6IGlzQ29tcGxldGVPblRyaWdnZXIsXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGluZy5maXJlKHRoaXMsIG9uQ29tcGxldGluZ09wdGlvbnMpO1xuICAgIGlmICghb25Db21wbGV0aW5nT3B0aW9ucy5hbGxvd0NvbXBsZXRlKSByZXR1cm47XG4gICAgbGV0IHByZXZpb3VzQ29va2llID0gdGhpcy5oYXNDb29raWU7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB0aGlzLnNldENvbXBsZXRlZCgpO1xuICAgIHRoaXMuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICB0aGlzLnNldENvb2tpZSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc2F2aW5nRGF0YVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB2YXIgb25Db21wbGV0ZU9wdGlvbnMgPSB7XG4gICAgICBpc0NvbXBsZXRlT25UcmlnZ2VyOiBpc0NvbXBsZXRlT25UcmlnZ2VyLFxuICAgICAgc2hvd0RhdGFTYXZpbmc6IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2F2aW5nRGF0YVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwic2F2aW5nXCIsIHRleHQpO1xuICAgICAgfSxcbiAgICAgIHNob3dEYXRhU2F2aW5nRXJyb3I6IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcImVycm9yXCIsIHRleHQpO1xuICAgICAgfSxcbiAgICAgIHNob3dEYXRhU2F2aW5nU3VjY2VzczogZnVuY3Rpb24gKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwic3VjY2Vzc1wiLCB0ZXh0KTtcbiAgICAgICAgc2VsZi5uYXZpZ2F0ZVRvKCk7XG4gICAgICB9LFxuICAgICAgc2hvd0RhdGFTYXZpbmdDbGVhcjogZnVuY3Rpb24gKHRleHQ6IHN0cmluZykge1xuICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwiXCIsIFwiXCIpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMub25Db21wbGV0ZS5maXJlKHRoaXMsIG9uQ29tcGxldGVPcHRpb25zKTtcbiAgICBpZiAoIXByZXZpb3VzQ29va2llICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICB0aGlzLnNlbmRSZXN1bHQoKTtcbiAgICB9XG4gICAgaWYgKCFzYXZpbmdEYXRhU3RhcnRlZCkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHN1cnZleS4gQ2hhbmdlcyB0aGUgc3VydmV5IG1vZGUgZnJvbSBcInN0YXJ0aW5nXCIgdG8gXCJydW5uaW5nXCIuIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHN1cnZleSBoYXMgYSBzdGFydCBwYWdlLCBvdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuXG4gICAqIEBzZWUgZmlyc3RQYWdlSXNTdGFydGVkXG4gICAqL1xuICBwdWJsaWMgc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHRoaXMuc3RhcnRlZFBhZ2UsIHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0ZWRTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRUaW1lckZyb21VSSgpO1xuICAgIHRoaXMub25TdGFydGVkLmZpcmUodGhpcywge30pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIHF1ZXN0aW9uIHZhbHVlcyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSB2YWxpZGF0aW5nIG9uIHRoZSBzZXJ2ZXIgYXQgdGhlIGN1cnJlbnQgbW9tZW50LlxuICAgKiBAc2VlIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWYWxpZGF0aW5nT25TZXJ2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmFsaWRhdGluZ09uU2VydmVyXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldElzVmFsaWRhdGluZ09uU2VydmVyKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy5pc1ZhbGlkYXRpbmdPblNlcnZlcikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmFsaWRhdGluZ09uU2VydmVyXCIsIHZhbCk7XG4gICAgdGhpcy5vbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvbklzVmFsaWRhdGluZ09uU2VydmVyQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBkb1NlcnZlclZhbGlkYXRpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyB8fFxuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmlzRW1wdHlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZGF0YTogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgICAgIGVycm9yczoge30sXG4gICAgICBzdXJ2ZXk6IHRoaXMsXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VycmVudFBhZ2UucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmN1cnJlbnRQYWdlLnF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICghcXVlc3Rpb24udmlzaWJsZSkgY29udGludWU7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKVxuICAgICAgICBvcHRpb25zLmRhdGFbcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIodHJ1ZSk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIoZmFsc2UpO1xuICAgIGlmICghb3B0aW9ucyAmJiAhb3B0aW9ucy5zdXJ2ZXkpIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IG9wdGlvbnMuc3VydmV5O1xuICAgIHZhciBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gc2VsZi5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uW1wiZXJyb3JzXCJdKSB7XG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICBxdWVzdGlvbltcImFkZEVycm9yXCJdKG5ldyBDdXN0b21FcnJvcihvcHRpb25zLmVycm9yc1tuYW1lXSwgdGhpcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICBpZiAoc2VsZi5pc0xhc3RQYWdlKSBzZWxmLmRvQ29tcGxldGUoKTtcbiAgICAgIGVsc2Ugc2VsZi5kb05leHRQYWdlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkb05leHRQYWdlKCkge1xuICAgIHRoaXMuY2hlY2tPblBhZ2VUcmlnZ2VycygpO1xuICAgIGlmICghdGhpcy5pc0NvbXBsZXRlZCkge1xuICAgICAgaWYgKHRoaXMuc2VuZFJlc3VsdE9uUGFnZU5leHQpIHtcbiAgICAgICAgdGhpcy5zZW5kUmVzdWx0KHRoaXMuc3VydmV5UG9zdElkLCB0aGlzLmNsaWVudElkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvQ29tcGxldGUodHJ1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEhUTUwgY29udGVudCBmb3IgdGhlIGNvbXBsZXRlIHBhZ2UuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGh0bWwgPSB0aGlzLnJlbmRlcmVkQ29tcGxldGVkSHRtbDtcbiAgICBpZiAoaHRtbCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwoaHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3duIHRvIGEgdXNlciB0aGF0IGhhZCBjb21wbGV0ZWQgdGhlIHN1cnZleSBiZWZvcmUuXG4gICAqIEBzZWUgY29tcGxldGVkSHRtbFxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbXBsZXRlZEJlZm9yZUh0bWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMuY29tcGxldGVkQmVmb3JlSHRtbCk7XG4gICAgfVxuICAgIHJldHVybiBcIjxoMz5cIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwiY29tcGxldGluZ1N1cnZleUJlZm9yZVwiKSArIFwiPC9oMz5cIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50LCB0aGF0IGlzIHNob3dzIHdoZW4gYSBzdXJ2ZXkgbG9hZHMgdGhlIHN1cnZleSBKU09OLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRMb2FkaW5nSHRtbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvYWRpbmdIdG1sKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbCh0aGlzLmxvYWRpbmdIdG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJsb2FkaW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09PSBcInF1ZXN0aW9uc1wiKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNXaXRoSW5wdXQoKTtcbiAgICAgIHZhciBhbnN3ZXJlZFF1ZXN0aW9uc0NvdW50ID0gcXVlc3Rpb25zLnJlZHVjZShcbiAgICAgICAgKGE6IG51bWJlciwgYjogUXVlc3Rpb24pID0+IGEgKyAoYi5pc0VtcHR5KCkgPyAwIDogMSksXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGFuc3dlcmVkUXVlc3Rpb25zQ291bnQsXG4gICAgICAgIHF1ZXN0aW9ucy5sZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2dyZXNzQmFyVHlwZSA9PT0gXCJjb3JyZWN0UXVlc3Rpb25zXCIpIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc1dpdGhJbnB1dCgpO1xuICAgICAgdmFyIGNvcnJlY3RBbnN3ZXJzQ291bnQgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGNvcnJlY3RBbnN3ZXJzQ291bnQsXG4gICAgICAgIHF1ZXN0aW9ucy5sZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB2UGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKSArIDE7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwicHJvZ3Jlc3NUZXh0XCIpW1wiZm9ybWF0XCJdKGluZGV4LCB2UGFnZXMubGVuZ3RoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXJTdXJ2ZXkoaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclN1cnZleS5maXJlKHRoaXMsIHtcbiAgICAgIHN1cnZleTogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMocXVlc3Rpb246IElRdWVzdGlvbiwgY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlUGFuZWxDc3NDbGFzc2VzKHBhbmVsOiBJUGFuZWwsIGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHRoaXMub25VcGRhdGVQYW5lbENzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZVBhZ2VDc3NDbGFzc2VzKHBhZ2U6IElQYWdlLCBjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlUGFnZUNzc0NsYXNzZXMuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclBhZ2UoaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmlzRW1wdHkpIHJldHVybjtcbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmZpcmUodGhpcywge1xuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlckhlYWRlcihodG1sRWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlckhlYWRlci5pc0VtcHR5KSByZXR1cm47XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVySGVhZGVyLmZpcmUodGhpcywge1xuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dChxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQuaXNFbXB0eSkgcmV0dXJuO1xuICAgIGxldCBpZCA9ICg8UXVlc3Rpb24+cXVlc3Rpb24pLmlucHV0SWQ7XG4gICAgaWYgKCEhaWQgJiYgaHRtbEVsZW1lbnQuaWQgIT09IGlkICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbGV0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQgPSBlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclBhbmVsKHBhbmVsOiBJRWxlbWVudCwgaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhbmVsLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIG1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub25NYXRyaXhCZWZvcmVSb3dBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeFJvd0FkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvdzogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeFJvd0FkZGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24sIHJvdzogcm93IH0pO1xuICB9XG4gIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXJcbiAgKTogSVF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUodmFsdWVOYW1lKTtcbiAgICBpZiAoIXF1ZXN0aW9ucykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVzID0gcXVlc3Rpb25zW2ldLmdldFF1ZXN0aW9uRnJvbUFycmF5KG5hbWUsIGluZGV4KTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbWF0cml4Um93UmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCByb3dJbmRleDogbnVtYmVyLCByb3c6IGFueSkge1xuICAgIHRoaXMub25NYXRyaXhSb3dSZW1vdmVkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgfSk7XG4gIH1cbiAgbWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHJvdzogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgICBhbGxvdzogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMub25NYXRyaXhBbGxvd1JlbW92ZVJvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIG1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbENyZWF0ZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhBZnRlckNlbGxSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25NYXRyaXhBZnRlckNlbGxSZW5kZXIuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsaWRhdGUocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KTogU3VydmV5RXJyb3Ige1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbGlkYXRlLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIGR5bmFtaWNQYW5lbEFkZGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcbiAgICB0aGlzLm9uRHluYW1pY1BhbmVsQWRkZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiB9KTtcbiAgfVxuICBkeW5hbWljUGFuZWxSZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHBhbmVsSW5kZXg6IG51bWJlciwgcGFuZWw6IElQYW5lbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSAhIXBhbmVsID8gKDxQYW5lbE1vZGVsQmFzZT5wYW5lbCkucXVlc3Rpb25zIDogW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbFJlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBwYW5lbEluZGV4OiBwYW5lbEluZGV4LFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgIH0pO1xuICB9XG4gIGR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgICBvcHRpb25zLmFsbG93ID0gdHJ1ZTtcbiAgICB0aGlzLm9uRHJhZ0Ryb3BBbGxvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG5cbiAgc2Nyb2xsRWxlbWVudFRvVG9wKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFnZTogSVBhZ2UsXG4gICAgaWQ6IHN0cmluZ1xuICApOiBhbnkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICBlbGVtZW50SWQ6IGlkLFxuICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMub25TY3JvbGxpbmdFbGVtZW50VG9Ub3AuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMuY2FuY2VsKSB7XG4gICAgICBTdXJ2ZXlFbGVtZW50LlNjcm9sbEVsZW1lbnRUb1RvcChvcHRpb25zLmVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgYSBmaWxlIHRvIHNlcnZlci5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIGEgZmlsZSBxdWVzdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBmaWxlIGFuIHVwbG9hZGVkIGZpbGVcbiAgICogQHBhcmFtIHN0b3JlRGF0YUFzVGV4dCBzZXQgaXQgdG8gYHRydWVgIHRvIGVuY29kZSBmaWxlIGNvbnRlbnQgaW50byB0aGUgc3VydmV5IHJlc3VsdHNcbiAgICogQHBhcmFtIHVwbG9hZGluZ0NhbGxiYWNrIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9uIHVwbG9hZGluZyB0aGUgZmlsZVxuICAgKi9cbiAgcHVibGljIHVwbG9hZEZpbGVzKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZpbGVzOiBGaWxlW10sXG4gICAgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKSB7XG4gICAgaWYgKHRoaXMub25VcGxvYWRGaWxlcy5pc0VtcHR5KSB7XG4gICAgICB1cGxvYWRpbmdDYWxsYmFjayhcImVycm9yXCIsIGZpbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblVwbG9hZEZpbGVzLmZpcmUodGhpcywge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGZpbGVzOiBmaWxlcyB8fCBbXSxcbiAgICAgICAgY2FsbGJhY2s6IHVwbG9hZGluZ0NhbGxiYWNrLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgdGhpcy51cGxvYWRGaWxlc0NvcmUobmFtZSwgZmlsZXMsIHVwbG9hZGluZ0NhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERvd25sb2FkcyBhIGZpbGUgZnJvbSBzZXJ2ZXJcbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBmaWxlVmFsdWUgYSBzaW5nbGUgZmlsZSBxdWVzdGlvbiB2YWx1ZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgYSBjYWxsIGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMgb24gZG93bmxvYWRpbmcgdGhlIGZpbGUgYW5kIHRoZSBkb3dubG9hZGVkIGZpbGUgY29udGVudFxuICAgKi9cbiAgcHVibGljIGRvd25sb2FkRmlsZShcbiAgICBxdWVzdGlvbk5hbWU6IHN0cmluZyxcbiAgICBmaWxlVmFsdWU6IGFueSxcbiAgICBjYWxsYmFjazogKHN0YXR1czogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueVxuICApIHtcbiAgICBpZiAodGhpcy5vbkRvd25sb2FkRmlsZS5pc0VtcHR5KSB7XG4gICAgICAhIWNhbGxiYWNrICYmIGNhbGxiYWNrKFwic3VjY2Vzc1wiLCBmaWxlVmFsdWUuY29udGVudCB8fCBmaWxlVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9uRG93bmxvYWRGaWxlLmZpcmUodGhpcywge1xuICAgICAgbmFtZTogcXVlc3Rpb25OYW1lLFxuICAgICAgY29udGVudDogZmlsZVZhbHVlLmNvbnRlbnQgfHwgZmlsZVZhbHVlLFxuICAgICAgZmlsZVZhbHVlOiBmaWxlVmFsdWUsXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBmaWxlcyBmcm9tIHNlcnZlci5cbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSBhIGZpbGUgcXVlc3Rpb24gdmFsdWVcbiAgICogQHBhcmFtIGNhbGxiYWNrIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9mIHRoZSBjbGVhcmluZyBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBjbGVhckZpbGVzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKSB7XG4gICAgaWYgKHRoaXMub25DbGVhckZpbGVzLmlzRW1wdHkpIHtcbiAgICAgICEhY2FsbGJhY2sgJiYgY2FsbGJhY2soXCJzdWNjZXNzXCIsIHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsZWFyRmlsZXMuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgY2hvaWNlczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBzZXJ2ZXJSZXN1bHQ6IGFueVxuICApOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGNob2ljZXM6IGNob2ljZXMsXG4gICAgICBzZXJ2ZXJSZXN1bHQ6IHNlcnZlclJlc3VsdCxcbiAgICB9O1xuICAgIHRoaXMub25Mb2FkQ2hvaWNlc0Zyb21TZXJ2ZXIuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5jaG9pY2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleVNlcnZpY2UoKTogZHhTdXJ2ZXlTZXJ2aWNlIHtcbiAgICByZXR1cm4gbmV3IGR4U3VydmV5U2VydmljZSgpO1xuICB9XG4gIHByb3RlY3RlZCB1cGxvYWRGaWxlc0NvcmUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZpbGVzOiBGaWxlW10sXG4gICAgdXBsb2FkaW5nQ2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKSB7XG4gICAgdmFyIHJlc3BvbnNlczogQXJyYXk8YW55PiA9IFtdO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaykgdXBsb2FkaW5nQ2FsbGJhY2soXCJ1cGxvYWRpbmdcIiwgZmlsZSk7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5zZW5kRmlsZShcbiAgICAgICAgdGhpcy5zdXJ2ZXlQb3N0SWQsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlcy5wdXNoKHsgY29udGVudDogcmVzcG9uc2UsIGZpbGU6IGZpbGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VzLmxlbmd0aCA9PT0gZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaykgdXBsb2FkaW5nQ2FsbGJhY2soXCJzdWNjZXNzXCIsIHJlc3BvbnNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1cGxvYWRpbmdDYWxsYmFjaylcbiAgICAgICAgICAgICAgdXBsb2FkaW5nQ2FsbGJhY2soXCJlcnJvclwiLCB7IHJlc3BvbnNlOiByZXNwb25zZSwgZmlsZTogZmlsZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0UGFnZShpbmRleDogbnVtYmVyKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlc1tpbmRleF07XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXhpc3RpbmcgcGFnZSB0byB0aGUgc3VydmV5LlxuICAgKiBAcGFyYW0gcGFnZSBhIG5ld2x5IGFkZGVkIHBhZ2VcbiAgICogQHNlZSBhZGROZXdQYWdlXG4gICAqL1xuICBwdWJsaWMgYWRkUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBpZiAocGFnZSA9PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5wYWdlcy5wdXNoKHBhZ2UpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwYWdlIGFuZCBhZGRzIGl0IHRvIGEgc3VydmV5LiBHZW5lcmF0ZXMgYSBuZXcgbmFtZSBpZiB0aGUgYG5hbWVgIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0gbmFtZSBhIHBhZ2UgbmFtZVxuICAgKiBAc2VlIGFkZFBhZ2VcbiAgICovXG4gIHB1YmxpYyBhZGROZXdQYWdlKG5hbWU6IHN0cmluZyA9IG51bGwpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3JlYXRlTmV3UGFnZShuYW1lKTtcbiAgICB0aGlzLmFkZFBhZ2UocGFnZSk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBwYWdlIGZyb20gYSBzdXJ2ZXkuXG4gICAqIEBwYXJhbSBwYWdlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IHBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmVcbiAgICAgIDogdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lcztcbiAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc1swXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIGJ5IGl0cyB2YWx1ZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZU5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKiBAc2VlIFF1ZXN0aW9uLnZhbHVlTmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUodmFsdWVOYW1lLCBjYXNlSW5zZW5zaXRpdmUpO1xuICAgIHJldHVybiAhIXJlcyA/IHJlc1swXSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgaGFzaDogSGFzaFRhYmxlPGFueT4gPSAhIWNhc2VJbnNlbnNpdGl2ZVxuICAgICAgPyB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZVxuICAgICAgOiB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXM7XG4gICAgdmFyIHJlcyA9IGhhc2hbdmFsdWVOYW1lXTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgcXVlc3Rpb25zIGJ5IHRoZWlyIG5hbWVzLlxuICAgKiBAcGFyYW0gbmFtZXMgYW4gYXJyYXkgb2YgcXVlc3Rpb24gbmFtZXNcbiAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uc0J5TmFtZXMoXG4gICAgbmFtZXM6IHN0cmluZ1tdLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElRdWVzdGlvbltdIHtcbiAgICB2YXIgcmVzdWx0OiBJUXVlc3Rpb25bXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZXNbaV0sIGNhc2VJbnNlbnNpdGl2ZSk7XG4gICAgICBpZiAocXVlc3Rpb24pIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2Ugb24gd2hpY2ggYW4gZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpIGlzIHBsYWNlZC5cbiAgICogQHBhcmFtIGVsZW1lbnQgUXVlc3Rpb24gb3IgUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogUGFnZU1vZGVsIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2VzW2ldO1xuICAgICAgaWYgKHBhZ2UuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gcGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIG9uIHdoaWNoIGEgcXVlc3Rpb24gaXMgbG9jYXRlZC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZUJ5UXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYWdlIGJ5IGl0J3MgbmFtZS5cbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFBhZ2VNb2RlbCB7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMucGFnZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwYWdlcyBieSB0aGVpciBuYW1lcy5cbiAgICogQHBhcmFtIG5hbWVzIGEgbGlzdCBvZiBwYWdlIG5hbWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFnZXNCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSk6IFBhZ2VNb2RlbFtdIHtcbiAgICB2YXIgcmVzdWx0OiBQYWdlTW9kZWxbXSA9IFtdO1xuICAgIGlmICghbmFtZXMpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIW5hbWVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5nZXRQYWdlQnlOYW1lKG5hbWVzW2ldKTtcbiAgICAgIGlmIChwYWdlKSByZXN1bHQucHVzaChwYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHF1ZXN0aW9ucyBpbiBhIHN1cnZleS5cbiAgICogQHBhcmFtIHZpc2libGVPbmx5IHNldCBpdCBgdHJ1ZWAsIGlmIHlvdSB3YW50IHRvIGdldCBvbmx5IHZpc2libGUgcXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsUXVlc3Rpb25zKFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxRdWVzdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdmlzaWJsZU9ubHksXG4gICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVpeiBxdWVzdGlvbnMuIEFsbCB2aXNpYmxlIHF1ZXN0aW9ucyB0aGF0IGhhcyBpbnB1dChzKSB3aWRnZXRzLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbkNvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0UXVpelF1ZXN0aW9ucygpOiBBcnJheTxJUXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElRdWVzdGlvbj4oKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaV0uaXNWaXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhZ2VzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBxID0gcXVlc3Rpb25zW2pdO1xuICAgICAgICBpZiAocS5xdWl6UXVlc3Rpb25Db3VudCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGFuZWwgYnkgaXRzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25CeU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbEJ5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVBhbmVsIHtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5nZXRBbGxQYW5lbHMoKTtcbiAgICBpZiAoY2FzZUluc2Vuc2l0aXZlKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbE5hbWUgPSBwYW5lbHNbaV0ubmFtZTtcbiAgICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHBhbmVsTmFtZSA9IHBhbmVsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHBhbmVsTmFtZSA9PSBuYW1lKSByZXR1cm4gcGFuZWxzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN1cnZleSdzIHBhbmVscy5cbiAgICovXG4gIHB1YmxpYyBnZXRBbGxQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXNbaV0uYWRkUGFuZWxzSW50b0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhZ2UobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlTW9kZWwobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHF1ZXN0aW9uT25WYWx1ZUNoYW5naW5nKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5vblZhbHVlQ2hhbmdpbmcuaXNFbXB0eSkgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgcXVlc3Rpb246IHRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZSh2YWx1ZU5hbWUpLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgb2xkVmFsdWU6IHRoaXMuZ2V0VmFsdWUodmFsdWVOYW1lKSxcbiAgICB9O1xuICAgIHRoaXMub25WYWx1ZUNoYW5naW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVF1ZXN0aW9uVmFsdWUodmFsdWVOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lQ29yZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghIXF1ZXN0aW9ucykge1xuICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHF1ZXN0aW9uc1tpXS52YWx1ZSwgbmV3VmFsdWUpKSBjb250aW51ZTtcbiAgICAgICAgcXVlc3Rpb25zW2ldLnVwZGF0ZVZhbHVlRnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCAmJlxuICAgICAgKHRoaXMuY2hlY2tFcnJvcnNNb2RlID09IFwib25WYWx1ZUNoYW5nZWRcIiB8fCBxdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIHZhciBvbGRFcnJvckNvdW50ID0gcXVlc3Rpb24uZXJyb3JzLmxlbmd0aDtcbiAgICAgIHF1ZXN0aW9uLmhhc0Vycm9ycyh0cnVlLCB7IGlzT25WYWx1ZUNoYW5nZWQ6IHRydWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgICEhcXVlc3Rpb24ucGFnZSAmJlxuICAgICAgICAob2xkRXJyb3JDb3VudCA+IDAgfHwgcXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5maXJlVmFsaWRhdGVkRXJyb3JzT25QYWdlKDxQYWdlTW9kZWw+cXVlc3Rpb24ucGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUodmFsdWVOYW1lKTtcbiAgICBpZiAoISFxdWVzdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICB0aGlzLmNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uKTtcbiAgICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICAgIG5hbWU6IHZhbHVlTmFtZSxcbiAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgbmFtZTogdmFsdWVOYW1lLFxuICAgICAgICBxdWVzdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQodmFsdWVOYW1lKTtcbiAgfVxuICBwcml2YXRlIG5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIikgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdXBkYXRlQWxsUXVlc3Rpb25zVmFsdWUoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+cXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIHZhbE5hbWUgPSBxLmdldFZhbHVlTmFtZSgpO1xuICAgICAgcS51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodGhpcy5nZXRWYWx1ZSh2YWxOYW1lKSk7XG4gICAgICBpZiAocS5yZXF1aXJlVXBkYXRlQ29tbWVudFZhbHVlKSB7XG4gICAgICAgIHEudXBkYXRlQ29tbWVudEZyb21TdXJ2ZXkodGhpcy5nZXRDb21tZW50KHZhbE5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWUocXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja09uUGFnZVRyaWdnZXJzKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKHRydWUpO1xuICAgIHZhciB2YWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBxdWVzdGlvbnNbaV07XG4gICAgICB2YXIgbmFtZSA9IHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpO1xuICAgICAgdmFsdWVzW25hbWVdID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHZhbHVlcywgdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVF1ZXN0aW9ucyhcbiAgICBpbmNsdWRlSW52c2libGU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIHZhciByZXN1bHQ6IEFycmF5PFF1ZXN0aW9uPiA9IFtdO1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiByZXN1bHQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcGFnZS5xdWVzdGlvbnNbaV07XG4gICAgICBpZiAoKCFpbmNsdWRlSW52c2libGUgJiYgIXF1ZXN0aW9uLnZpc2libGUpIHx8ICFxdWVzdGlvbi5uYW1lKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGlzVHJpZ2dlcklzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNoZWNrVHJpZ2dlcnMoa2V5OiBhbnksIGlzT25OZXh0UGFnZTogYm9vbGVhbikge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNDb21wbGV0ZWQgfHxcbiAgICAgIHRoaXMudHJpZ2dlcnMubGVuZ3RoID09IDAgfHxcbiAgICAgIHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nID0gdHJ1ZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy50cmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJzW2ldO1xuICAgICAgaWYgKHRyaWdnZXIuaXNPbk5leHRQYWdlID09IGlzT25OZXh0UGFnZSkge1xuICAgICAgICB0cmlnZ2VyLmNoZWNrRXhwcmVzc2lvbihrZXksIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBkb0VsZW1lbnRzT25Mb2FkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkIHx8IHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPT09IFwicHJvY2Vzc2luZ1wiKSByZXR1cm47XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5wYWdlcztcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB2YXIgb2xkQ3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXNbaV0ucmVzZXRDYWxjdWxhdGlvbigpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLmRvQ2FsY3VsYXRpb24oXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlcyxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXgpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tJZk5ld1BhZ2VzQmVjb21lVmlzaWJsZShvbGRDdXJyZW50UGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICB2YXIgbmV3Q3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIGlmIChuZXdDdXJyZW50UGFnZUluZGV4IDw9IG9sZEN1cnJlbnRQYWdlSW5kZXggKyAxKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IG9sZEN1cnJlbnRQYWdlSW5kZXggKyAxOyBpIDwgbmV3Q3VycmVudFBhZ2VJbmRleDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2VuZHMgYSBzdXJ2ZXkgcmVzdWx0IHRvIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHBhcmFtIHBvc3RJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBwb3N0SWRcbiAgICogQHBhcmFtIGNsaWVudElkIFR5cGljYWxseSBhIGN1c3RvbWVyIGUtbWFpbCBvciBhbiBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBpc1BhcnRpYWxDb21wbGV0ZWQgU2V0IGl0IHRvIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIG5vdCBjb21wbGV0ZWQgeWV0IGFuZCB0aGUgcmVzdWx0cyBhcmUgaW50ZXJtZWRpYXRlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqIEBzZWUgY2xpZW50SWRcbiAgICovXG4gIHB1YmxpYyBzZW5kUmVzdWx0KFxuICAgIHBvc3RJZDogc3RyaW5nID0gbnVsbCxcbiAgICBjbGllbnRJZDogc3RyaW5nID0gbnVsbCxcbiAgICBpc1BhcnRpYWxDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkgcmV0dXJuO1xuICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgJiYgdGhpcy5vblBhcnRpYWxTZW5kKSB7XG4gICAgICB0aGlzLm9uUGFydGlhbFNlbmQuZmlyZSh0aGlzLCBudWxsKTtcbiAgICB9XG5cbiAgICBpZiAoIXBvc3RJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgcG9zdElkID0gdGhpcy5zdXJ2ZXlQb3N0SWQ7XG4gICAgfVxuICAgIGlmICghcG9zdElkKSByZXR1cm47XG4gICAgaWYgKGNsaWVudElkKSB7XG4gICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgfVxuICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQgJiYgIXRoaXMuY2xpZW50SWQpIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuc3VydmV5U2hvd0RhdGFTYXZpbmcpIHtcbiAgICAgIHRoaXMuc2V0Q29tcGxldGVkU3RhdGUoXCJzYXZpbmdcIiwgXCJcIik7XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLnNlbmRSZXN1bHQoXG4gICAgICBwb3N0SWQsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBmdW5jdGlvbiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgcmVxdWVzdDogYW55KSB7XG4gICAgICAgIGlmIChzZWxmLnN1cnZleVNob3dEYXRhU2F2aW5nKSB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJzdWNjZXNzXCIsIFwiXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLnNldENvbXBsZXRlZFN0YXRlKFwiZXJyb3JcIiwgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYub25TZW5kUmVzdWx0LmZpcmUoc2VsZiwge1xuICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICBpc1BhcnRpYWxDb21wbGV0ZWRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBDYWxscyB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UgYW5kLCBvbiBjYWxsYmFjaywgZmlyZXMgdGhlIGBvbkdldFJlc3VsdGAgZXZlbnQgd2l0aCBhbGwgYW5zd2VycyB0aGF0IHlvdXIgdXNlcnMgbWFkZSBmb3IgYSBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHJlc3VsdElkIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIHJlc3VsdElkXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBxdWVzdGlvbiBuYW1lXG4gICAqIEBzZWUgb25HZXRSZXN1bHRcbiAgICovXG4gIHB1YmxpYyBnZXRSZXN1bHQocmVzdWx0SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmdldFJlc3VsdChyZXN1bHRJZCwgbmFtZSwgZnVuY3Rpb24gKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBhbnlbXSxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGRhdGFMaXN0OiBkYXRhTGlzdCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzdXJ2ZXkgSlNPTiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogSWYgYGNsaWVudElkYCBpcyBub3QgYG51bGxgIGFuZCBhIHVzZXIgaGFkIGNvbXBsZXRlZCBhIHN1cnZleSBiZWZvcmUsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gYGNvbXBsZXRlZGJlZm9yZWAgc3RhdGUuXG4gICAqIEBwYXJhbSBzdXJ2ZXlJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBzdXJ2ZXlJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgdXNlcnMnIGluZGVudGlmaWVyLCBmb3IgZXhhbXBsZSBhbiBlLW1haWwgb3IgYSB1bmlxdWUgY3VzdG9tZXIgaWQgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKFxuICAgIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVuZElkOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmIChzdXJ2ZXlJZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xuICAgIH1cbiAgICBpZiAoY2xpZW5kSWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbmRJZDtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgaWYgKGNsaWVuZElkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgICAgIHRoaXMuc3VydmV5SWQsXG4gICAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgICAgIGpzb246IHN0cmluZyxcbiAgICAgICAgICBpc0NvbXBsZXRlZDogc3RyaW5nLFxuICAgICAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc2VsZi5pc0NvbXBsZXRlZEJlZm9yZSA9IGlzQ29tcGxldGVkID09IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICBzZWxmLmxvYWRTdXJ2ZXlGcm9tU2VydmljZUpzb24oanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5sb2FkU3VydmV5KHRoaXMuc3VydmV5SWQsIGZ1bmN0aW9uIChcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICAgICkge1xuICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VKc29uKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIHRoaXMuZnJvbUpTT04oanNvbik7XG4gICAgdGhpcy5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKTtcbiAgICB0aGlzLm9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2UuZmlyZSh0aGlzLCB7fSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkge31cbiAgcHJvdGVjdGVkIG9uTG9hZFN1cnZleUZyb21TZXJ2aWNlKCkge31cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSW5kZXhlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCAhIXRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyh0aGlzLnNob3dQYWdlTnVtYmVycyk7XG4gICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uUGFnZVwiKSB7XG4gICAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmlzUGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblwiID8gMCA6IC0xO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluZGV4ICs9IHRoaXMucGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXMoc2hvd0luZGV4OiBib29sZWFuKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc1BhZ2VWaXNpYmxlID0gdGhpcy5wYWdlc1tpXS5pc1Zpc2libGU7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnZpc2libGVJbmRleCA9IGlzUGFnZVZpc2libGUgPyBpbmRleCsrIDogLTE7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm51bSA9XG4gICAgICAgIHNob3dJbmRleCAmJiBpc1BhZ2VWaXNpYmxlID8gdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggKyAxIDogLTE7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmcm9tSlNPTihqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICB0aGlzLmpzb25FcnJvcnMgPSBudWxsO1xuICAgIHZhciBqc29uQ29udmVydGVyID0gbmV3IEpzb25PYmplY3QoKTtcbiAgICBqc29uQ29udmVydGVyLnRvT2JqZWN0KGpzb24sIHRoaXMpO1xuICAgIGlmIChqc29uQ29udmVydGVyLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmpzb25FcnJvcnMgPSBqc29uQ29udmVydGVyLmVycm9ycztcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldEpzb25PYmplY3QoanNvbk9iajogYW55KSB7XG4gICAgdGhpcy5mcm9tSlNPTihqc29uT2JqKTtcbiAgfVxuICBwcml2YXRlIGlzRW5kTG9hZGluZ0Zyb21Kc29uOiBzdHJpbmcgPSBudWxsO1xuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9IFwicHJvY2Vzc2luZ1wiO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZDtcbiAgICB0aGlzLm9uUXVlc3Rpb25zT25QYWdlTW9kZUNoYW5nZWQoXCJzdGFuZGFyZFwiKTtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAodGhpcy5oYXNDb29raWUpIHtcbiAgICAgIHRoaXMuZG9Db21wbGV0ZSgpO1xuICAgIH1cbiAgICB0aGlzLmRvRWxlbWVudHNPbkxvYWQoKTtcbiAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gXCJjb25kaXRpb25zXCI7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChcIlwiKTtcbiAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQ3JlYXRpbmcoKSB7fVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpIHt9XG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5nZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlKHRleHRWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5pc0VtcHR5KSB7XG4gICAgICB2YXIgd2FzRW1wdHkgPSB0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5vblByb2Nlc3NUZXh0VmFsdWUuZmlyZSh0aGlzLCB0ZXh0VmFsdWUpO1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID1cbiAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzIHx8ICh3YXNFbXB0eSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlQ29yZSh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IHZvaWQge1xuICAgIHZhciBuYW1lID0gdGV4dFZhbHVlLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBpZiAoW1wibm9cIiwgXCJyZXF1aXJlXCIsIFwidGl0bGVcIl0uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicGFnZW5vXCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSBwYWdlICE9IG51bGwgPyB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHBhZ2UpICsgMSA6IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInBhZ2Vjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy52aXNpYmxlUGFnZUNvdW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJsb2NhbGVcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9ICEhdGhpcy5sb2NhbGVcbiAgICAgICAgPyB0aGlzLmxvY2FsZVxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJjb3JyZWN0ZWRhbnN3ZXJzXCIgfHwgbmFtZSA9PT0gXCJjb3JyZWN0ZWRhbnN3ZXJjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJpbmNvcnJlY3RlZGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImluY29ycmVjdGVkYW5zd2VyY291bnRcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbmNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLmdldFF1aXpRdWVzdGlvbkNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKG5hbWUsIHRoaXMuZGF0YSk7XG4gICAgdmFyIHZhcmlhYmxlID0gdGhpcy5nZXRWYXJpYWJsZShuYW1lKTtcbiAgICBpZiAodmFyaWFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHZhcmlhYmxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoISFmaXJzdE5hbWUpIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShmaXJzdE5hbWUsIHRydWUpO1xuICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIG5hbWUgPSBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSArIG5hbWUuc3Vic3RyKGZpcnN0TmFtZS5sZW5ndGgpO1xuICAgICAgbmFtZSA9IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgIHZhciB2YWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgdmFsdWVzW2ZpcnN0TmFtZV0gPSB0ZXh0VmFsdWUucmV0dXJuRGlzcGxheVZhbHVlXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGZhbHNlLCB1bmRlZmluZWQpXG4gICAgICAgIDogcXVlc3Rpb24udmFsdWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdmFsdWVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjbGVhclVudXNlZFZhbHVlcygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgIT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVRdWVzdGlvblZhbHVlcygpO1xuICAgIH1cbiAgfVxuICBoYXNWaXNpYmxlUXVlc3Rpb25CeVZhbHVlTmFtZSh2YWx1ZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lQ29yZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5pc1Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcXVlc3Rpb25Db3VudEJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUodmFsdWVOYW1lKTtcbiAgICByZXR1cm4gISFxdWVzdGlvbnMgPyBxdWVzdGlvbnMubGVuZ3RoIDogMDtcbiAgfVxuICBwcml2YXRlIGNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHZhcmlhYmxlIHZhbHVlLiBWYXJpYWJsZSwgdW5saWtlIHZhbHVlcywgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0gbmFtZSBBIHZhcmlhYmxlIG5hbWVcbiAgICogQHNlZSBTZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV07XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShyZXMpKSByZXR1cm4gcmVzO1xuICAgIGlmIChuYW1lLmluZGV4T2YoXCIuXCIpID4gLTEgfHwgbmFtZS5pbmRleE9mKFwiW1wiKSA+IC0xKSB7XG4gICAgICBpZiAobmV3IFByb2Nlc3NWYWx1ZSgpLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFyaWFibGVzSGFzaCkpXG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdGhpcy52YXJpYWJsZXNIYXNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogU2V0cyBhIHZhcmlhYmxlIHZhbHVlLiBWYXJpYWJsZSwgdW5saWtlIHZhbHVlcywgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0gbmFtZSBBIHZhcmlhYmxlIG5hbWVcbiAgICogQHBhcmFtIG5ld1ZhbHVlIEEgdmFyaWFibGUgbmV3IHZhbHVlXG4gICAqIEBzZWUgR2V0VmFyaWFibGVcbiAgICovXG4gIHB1YmxpYyBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQobmFtZSk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gIH1cbiAgLy9JU3VydmV5IGRhdGFcbiAgcHJvdGVjdGVkIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBIZWxwZXJzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpIGJ5IGEgcXVlc3Rpb24ncyBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBBIHF1ZXN0aW9uIG5hbWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBxdWVzdGlvbiB2YWx1ZSAoYW5zd2VyKS4gSXQgcnVucyBhbGwgdHJpZ2dlcnMgYW5kIGNvbmRpdGlvbnMgKGB2aXNpYmxlSWZgIHByb3BlcnRpZXMpLlxuICAgKlxuICAgKiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYGdvTmV4dFBhZ2VBdXRvbWF0aWNgIGlzIGB0cnVlYCBhbmQgYWxsIHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlIGFyZSBhbnN3ZXJlZCBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgQSBuZXcgcXVlc3Rpb24gdmFsdWVcbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgZ2V0VmFsdWVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJsZUlmXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJsZUlmXG4gICAqIEBzZWUgZ29OZXh0UGFnZUF1dG9tYXRpY1xuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdRdWVzdGlvblZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdmFyIG5ld1ZhbHVlID0gbmV3UXVlc3Rpb25WYWx1ZTtcbiAgICBpZiAoYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpXG4gICAgICBuZXdWYWx1ZSA9IHRoaXMucXVlc3Rpb25PblZhbHVlQ2hhbmdpbmcobmFtZSwgbmV3UXVlc3Rpb25WYWx1ZSk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRXF1YWwobmFtZSwgbmV3VmFsdWUpICYmXG4gICAgICB0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIG5ld1F1ZXN0aW9uVmFsdWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uVmFsdWUobmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChsb2NOb3RpZmljYXRpb24gPT09IHRydWUpIHJldHVybjtcbiAgICB2YXIgdHJpZ2dlcktleXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHRyaWdnZXJLZXlzW25hbWVdID0gbmV3VmFsdWU7XG4gICAgdGhpcy5jaGVja1RyaWdnZXJzKHRyaWdnZXJLZXlzLCBmYWxzZSk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgaWYgKGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkKVxuICAgICAgdGhpcy5ub3RpZnlRdWVzdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICBpZiAobG9jTm90aWZpY2F0aW9uICE9PSBcInRleHRcIikge1xuICAgICAgdGhpcy50cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzVmFsdWVFcXVhbChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiXCIgfHwgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsO1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgaWYgKG9sZFZhbHVlID09PSBcIlwiIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIG9sZFZhbHVlID0gbnVsbDtcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IG51bGwpIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBkb09uUGFnZUFkZGVkKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIHBhZ2Uuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBpZiAoIXBhZ2UubmFtZSkgcGFnZS5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUodGhpcy5wYWdlcywgXCJwYWdlXCIpO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhZ2UpO1xuICAgIHZhciBvcHRpb25zID0geyBwYWdlOiBwYWdlIH07XG4gICAgdGhpcy5vblBhZ2VBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgZ2VuZXJhdGVOZXdOYW1lKGVsZW1lbnRzOiBBcnJheTxhbnk+LCBiYXNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIga2V5czogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykga2V5c1tlbGVtZW50c1tpXVtcIm5hbWVcIl1dID0gdHJ1ZTtcbiAgICB2YXIgaW5kZXggPSAxO1xuICAgIHdoaWxlIChrZXlzW2Jhc2VOYW1lICsgaW5kZXhdKSBpbmRleCsrO1xuICAgIHJldHVybiBiYXNlTmFtZSArIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCB0cnlHb05leHRQYWdlQXV0b21hdGljKG5hbWU6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuZ29OZXh0UGFnZUF1dG9tYXRpYyB8fFxuICAgICAgIXRoaXMuY3VycmVudFBhZ2VcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPnRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKTtcbiAgICBpZiAoXG4gICAgICAhcXVlc3Rpb24gfHxcbiAgICAgICghIXF1ZXN0aW9uICYmXG4gICAgICAgICghcXVlc3Rpb24udmlzaWJsZSB8fCAhcXVlc3Rpb24uc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSkpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChxdWVzdGlvbi5oYXNFcnJvcnMoZmFsc2UpICYmICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUVycm9yKCkpIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucygpO1xuICAgIGlmIChxdWVzdGlvbnMuaW5kZXhPZihxdWVzdGlvbikgPCAwKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uaGFzSW5wdXQgJiYgcXVlc3Rpb25zW2ldLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tJc0N1cnJlbnRQYWdlSGFzRXJyb3JzKGZhbHNlKSkge1xuICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZ29OZXh0UGFnZUF1dG9tYXRpYyA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHRoaXMuYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpY1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50J3MgbmFtZS5cbiAgICogQHNlZSBzZXRDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGFbbmFtZSArIHRoaXMuY29tbWVudFByZWZpeF07XG4gICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBcIlwiO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgYSBjb21tZW50IHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSBBIGNvbW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIG5ld1ZhbHVlIEEgbmV3IGNvbW1lbnQgdmFsdWUuXG4gICAqIEBzZWUgZ2V0Q29tbWVudFxuICAgKi9cbiAgcHVibGljIHNldENvbW1lbnQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnkgPSBmYWxzZVxuICApIHtcbiAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IFwiXCI7XG4gICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy5nZXRDb21tZW50KG5hbWUpKSkgcmV0dXJuO1xuICAgIHZhciBjb21tZW50TmFtZSA9IG5hbWUgKyB0aGlzLmNvbW1lbnRQcmVmaXg7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgdGhpcy5kZWxldGVEYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBjb21tZW50TmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZUNvcmUobmFtZSk7XG4gICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxvY05vdGlmaWNhdGlvbiAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIG5hbWU6IGNvbW1lbnROYW1lLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUuIFR5cGljYWxseSBpdCBpcyBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xuICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gY2xlYXIgdmFsdWUgb24gZGlzYWJsZSBpdGVtcyBpbiBjaGVja2JveCwgZHJvcGRvd24gYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLlxuICAgKiBCeSBkZWZhdWx0LCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG9uIGRpc2FibGVkIHRoZSBjb3JyZXNwb25kZWQgaXRlbXMuIFRoaXMgcHJvcGVydHkgaXMgbm90IHBlcnNpc3RlZCBpbiBzdXJ2ZXkgSlNPTiBhbmQgeW91IGhhdmUgdG8gc2V0IGl0IGluIGNvZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwgdmFsKTtcbiAgfVxuICBxdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICB2aXNpYmxlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbiAmJlxuICAgICAgIXF1ZXN0aW9uLnZpc2libGUgJiZcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlblwiXG4gICAgKSB7XG4gICAgICBxdWVzdGlvbi5jbGVhclZhbHVlKCk7XG4gICAgfVxuICB9XG4gIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgcGFnZTogcGFnZSwgdmlzaWJsZTogbmV3VmFsdWUgfSk7XG4gIH1cbiAgcGFuZWxWaXNpYmlsaXR5Q2hhbmdlZChwYW5lbDogSVBhbmVsLCBuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUGFuZWxWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCB2aXNpYmxlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuICBxdWVzdGlvbkNyZWF0ZWQocXVlc3Rpb246IElRdWVzdGlvbik6IGFueSB7XG4gICAgdGhpcy5vblF1ZXN0aW9uQ3JlYXRlZC5maXJlKHRoaXMsIHsgcXVlc3Rpb246IHF1ZXN0aW9uIH0pO1xuICB9XG4gIHF1ZXN0aW9uQWRkZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhcmVudFBhbmVsOiBhbnksXG4gICAgcm9vdFBhbmVsOiBhbnlcbiAgKSB7XG4gICAgaWYgKCFxdWVzdGlvbi5uYW1lKSB7XG4gICAgICBxdWVzdGlvbi5uYW1lID0gdGhpcy5nZW5lcmF0ZU5ld05hbWUoXG4gICAgICAgIHRoaXMuZ2V0QWxsUXVlc3Rpb25zKGZhbHNlLCB0cnVlKSxcbiAgICAgICAgXCJxdWVzdGlvblwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoISEoPFF1ZXN0aW9uPnF1ZXN0aW9uKS5wYWdlKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQoPFF1ZXN0aW9uPnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgfVxuICAgIHRoaXMub25RdWVzdGlvbkFkZGVkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgIH0pO1xuICB9XG4gIHF1ZXN0aW9uUmVtb3ZlZChxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1JlbW92ZWQoXG4gICAgICA8UXVlc3Rpb24+cXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKClcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUXVlc3Rpb25SZW1vdmVkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICB9KTtcbiAgfVxuICBxdWVzdGlvblJlbmFtZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBvbGROYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWVOYW1lOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUmVtb3ZlZCg8UXVlc3Rpb24+cXVlc3Rpb24sIG9sZE5hbWUsIG9sZFZhbHVlTmFtZSk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKDxRdWVzdGlvbj5xdWVzdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlcyA9IHtcbiAgICBuYW1lczoge30sXG4gICAgbmFtZXNJbnNlbnNpdGl2ZToge30sXG4gICAgdmFsdWVOYW1lczoge30sXG4gICAgdmFsdWVOYW1lc0luc2Vuc2l0aXZlOiB7fSxcbiAgfTtcbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc0NsZWFyKCkge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmUgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNBZGRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZShcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWVcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc1JlbW92ZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoISFuYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsIHF1ZXN0aW9uLCBuYW1lKTtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdmFsdWVOYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMsXG4gICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICB2YWx1ZU5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaEFkZGVkQ29yZShoYXNoOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgaWYgKCEhcmVzKSB7XG4gICAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICAgIGlmIChyZXMuaW5kZXhPZihxdWVzdGlvbikgPCAwKSB7XG4gICAgICAgIHJlcy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaFtuYW1lXSA9IFtxdWVzdGlvbl07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoaGFzaDogYW55LCBxdWVzdGlvbjogUXVlc3Rpb24sIG5hbWU6IHN0cmluZykge1xuICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcmVzLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKHJlcy5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIGhhc2hbbmFtZV07XG4gICAgfVxuICB9XG4gIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xuICAgIGlmICghcGFuZWwubmFtZSkge1xuICAgICAgcGFuZWwubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKFxuICAgICAgICB0aGlzLmdldEFsbFBhbmVscyhmYWxzZSwgdHJ1ZSksXG4gICAgICAgIFwicGFuZWxcIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQoPFBhbmVsTW9kZWxCYXNlPig8YW55PnBhbmVsKSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYW5lbEFkZGVkLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgbmFtZTogcGFuZWwubmFtZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgIH0pO1xuICB9XG4gIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCBuYW1lOiBwYW5lbC5uYW1lIH0pO1xuICB9XG4gIHZhbGlkYXRlUXVlc3Rpb24ocXVlc3Rpb246IElRdWVzdGlvbik6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUXVlc3Rpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdmFsdWU6IHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHZhbGlkYXRlUGFuZWwocGFuZWw6IElQYW5lbCk6IFN1cnZleUVycm9yIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlUGFuZWwuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lOiBwYW5lbC5uYW1lLFxuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgZXJyb3I6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIHRoaXMub25WYWxpZGF0ZVBhbmVsLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXJyb3IgPyBuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvciwgdGhpcykgOiBudWxsO1xuICB9XG4gIHByb2Nlc3NIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGh0bWw6IGh0bWwgfTtcbiAgICB0aGlzLm9uUHJvY2Vzc0h0bWwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dChvcHRpb25zLmh0bWwsIHRydWUpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzVGV4dEV4KHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZmFsc2UpLnRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuLFxuICAgIGRvRW5jb2Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgdGV4dDogdGhpcy5wcm9jZXNzVGV4dENvcmUodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKSxcbiAgICAgIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSxcbiAgICB9O1xuICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzVGV4dENvcmUoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGRvRW5jb2RpbmcpO1xuICB9XG4gIGdldFN1cnZleU1hcmtkb3duSHRtbChlbGVtZW50OiBCYXNlLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBvcHRpb25zID0geyBlbGVtZW50OiBlbGVtZW50LCB0ZXh0OiB0ZXh0LCBodG1sOiA8YW55Pm51bGwgfTtcbiAgICB0aGlzLm9uVGV4dE1hcmtkb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuaHRtbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhbW91bnQgb2YgY29ycmVjdGVkIHF1aXogYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWl6IHF1ZXN0aW9uIG51bWJlci4gSXQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIGBnZXRRdWl6UXVlc3Rpb25zLmxlbmd0aGAgYmVjYXVzZSBzb21lIHdpZGdldHMgbGlrZSBtYXRyaXggbWF5IGhhdmUgc2V2ZXJhbCBxdWVzdGlvbnMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldFF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgKz0gKDxRdWVzdGlvbj5xdWVzdGlvbnNbaV0pLnF1aXpRdWVzdGlvbkNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFtb3VudCBvZiBpbmNvcnJlY3QgcXVpeiBhbnN3ZXJzLlxuICAgKi9cbiAgcHVibGljIGdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGlzQ29ycmVjdDogYm9vbGVhbik6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVpelF1ZXN0aW9ucygpO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHF1ZXN0aW9uOiA8SVF1ZXN0aW9uPm51bGwsXG4gICAgICByZXN1bHQ6IGZhbHNlLFxuICAgICAgY29ycmVjdEFuc3dlcnM6IDAsXG4gICAgICBpbmNvcnJlY3RBbnN3ZXJzOiAwLFxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPnF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBxdWl6UXVlc3Rpb25Db3VudCA9IHEucXVpelF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uID0gcTtcbiAgICAgIG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPSBxLmNvcnJlY3RBbnN3ZXJDb3VudDtcbiAgICAgIG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA9IHF1aXpRdWVzdGlvbkNvdW50IC0gb3B0aW9ucy5jb3JyZWN0QW5zd2VycztcbiAgICAgIG9wdGlvbnMucmVzdWx0ID0gb3B0aW9ucy5xdWVzdGlvbi5pc0Fuc3dlckNvcnJlY3QoKTtcbiAgICAgIHRoaXMub25Jc0Fuc3dlckNvcnJlY3QuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICAgIGlmIChpc0NvcnJlY3QpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuY29ycmVjdEFuc3dlcnMgPCBxdWl6UXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgIHZhciBhZGRDb3VudCA9IG9wdGlvbnMuY29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgaWYgKGFkZENvdW50ID09IDAgJiYgb3B0aW9ucy5yZXN1bHQpIGFkZENvdW50ID0gMTtcbiAgICAgICAgICBjb3VudGVyICs9IGFkZENvdW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmVzdWx0IHx8IG9wdGlvbnMuaW5jb3JyZWN0QW5zd2VycyA8IHF1aXpRdWVzdGlvbkNvdW50KSB7XG4gICAgICAgICAgY291bnRlciArPSBvcHRpb25zLmluY29ycmVjdEFuc3dlcnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH1cbiAgZ2V0Q29ycmVjdGVkQW5zd2VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gIH1cbiAgZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB0aW1lciBwYW5lbCBwb3NpdGlvbi4gVGhlIHRpbWVyIHBhbmVsIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBtdWNoIHRpbWUgYW4gZW5kIHVzZXIgc3BlbmRzIG9uIGEgc3VydmV5L3BhZ2UuXG4gICAqXG4gICAqIFRoZSBhdmFpbGFibGUgb3B0aW9uczpcbiAgICogLSBgdG9wYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIHRvcC5cbiAgICogLSBgYm90dG9tYCAtIGRpc3BsYXkgdGltZXIgcGFuZWwgaW4gdGhlIGJvdHRvbS5cbiAgICogLSBgbm9uZWAgLSBkbyBub3QgZGlzcGxheSBhIHRpbWVyIHBhbmVsLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGVxdWFsIHRvICdub25lJywgdGhlIHN1cnZleSBjYWxscyB0aGUgYHN0YXJ0VGltZXIoKWAgbWV0aG9kIG9uIHN1cnZleSByZW5kZXJpbmcuXG4gICAqIEBzZWUgc2hvd1RpbWVyUGFuZWxNb2RlXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHN0b3BUaW1lclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGltZXJQYW5lbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbFwiLCBcIm5vbmVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RpbWVyUGFuZWxTaG93aW5nT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaW1lclN0YXJ0ZWQgJiYgdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmlzVGltZXJTdGFydGVkICYmIHRoaXMuc2hvd1RpbWVyUGFuZWwgPT0gXCJib3R0b21cIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXQgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciBkaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2Ugb3IgZm9yIHRoZSBlbnRpcmUgc3VydmV5LlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHBhZ2VgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3IgcGFnZVxuICAgKiAtIGBzdXJ2ZXlgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3Igc3VydmV5XG4gICAqXG4gICAqIFVzZSB0aGUgYG9uVGltZXJQYW5lbEluZm9UZXh0YCBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogQHNlZSBzaG93VGltZXJQYW5lbFxuICAgKiBAc2VlIG9uVGltZXJQYW5lbEluZm9UZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaW1lclBhbmVsTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgXCJhbGxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpbWVySW5mb1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgdGV4dDogdGhpcy5nZXRUaW1lckluZm9UZXh0KCkgfTtcbiAgICB0aGlzLm9uVGltZXJQYW5lbEluZm9UZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIGxvYyA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZyh0aGlzLCB0cnVlKTtcbiAgICBsb2MudGV4dCA9IG9wdGlvbnMudGV4dDtcbiAgICByZXR1cm4gbG9jLnRleHRPckh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUaW1lckluZm9UZXh0KCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAoIXBhZ2UpIHJldHVybiBcIlwiO1xuICAgIHZhciBwYWdlU3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2UudGltZVNwZW50KTtcbiAgICB2YXIgc3VydmV5U3BlbnQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHRoaXMudGltZVNwZW50KTtcbiAgICB2YXIgcGFnZUxpbWl0U2VjID0gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpO1xuICAgIHZhciBwYWdlTGltaXQgPSB0aGlzLmdldERpc3BsYXlUaW1lKHBhZ2VMaW1pdFNlYyk7XG4gICAgdmFyIHN1cnZleUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLm1heFRpbWVUb0ZpbmlzaCk7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWxNb2RlID09IFwicGFnZVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvUGFnZVRleHQocGFnZSwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInN1cnZleVwiKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcImFsbFwiKSB7XG4gICAgICBpZiAocGFnZUxpbWl0U2VjIDw9IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPD0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lclNwZW50QWxsXCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIHBhZ2VTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHBhZ2VMaW1pdFNlYyA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRBbGxcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgICAgcGFnZVNwZW50LFxuICAgICAgICAgIHBhZ2VMaW1pdCxcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHBhZ2VUZXh0ID0gdGhpcy5nZXRUaW1lckluZm9QYWdlVGV4dChwYWdlLCBwYWdlU3BlbnQsIHBhZ2VMaW1pdCk7XG4gICAgICBsZXQgc3VydmV5VGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvU3VydmV5VGV4dChzdXJ2ZXlTcGVudCwgc3VydmV5TGltaXQpO1xuICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgXCIgXCIgKyBzdXJ2ZXlUZXh0O1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldFRpbWVySW5mb1BhZ2VUZXh0KFxuICAgIHBhZ2U6IFBhZ2VNb2RlbCxcbiAgICBwYWdlU3BlbnQ6IHN0cmluZyxcbiAgICBwYWdlTGltaXQ6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSkgPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFBhZ2VcIilbXCJmb3JtYXRcIl0ocGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGltZXJJbmZvU3VydmV5VGV4dChcbiAgICBzdXJ2ZXlTcGVudDogc3RyaW5nLFxuICAgIHN1cnZleUxpbWl0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwXG4gICAgICA/IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJMaW1pdFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApXG4gICAgICA6IHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudFN1cnZleVwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBzdXJ2ZXlTcGVudCxcbiAgICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzcGxheVRpbWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHZhciBtaW4gPSBNYXRoLmZsb29yKHZhbCAvIDYwKTtcbiAgICB2YXIgc2VjID0gdmFsICUgNjA7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKG1pbiA+IDApIHtcbiAgICAgIHJlcyArPSBtaW4gKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJNaW5cIik7XG4gICAgfVxuICAgIGlmIChyZXMgJiYgc2VjID09IDApIHJldHVybiByZXM7XG4gICAgaWYgKHJlcykgcmVzICs9IFwiIFwiO1xuICAgIHJldHVybiByZXMgKyBzZWMgKyBcIiBcIiArIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTZWNcIik7XG4gIH1cbiAgcHJpdmF0ZSB0aW1lckZ1bmM6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBTdGFydHMgYSB0aW1lciB0aGF0IHdpbGwgY2FsY3VsYXRlIGhvdyBtdWNoIHRpbWUgZW5kLXVzZXIgc3BlbmRzIG9uIHRoZSBzdXJ2ZXkgb3Igb24gcGFnZXMuXG4gICAqIEBzZWUgc3RvcFRpbWVyXG4gICAqIEBzZWUgdGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgc3RhcnRUaW1lcigpIHtcbiAgICBpZiAodGhpcy5pc1RpbWVyU3RhcnRlZCB8fCB0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZG9UaW1lcigpO1xuICAgIH07XG4gICAgdGhpcy5pc1RpbWVyU3RhcnRlZCA9IHRydWU7XG4gICAgU3VydmV5VGltZXIuaW5zdGFuY2Uuc3RhcnQodGhpcy50aW1lckZ1bmMpO1xuICB9XG4gIHN0YXJ0VGltZXJGcm9tVUkoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1RpbWVyUGFuZWwgIT0gXCJub25lXCIgJiYgdGhpcy5zdGF0ZSA9PT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU3RvcHMgdGhlIHRpbWVyLlxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSB0aW1lU3BlbnRcbiAgICovXG4gIHB1YmxpYyBzdG9wVGltZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzVGltZXJTdGFydGVkKSByZXR1cm47XG4gICAgdGhpcy5pc1RpbWVyU3RhcnRlZCA9IGZhbHNlO1xuICAgIFN1cnZleVRpbWVyLmluc3RhbmNlLnN0b3AodGhpcy50aW1lckZ1bmMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0aW1lIGluIHNlY29uZHMgYW4gZW5kIHVzZXIgc3BlbmRzIG9uIHRoZSBzdXJ2ZXlcbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgUGFnZU1vZGVsLnRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIHRpbWVTcGVudCA9IDA7XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgZW5kIHVzZXIgaGFzIHRvIGNvbXBsZXRlIGEgc3VydmV5LiBJZiB0aGUgdmFsdWUgaXMgMCBvciBsZXNzLCBhbiBlbmQgdXNlciBoYXMgbm8gdGltZSBsaW1pdCB0byBmaW5pc2ggYSBzdXJ2ZXkuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRpbWVUb0ZpbmlzaCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgZW5kIHVzZXIgaGFzIHRvIGNvbXBsZXRlIGEgcGFnZSBpbiB0aGUgc3VydmV5LiBJZiB0aGUgdmFsdWUgaXMgMCBvciBsZXNzLCBhbiBlbmQgdXNlciBoYXMgbm8gdGltZSBsaW1pdC5cbiAgICpcbiAgICogWW91IG1heSBvdmVycmlkZSB0aGlzIHZhbHVlIGZvciBldmVyeSBwYWdlLlxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBtYXhUaW1lVG9GaW5pc2hcbiAgICogQHNlZSBQYWdlTW9kZWwubWF4VGltZVRvRmluaXNoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFRpbWVUb0ZpbmlzaFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoUGFnZVwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRpbWVUb0ZpbmlzaFBhZ2UodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2U6IFBhZ2VNb2RlbCkge1xuICAgIGlmICghcGFnZSB8fCBwYWdlLm1heFRpbWVUb0ZpbmlzaCA8IDApIHJldHVybiAwO1xuICAgIHJldHVybiBwYWdlLm1heFRpbWVUb0ZpbmlzaCA+IDBcbiAgICAgID8gcGFnZS5tYXhUaW1lVG9GaW5pc2hcbiAgICAgIDogdGhpcy5tYXhUaW1lVG9GaW5pc2hQYWdlO1xuICB9XG4gIHByb3RlY3RlZCBkb1RpbWVyKCkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcGFnZS50aW1lU3BlbnQgPSBwYWdlLnRpbWVTcGVudCArIDE7XG4gICAgfVxuICAgIHRoaXMudGltZVNwZW50ID0gdGhpcy50aW1lU3BlbnQgKyAxO1xuICAgIHRoaXMub25UaW1lci5maXJlKHRoaXMsIHt9KTtcbiAgICBpZiAodGhpcy5tYXhUaW1lVG9GaW5pc2ggPiAwICYmIHRoaXMubWF4VGltZVRvRmluaXNoID09IHRoaXMudGltZVNwZW50KSB7XG4gICAgICB0aGlzLmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgICB9XG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIHZhciBwYWdlTGltaXQgPSB0aGlzLmdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZSk7XG4gICAgICBpZiAocGFnZUxpbWl0ID4gMCAmJiBwYWdlTGltaXQgPT0gcGFnZS50aW1lU3BlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL0lTdXJ2ZXlJbXBsZW1lbnRvclxuICBnZVN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvL0lTdXJ2ZXlUcmlnZ2VyT3duZXJcbiAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgdmFyIHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UGFnZXNCeU5hbWVzKHBhZ2VzKSk7XG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocmVzdWx0LCB0aGlzLmdldFF1ZXN0aW9uc0J5TmFtZXMocXVlc3Rpb25zKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBzZXRUcmlnZ2VyVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc1ZhcmlhYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgaWYgKGlzVmFyaWFibGUpIHtcbiAgICAgIHRoaXMuc2V0VmFyaWFibGUobmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICBpZiAoZmlyc3ROYW1lID09IG5hbWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0VmFsdWUoZmlyc3ROYW1lKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpKTtcbiAgICAgICAgcHJvY2Vzc29yLnNldFZhbHVlKGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShmaXJzdE5hbWUsIGRhdGFbZmlyc3ROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvcHlUcmlnZ2VyVmFsdWUobmFtZTogc3RyaW5nLCBmcm9tTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFuYW1lIHx8ICFmcm9tTmFtZSkgcmV0dXJuO1xuICAgIHZhciBwcm9jZXNzb3IgPSBuZXcgUHJvY2Vzc1ZhbHVlKCk7XG4gICAgdmFyIHZhbHVlID0gcHJvY2Vzc29yLmdldFZhbHVlKGZyb21OYW1lLCB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCkpO1xuICAgIHRoaXMuc2V0VHJpZ2dlclZhbHVlKG5hbWUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZm9jdXNRdWVzdGlvbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUsIHRydWUpO1xuICAgIGlmICghcXVlc3Rpb24gfHwgIXF1ZXN0aW9uLmlzVmlzaWJsZSB8fCAhcXVlc3Rpb24ucGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBxdWVzdGlvbi5wYWdlO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcXVlc3Rpb24uZm9jdXMoKSwgMTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGRpc3Bvc2Ugc3VydmV5IG1vZGVsIHByb3Blcmx5LlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJzdXJ2ZXlcIiwgW1xuICB7XG4gICAgbmFtZTogXCJsb2NhbGVcIixcbiAgICBjaG9pY2VzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXMoKTtcbiAgICB9LFxuICAgIG9uR2V0VmFsdWU6IChvYmo6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gb2JqLmxvY2FsZSA9PSBzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZSA/IG51bGwgOiBvYmoubG9jYWxlO1xuICAgIH0sXG4gIH0sXG4gIHsgbmFtZTogXCJ0aXRsZVwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGl0bGVcIiB9LFxuICB7IG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIiB9LFxuICB7IG5hbWU6IFwibG9nb1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9nb1wiIH0sXG4gIHsgbmFtZTogXCJsb2dvV2lkdGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDMwMCwgbWluVmFsdWU6IDAgfSxcbiAgeyBuYW1lOiBcImxvZ29IZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAgfSxcbiAge1xuICAgIG5hbWU6IFwibG9nb0ZpdFwiLFxuICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJsb2dvUG9zaXRpb25cIixcbiAgICBkZWZhdWx0OiBcImxlZnRcIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwidG9wXCIsIFwiYm90dG9tXCJdLFxuICB9LFxuICB7IG5hbWU6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwiZm9jdXNPbkZpcnN0RXJyb3I6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJjb21wbGV0ZWRIdG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlZEh0bWxcIiB9LFxuICB7XG4gICAgbmFtZTogXCJjb21wbGV0ZWRCZWZvcmVIdG1sOmh0bWxcIixcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tcGxldGVkQmVmb3JlSHRtbFwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb246aHRtbGNvbmRpdGlvbnNcIixcbiAgICBjbGFzc05hbWU6IFwiaHRtbGNvbmRpdGlvbml0ZW1cIixcbiAgfSxcbiAgeyBuYW1lOiBcImxvYWRpbmdIdG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xvYWRpbmdIdG1sXCIgfSxcbiAgeyBuYW1lOiBcInBhZ2VzOnN1cnZleXBhZ2VzXCIsIGNsYXNzTmFtZTogXCJwYWdlXCIgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zXCIsXG4gICAgYWx0ZXJuYXRpdmVOYW1lOiBcImVsZW1lbnRzXCIsXG4gICAgYmFzZUNsYXNzTmFtZTogXCJxdWVzdGlvblwiLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzTGlnaHRTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIG9uR2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSk6IGFueSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIG9uU2V0VmFsdWU6IGZ1bmN0aW9uIChvYmo6IGFueSwgdmFsdWU6IGFueSwganNvbkNvbnZlcnRlcjogYW55KSB7XG4gICAgICB2YXIgcGFnZSA9IG9iai5hZGROZXdQYWdlKFwiXCIpO1xuICAgICAganNvbkNvbnZlcnRlci50b09iamVjdCh7IHF1ZXN0aW9uczogdmFsdWUgfSwgcGFnZSk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwidHJpZ2dlcnM6dHJpZ2dlcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXRyaWdnZXJcIixcbiAgICBjbGFzc05hbWVQYXJ0OiBcInRyaWdnZXJcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY2FsY3VsYXRlZFZhbHVlczpjYWxjdWxhdGVkdmFsdWVzXCIsXG4gICAgY2xhc3NOYW1lOiBcImNhbGN1bGF0ZWR2YWx1ZVwiLFxuICB9LFxuICB7IG5hbWU6IFwic3VydmV5SWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgeyBuYW1lOiBcInN1cnZleVBvc3RJZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICB7IG5hbWU6IFwic3VydmV5U2hvd0RhdGFTYXZpbmc6Ym9vbGVhblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBcImNvb2tpZU5hbWVcIixcbiAgXCJzZW5kUmVzdWx0T25QYWdlTmV4dDpib29sZWFuXCIsXG4gIHtcbiAgICBuYW1lOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLFxuICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImJvdGhcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJzaG93UHJldkJ1dHRvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcInNob3dUaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd0NvbXBsZXRlZFBhZ2U6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIFwibmF2aWdhdGVUb1VybFwiLFxuICB7XG4gICAgbmFtZTogXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb246dXJsY29uZGl0aW9uc1wiLFxuICAgIGNsYXNzTmFtZTogXCJ1cmxjb25kaXRpb25pdGVtXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgZGVmYXVsdDogXCJpbml0aWFsXCIsXG4gICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgfSxcbiAgXCJzaG93UGFnZU51bWJlcnM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgZGVmYXVsdDogXCJvblwiLFxuICAgIGNob2ljZXM6IFtcIm9uXCIsIFwib25QYWdlXCIsIFwib2ZmXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIixcbiAgICBkZWZhdWx0OiBcInRvcFwiLFxuICAgIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwidW5kZXJUaXRsZVwiLFxuICAgIGNob2ljZXM6IFtcInVuZGVySW5wdXRcIiwgXCJ1bmRlclRpdGxlXCJdLFxuICB9LFxuICB7IG5hbWU6IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwidG9wXCIsIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICBkZWZhdWx0OiBcIm9mZlwiLFxuICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImJvdGhcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInByb2dyZXNzQmFyVHlwZVwiLFxuICAgIGRlZmF1bHQ6IFwicGFnZXNcIixcbiAgICBjaG9pY2VzOiBbXCJwYWdlc1wiLCBcInF1ZXN0aW9uc1wiLCBcImNvcnJlY3RRdWVzdGlvbnNcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJtb2RlXCIsIGRlZmF1bHQ6IFwiZWRpdFwiLCBjaG9pY2VzOiBbXCJlZGl0XCIsIFwiZGlzcGxheVwiXSB9LFxuICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJtYXhUZXh0TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibWF4T3RoZXJzTGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICBcImdvTmV4dFBhZ2VBdXRvbWF0aWM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIGRlZmF1bHQ6IFwib25Db21wbGV0ZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJvbkNvbXBsZXRlXCIsIFwib25IaWRkZW5cIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImNoZWNrRXJyb3JzTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwib25OZXh0UGFnZVwiLFxuICAgIGNob2ljZXM6IFtcIm9uTmV4dFBhZ2VcIiwgXCJvblZhbHVlQ2hhbmdlZFwiLCBcIm9uQ29tcGxldGVcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJvbkJsdXJcIixcbiAgICBjaG9pY2VzOiBbXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgfSxcbiAgeyBuYW1lOiBcInN0YXJ0U3VydmV5VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jU3RhcnRTdXJ2ZXlUZXh0XCIgfSxcbiAgeyBuYW1lOiBcInBhZ2VQcmV2VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFnZVByZXZUZXh0XCIgfSxcbiAgeyBuYW1lOiBcInBhZ2VOZXh0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFnZU5leHRUZXh0XCIgfSxcbiAgeyBuYW1lOiBcImNvbXBsZXRlVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tcGxldGVUZXh0XCIgfSxcbiAgeyBuYW1lOiBcInByZXZpZXdUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQcmV2aWV3VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJlZGl0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRWRpdFRleHRcIiB9LFxuICB7IG5hbWU6IFwicmVxdWlyZWRUZXh0XCIsIGRlZmF1bHQ6IFwiKlwiIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24gKHN1cnZleTogYW55KSB7XG4gICAgICByZXR1cm4gIXN1cnZleSB8fCBzdXJ2ZXkuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvblRpdGxlUGF0dGVyblwiLFxuICAgIGRlZmF1bHQ6IFwibnVtVGl0bGVSZXF1aXJlXCIsXG4gICAgZGVwZW5kc09uOiBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJyZXF1aXJlZFRleHRcIl0sXG4gICAgY2hvaWNlczogKG9iajogYW55KSA9PiB7XG4gICAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIG9iai5nZXRRdWVzdGlvblRpdGxlUGF0dGVybk9wdGlvbnMoKTtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1F1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLFxuICB9LFxuICB7IG5hbWU6IFwiZmlyc3RQYWdlSXNTdGFydGVkOmJvb2xlYW5cIiwgZGVmYXVsdDogZmFsc2UgfSxcbiAge1xuICAgIG5hbWU6IFwiaXNTaW5nbGVQYWdlOmJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc09uUGFnZU1vZGVcIixcbiAgICBkZWZhdWx0OiBcInN0YW5kYXJkXCIsXG4gICAgY2hvaWNlczogW1wic2luZ2xlUGFnZVwiLCBcInN0YW5kYXJkXCIsIFwicXVlc3Rpb25QZXJQYWdlXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIsXG4gICAgZGVmYXVsdDogXCJub1ByZXZpZXdcIixcbiAgICBjaG9pY2VzOiBbXCJub1ByZXZpZXdcIiwgXCJzaG93QWxsUXVlc3Rpb25zXCIsIFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCJdLFxuICB9LFxuICB7IG5hbWU6IFwibWF4VGltZVRvRmluaXNoOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7IG5hbWU6IFwibWF4VGltZVRvRmluaXNoUGFnZTpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAge1xuICAgIG5hbWU6IFwic2hvd1RpbWVyUGFuZWxcIixcbiAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidG9wXCIsIFwiYm90dG9tXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93VGltZXJQYW5lbE1vZGVcIixcbiAgICBkZWZhdWx0OiBcImFsbFwiLFxuICAgIGNob2ljZXM6IFtcImFsbFwiLCBcInBhZ2VcIiwgXCJzdXJ2ZXlcIl0sXG4gIH0sXG5dKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXkudHMiLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMoYTogYW55LCBiOiBhbnkpIHtcbiAgdmFyIGksIGRpZmY7XG4gIHZhciByZWdFeFN0cmlwMCA9IC8oXFwuMCspKyQvO1xuICB2YXIgc2VnbWVudHNBID0gYS5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIHZhciBzZWdtZW50c0IgPSBiLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgdmFyIGwgPSBNYXRoLm1pbihzZWdtZW50c0EubGVuZ3RoLCBzZWdtZW50c0IubGVuZ3RoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgZGlmZiA9IHBhcnNlSW50KHNlZ21lbnRzQVtpXSwgMTApIC0gcGFyc2VJbnQoc2VnbWVudHNCW2ldLCAxMCk7XG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHJldHVybiBkaWZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VnbWVudHNBLmxlbmd0aCAtIHNlZ21lbnRzQi5sZW5ndGg7XG59XG5mdW5jdGlvbiBjb25maXJtQWN0aW9uKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoISFzZXR0aW5ncyAmJiAhIXNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKVxuICAgIHJldHVybiBzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYyhtZXNzYWdlKTtcbiAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG59XG5mdW5jdGlvbiBkZXRlY3RJRUJyb3dzZXIoKSB7XG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgb2xkSWUgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIHZhciBlbGV2ZW5JZSA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcblxuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIHZhciBtc2llID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIHZhciB0cmlkZW50ID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIHZhciBlZGdlID0gdWEuaW5kZXhPZihcIkVkZ2UvXCIpO1xuICAgICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlID0gZWRnZSA+IDAgfHwgdHJpZGVudCA+IDAgfHwgbXNpZSA+IDA7XG4gIH1cbiAgcmV0dXJuICg8YW55PmRldGVjdElFT3JFZGdlKS5pc0lFT3JFZGdlO1xufVxuZnVuY3Rpb24gbG9hZEZpbGVGcm9tQmFzZTY0KGI2NERhdGE6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZykge1xuICB2YXIgYnl0ZVN0cmluZyA9IGF0b2IoYjY0RGF0YS5zcGxpdChcIixcIilbMV0pO1xuXG4gIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgdmFyIG1pbWVTdHJpbmcgPSBiNjREYXRhLnNwbGl0KFwiLFwiKVswXS5zcGxpdChcIjpcIilbMV0uc3BsaXQoXCI7XCIpWzBdO1xuXG4gIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gIHZhciBhYiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gIHZhciBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgLy8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG4gIHZhciBiYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XG4gICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJiLCBmaWxlTmFtZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cblxuZXhwb3J0IHtcbiAgY29tcGFyZVZlcnNpb25zLFxuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZGV0ZWN0SUVCcm93c2VyLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGlzTW9iaWxlLFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy91dGlscy50cyIsImltcG9ydCB7IEJhc2UsIFN1cnZleUVycm9yLCBJU3VydmV5RXJyb3JPd25lciB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IEN1c3RvbUVycm9yLCBSZXF1cmVOdW1lcmljRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yUmVzdWx0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBhbnksIHB1YmxpYyBlcnJvcjogU3VydmV5RXJyb3IgPSBudWxsKSB7fVxufVxuLyoqXG4gKiBCYXNlIFN1cnZleUpTIHZhbGlkYXRvciBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVZhbGlkYXRvciBleHRlbmRzIEJhc2Uge1xuICBwdWJsaWMgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXI7XG4gIHB1YmxpYyBvbkFzeW5jQ29tcGxldGVkOiAocmVzdWx0OiBWYWxpZGF0b3JSZXN1bHQpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhbGlkYXRlQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBc3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQpIDogbnVsbDtcbiAgfVxuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDdXN0b21FcnJvcihuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBDdXN0b21FcnJvcih0aGlzLmdldEVycm9yVGV4dChuYW1lKSwgdGhpcy5lcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRUeXBlKCkucmVwbGFjZShcInZhbGlkYXRvclwiLCBcIlwiKTtcbiAgICBpZiAoISF0aGlzLnRleHQpIHtcbiAgICAgIHJlcyArPSBcIiwgXCIgKyB0aGlzLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRvck93bmVyIHtcbiAgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+O1xuICB2YWxpZGF0ZWRWYWx1ZTogYW55O1xuICBnZXRWYWxpZGF0b3JUaXRsZSgpOiBzdHJpbmc7XG4gIGdldERhdGFGaWx0ZXJlZFZhbHVlcygpOiBhbnk7XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55O1xufVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJ1bm5lciB7XG4gIHByaXZhdGUgYXN5bmNWYWxpZGF0b3JzOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+O1xuICBwdWJsaWMgb25Bc3luY0NvbXBsZXRlZDogKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSA9PiB2b2lkO1xuICBwdWJsaWMgcnVuKG93bmVyOiBJVmFsaWRhdG9yT3duZXIpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmFsdWVzID0gbnVsbDtcbiAgICB2YXIgcHJvcGVydGllcyA9IG51bGw7XG4gICAgdGhpcy5wcmVwYXJlQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgdmFyIGFzeW5jUmVzdWx0czogQXJyYXk8U3VydmV5RXJyb3I+ID0gW107XG4gICAgdmFyIHZhbGlkYXRvcnMgPSBvd25lci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tpXTtcbiAgICAgIGlmICghdmFsdWVzICYmIHZhbGlkYXRvci5pc1ZhbGlkYXRlQWxsVmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IG93bmVyLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpO1xuICAgICAgICBwcm9wZXJ0aWVzID0gb3duZXIuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRvci5pc0FzeW5jKSB7XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzLnB1c2godmFsaWRhdG9yKTtcbiAgICAgICAgdmFsaWRhdG9yLm9uQXN5bmNDb21wbGV0ZWQgPSAocmVzdWx0OiBWYWxpZGF0b3JSZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAoISFyZXN1bHQgJiYgISFyZXN1bHQuZXJyb3IpIGFzeW5jUmVzdWx0cy5wdXNoKHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgaWYgKCF0aGlzLm9uQXN5bmNDb21wbGV0ZWQpIHJldHVybjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hc3luY1ZhbGlkYXRvcnNbaV0uaXNSdW5uaW5nKSByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25Bc3luY0NvbXBsZXRlZChhc3luY1Jlc3VsdHMpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0b3JzID0gb3duZXIuZ2V0VmFsaWRhdG9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IHZhbGlkYXRvcnNbaV07XG5cbiAgICAgIHZhciB2YWxpZGF0b3JSZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoXG4gICAgICAgIG93bmVyLnZhbGlkYXRlZFZhbHVlLFxuICAgICAgICBvd25lci5nZXRWYWxpZGF0b3JUaXRsZSgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHByb3BlcnRpZXNcbiAgICAgICk7XG4gICAgICBpZiAoISF2YWxpZGF0b3JSZXN1bHQgJiYgISF2YWxpZGF0b3JSZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgcmVzLnB1c2godmFsaWRhdG9yUmVzdWx0LmVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuYXN5bmNWYWxpZGF0b3JzLmxlbmd0aCA9PSAwICYmICEhdGhpcy5vbkFzeW5jQ29tcGxldGVkKVxuICAgICAgdGhpcy5vbkFzeW5jQ29tcGxldGVkKFtdKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgcHJlcGFyZUFzeW5jVmFsaWRhdG9ycygpIHtcbiAgICBpZiAoISF0aGlzLmFzeW5jVmFsaWRhdG9ycykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9yc1tpXS5vbkFzeW5jQ29tcGxldGVkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSBudW1lcmljIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE51bWVyaWNWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihtaW5WYWx1ZTogbnVtYmVyID0gbnVsbCwgbWF4VmFsdWU6IG51bWJlciA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluVmFsdWUgPSBtaW5WYWx1ZTtcbiAgICB0aGlzLm1heFZhbHVlID0gbWF4VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJudW1lcmljdmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIGlmICghSGVscGVycy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KFxuICAgICAgICBudWxsLFxuICAgICAgICBuZXcgUmVxdXJlTnVtZXJpY0Vycm9yKG51bGwsIHRoaXMuZXJyb3JPd25lcilcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBuZXcgVmFsaWRhdG9yUmVzdWx0KHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1pblZhbHVlID4gcmVzdWx0LnZhbHVlKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4VmFsdWUgIT09IG51bGwgJiYgdGhpcy5tYXhWYWx1ZSA8IHJlc3VsdC52YWx1ZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xuICAgIHZhciB2TmFtZSA9IG5hbWUgPyBuYW1lIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInZhbHVlXCIpO1xuICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsICYmIHRoaXMubWF4VmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgLmdldFN0cmluZyhcIm51bWVyaWNNaW5NYXhcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAgIC5nZXRTdHJpbmcoXCJudW1lcmljTWluXCIpXG4gICAgICAgICAgW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1pblZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgLmdldFN0cmluZyhcIm51bWVyaWNNYXhcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKHZOYW1lLCB0aGlzLm1heFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5WYWx1ZSBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluVmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhWYWx1ZSBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlXCIsIHZhbCk7XG4gIH1cbn1cbi8qKlxuICogVmFsaWRhdGUgdGV4dCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWluTGVuZ3RoOiBudW1iZXIgPSAwLFxuICAgIG1heExlbmd0aDogbnVtYmVyID0gMCxcbiAgICBhbGxvd0RpZ2l0cyA9IHRydWVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1pbkxlbmd0aCA9IG1pbkxlbmd0aDtcbiAgICB0aGlzLm1heExlbmd0aCA9IG1heExlbmd0aDtcbiAgICB0aGlzLmFsbG93RGlnaXRzID0gYWxsb3dEaWdpdHM7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0ZXh0dmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICh2YWx1ZSAhPT0gXCJcIiAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy5hbGxvd0RpZ2l0cykge1xuICAgICAgdmFyIHJlZyA9IC9eW0EtWmEtelxcc10qJC87XG4gICAgICBpZiAoIXJlZy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heExlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5taW5MZW5ndGggPiAwICYmIHRoaXMubWF4TGVuZ3RoID4gMClcbiAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgLmdldFN0cmluZyhcInRleHRNaW5NYXhMZW5ndGhcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoLCB0aGlzLm1heExlbmd0aCk7XG4gICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMClcbiAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgLmdldFN0cmluZyhcInRleHRNaW5MZW5ndGhcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWluTGVuZ3RoKTtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwidGV4dE1heExlbmd0aFwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWF4TGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbkxlbmd0aCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbkxlbmd0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbkxlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbkxlbmd0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4TGVuZ3RoIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBhbGxvd0RpZ2l0cyBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dEaWdpdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93RGlnaXRzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dEaWdpdHModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dEaWdpdHNcIiwgdmFsKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQW5zd2VyQ291bnRWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihtaW5Db3VudDogbnVtYmVyID0gbnVsbCwgbWF4Q291bnQ6IG51bWJlciA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluQ291bnQgPSBtaW5Db3VudDtcbiAgICB0aGlzLm1heENvdW50ID0gbWF4Q291bnQ7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJhbnN3ZXJjb3VudHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5jb25zdHJ1Y3RvciAhPSBBcnJheSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvdW50ID0gdmFsdWUubGVuZ3RoO1xuICAgIGlmICh0aGlzLm1pbkNvdW50ICYmIGNvdW50IDwgdGhpcy5taW5Db3VudCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKFwibWluU2VsZWN0RXJyb3JcIilcbiAgICAgICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkNvdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhDb3VudCAmJiBjb3VudCA+IHRoaXMubWF4Q291bnQpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmdldFN0cmluZyhcIm1heFNlbGVjdEVycm9yXCIpXG4gICAgICAgICAgICBbXCJmb3JtYXRcIl0odGhpcy5tYXhDb3VudClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5Db3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluQ291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5Db3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbkNvdW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhDb3VudCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4Q291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhDb3VudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heENvdW50XCIsIHZhbCk7XG4gIH1cbn1cbi8qKlxuICogVXNlIGl0IHRvIHZhbGlkYXRlIHRoZSB0ZXh0IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdleFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHJlZ2V4OiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZWdleHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucmVnZXggfHwgSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHRoaXMucmVnZXgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWVbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvcihyZSwgdmFsdWUsIG5hbWUpO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3IocmU6IFJlZ0V4cCwgdmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlZ2V4IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCByZWdleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZWdleFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlZ2V4KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVnZXhcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSBlLW1haWwgYWRkcmVzcyBpbiB0aGUgdGV4dCBpbnB1dFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBwcml2YXRlIHJlID0gL14oKFtePD4oKVxcW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpPVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KCk9W1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZW1haWx2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMucmUudGVzdCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KHZhbHVlLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImludmFsaWRFbWFpbFwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFNob3cgZXJyb3IgaWYgZXhwcmVzc2lvbiByZXR1cm5zIGZhbHNlXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lciA9IG51bGw7XG4gIHByaXZhdGUgaXNSdW5uaW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4cHJlc3Npb252YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGVBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lbnN1cmVDb25kaXRpb25SdW5uZXIoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblJ1bm5lci5pc0FzeW5jO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUnVubmluZ1ZhbHVlO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMuZW5zdXJlQ29uZGl0aW9uUnVubmVyKCkpIHJldHVybiBudWxsO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSByZXMgPT4ge1xuICAgICAgdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgaWYgKCEhdGhpcy5vbkFzeW5jQ29tcGxldGVkKSB7XG4gICAgICAgIHRoaXMub25Bc3luY0NvbXBsZXRlZCh0aGlzLmdlbmVyYXRlRXJyb3IocmVzLCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IHRydWU7XG4gICAgdmFyIHJlcyA9IHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICh0aGlzLmNvbmRpdGlvblJ1bm5lci5pc0FzeW5jKSByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVFcnJvcihyZXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVFcnJvcihyZXM6IGJvb2xlYW4sIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiaW52YWxpZEV4cHJlc3Npb25cIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG4gIHByb3RlY3RlZCBlbnN1cmVDb25kaXRpb25SdW5uZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGV4cHJlc3Npb24gcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXG4gIHsgbmFtZTogXCJ0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZXh0XCIgfVxuXSk7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm51bWVyaWN2YWxpZGF0b3JcIixcbiAgW1wibWluVmFsdWU6bnVtYmVyXCIsIFwibWF4VmFsdWU6bnVtYmVyXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidGV4dHZhbGlkYXRvclwiLFxuICBbXCJtaW5MZW5ndGg6bnVtYmVyXCIsIFwibWF4TGVuZ3RoOm51bWJlclwiLCBcImFsbG93RGlnaXRzOmJvb2xlYW5cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgVGV4dFZhbGlkYXRvcigpO1xuICB9LFxuICBcInN1cnZleXZhbGlkYXRvclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJhbnN3ZXJjb3VudHZhbGlkYXRvclwiLFxuICBbXCJtaW5Db3VudDpudW1iZXJcIiwgXCJtYXhDb3VudDpudW1iZXJcIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgQW5zd2VyQ291bnRWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmVnZXh2YWxpZGF0b3JcIixcbiAgW1wicmVnZXhcIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVnZXhWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZW1haWx2YWxpZGF0b3JcIixcbiAgW10sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRW1haWxWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJleHByZXNzaW9udmFsaWRhdG9yXCIsXG4gIFtcImV4cHJlc3Npb246Y29uZGl0aW9uXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25WYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy92YWxpZGF0b3IudHMiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25fYm9vbGVhblwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQm9vbGVhbk1vZGVsPiB7XG4gIGdldCBpdGVtQ2xhc3MoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IGlzQ2hlY2tlZCA9IHF1ZXN0aW9uLmNoZWNrZWRWYWx1ZTtcbiAgICBsZXQgaXNEaXNhYmxlZCA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IGNzc0NsYXNzZXMuaXRlbTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBlbHNlIGlmIChpc0NoZWNrZWQgPT09IG51bGwpXG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1JbmRldGVybWluYXRlO1xuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbiAgZ2V0TGFiZWxDbGFzcyhjaGVja2VkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICBjc3NDbGFzc2VzLmxhYmVsICtcbiAgICAgIFwiIFwiICtcbiAgICAgIChxdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09ICFjaGVja2VkIHx8IHF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgPyBxdWVzdGlvbi5jc3NDbGFzc2VzLmRpc2FibGVkTGFiZWxcbiAgICAgICAgOiBcIlwiKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHVibGljIG9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdmFyIGlzUmlnaHRDbGljayA9IGV2ZW50Lm9mZnNldFggLyBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPiAwLjU7XG4gICAgICB2YXIgaXNSdGwgPVxuICAgICAgICBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuZGlyZWN0aW9uID09IFwicnRsXCI7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IGlzUnRsID8gIWlzUmlnaHRDbGljayA6IGlzUmlnaHRDbGljaztcbiAgICAgfVxuICB9XG4gIHB1YmxpYyBvbkxhYmVsQ2xpY2soZXZlbnQ6IGFueSwgdmFsdWU6IGJvb2xlYW4pe1xuICAgIGlmKHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlKXtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRzKGV2ZW50KVxuICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSB2YWx1ZTsgXG4gICAgfVxuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWJvb2xlYW5cIiwgQm9vbGVhbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW47XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2Jvb2xlYW4udnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQ2hlY2tib3hNb2RlbD4ge1xuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IHF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgIHZhciBpc0Rpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgdmFyIGFsbG93SG92ZXIgPSAhaXNDaGVja2VkICYmICFpc0Rpc2FibGVkO1xuICAgIHZhciBpdGVtQ2xhc3MgPSBjc3NDbGFzc2VzLml0ZW07XG4gICAgaWYgKCFxdWVzdGlvbi5oYXNDb2x1bW5zKSB7XG4gICAgICBpdGVtQ2xhc3MgKz1cbiAgICAgICAgcXVlc3Rpb24uY29sQ291bnQgPT09IDBcbiAgICAgICAgICA/IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSW5saW5lXG4gICAgICAgICAgOiBcIiBzdi1xLWNvbC1cIiArIHF1ZXN0aW9uLmNvbENvdW50O1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgaWYgKGlzQ2hlY2tlZCkgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtQ2hlY2tlZDtcbiAgICBpZiAoYWxsb3dIb3ZlcikgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSG92ZXI7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jaGVja2JveFwiLCBDaGVja2JveCk7XG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvY2hlY2tib3gudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ2hlY2tib3hJdGVtIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IGFueTtcbiAgQFByb3AgaXRlbTogYW55O1xuICBAUHJvcCBpbmRleDogYW55O1xuICBAUHJvcCBoaWRlTGFiZWw6IGJvb2xlYW47XG4gIGdldCBpc0FsbFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQ7XG4gIH1cbiAgc2V0IGlzQWxsU2VsZWN0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5pc0FsbFNlbGVjdGVkID0gdmFsO1xuICB9XG4gIGdldExhYmVsQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIENoZWNrYm94SXRlbSk7XG5leHBvcnQgZGVmYXVsdCBDaGVja2JveEl0ZW07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9jb21tZW50XCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDb21tZW50IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNvbW1lbnRcIiwgQ29tbWVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2NvbW1lbnQudnVlIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9jdXN0b21cIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi4vcGFuZWxcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZSBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWw+IHtcbiAgZ2V0IGNvbnRlbnRQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWw7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY29tcG9zaXRlXCIsIENvbXBvc2l0ZSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZSIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkN1c3RvbU1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2N1c3RvbVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBnZXQgY29udGVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgZ2V0V2lkZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9jdXN0b20udnVlIiwiXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUsIHsgQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IElFbGVtZW50LCBJUXVlc3Rpb24gfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4uL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tV2lkZ2V0IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgY3NzOiBhbnk7XG4gIEBQcm9wIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgZ2V0IGhhc0RlZmF1bHRSZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmlzRGVmYXVsdFJlbmRlciB8fCB0aGlzLmhhc1Z1ZUNvbXBvbmVudDtcbiAgfVxuICBnZXQgaGFzSHRtbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIGdldCBjdXN0b21IdG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZTtcbiAgfVxuICBnZXQgaGFzVnVlQ29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0gKDxhbnk+VnVlKVtcIm9wdGlvbnNcIl07XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIG9wdGlvbnMuY29tcG9uZW50cyAmJiBvcHRpb25zLmNvbXBvbmVudHNbdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQubmFtZV1cbiAgICApO1xuICB9XG4gIGdldCBjb21wb25lbnROYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaGFzVnVlQ29tcG9uZW50KSByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQubmFtZTtcbiAgICByZXR1cm4gXCJzdXJ2ZXktXCIgKyB0aGlzLnF1ZXN0aW9uLmdldFRlbXBsYXRlKCk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5hZnRlclJlbmRlcih0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCk7XG4gIH1cbiAgdXBkYXRlZCgpIHtcbiAgICAvL3RoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b213aWRnZXRcIiwgQ3VzdG9tV2lkZ2V0KTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tV2lkZ2V0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Ecm9wZG93bk1vZGVsPiB7XG4gIGdldCBpc090aGVyU2VsZWN0ZWQoKSB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHJldHVybiBxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQ7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZHJvcGRvd25cIiwgRHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IElFbGVtZW50LCBJUXVlc3Rpb24gfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50VnVlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgY3NzOiBhbnk7XG4gIEBQcm9wIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wIGVsZW1lbnQ6IElFbGVtZW50O1xuICBnZXRXaWRnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICBnZXRSb290Q2xhc3MoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBsZXQgY3NzUm9vdCA9IGVsZW1lbnQuY3NzUm9vdDtcbiAgICBpZiAoZWxlbWVudC5pc1JlYWRPbmx5KSB7XG4gICAgICBjc3NSb290ICs9IFwiIFwiICsgKDxhbnk+dGhpcy5lbGVtZW50KS5jc3NDbGFzc2VzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHJldHVybiBjc3NSb290O1xuICB9XG4gIGdldENvbnRlbnRDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc0NvbnRlbnQ7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPbkJvdHRvbSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA9PT0gXCJib3R0b21cIlxuICAgICk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICAoPFF1ZXN0aW9uPnRoaXMuZWxlbWVudCkuYWZ0ZXJSZW5kZXIodGhpcy4kZWwpO1xuICAgIH1cbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbGVtZW50XCIsIFN1cnZleUVsZW1lbnRWdWUpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5RWxlbWVudFZ1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvZWxlbWVudC52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3N1cnZleVwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElRdWVzdGlvbiB9IGZyb20gXCIuLi9iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRWxlbWVudEhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIGVsZW1lbnQ6IElFbGVtZW50O1xuXG4gIGdldFRpdGxlQ2xhc3MoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICByZXR1cm4gZWxlbWVudC5jc3NUaXRsZTtcbiAgfVxuICBnZXRIZWFkZXJDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc0hlYWRlcjtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbGVtZW50LWhlYWRlclwiLCBFbGVtZW50SGVhZGVyKTtcbmV4cG9ydCBkZWZhdWx0IEVsZW1lbnRIZWFkZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcCwgV2F0Y2h9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb25WdWV9IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uRW1wdHlNb2RlbH0gZnJvbSAnLi4vcXVlc3Rpb25fZW1wdHknXG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBFbXB0eSBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRW1wdHlNb2RlbD4ge1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSlcbmV4cG9ydCBkZWZhdWx0IEVtcHR5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9lbXB0eS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXJyb3JzIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBAUHJvcCBsb2NhdGlvbjogU3RyaW5nO1xuXG4gIGdldCBpc1Nob3coKSB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5lcnJvcnMgJiYgdGhpcy5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICB9XG5cbiAgZ2V0IGNsYXNzZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgID8gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5lcnJvci5yb290XG4gICAgICA6IFwicGFuZWwtZXJyb3Itcm9vdFwiO1xuXG4gICAgdmFyIGFkZGl0aW9uYWxDbGFzc2VzID0gXCJcIjtcblxuICAgIGlmICh0aGlzLmxvY2F0aW9uID09PSBcInRvcFwiKSB7XG4gICAgICBhZGRpdGlvbmFsQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Ub3A7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICBhZGRpdGlvbmFsQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IubG9jYXRpb25Cb3R0b207XG4gICAgfVxuXG4gICAgaWYgKGFkZGl0aW9uYWxDbGFzc2VzKSBjbGFzc2VzICs9IFwiIFwiICsgYWRkaXRpb25hbENsYXNzZXM7XG5cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lcnJvcnNcIiwgRXJyb3JzKTtcbmV4cG9ydCBkZWZhdWx0IEVycm9ycztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvZXJyb3JzLnZ1ZSIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIlxuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb25WdWV9IGZyb20gJy4vcXVlc3Rpb24nXG5pbXBvcnQge1F1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsfSBmcm9tICcuLi9xdWVzdGlvbl9leHByZXNzaW9uJ1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbiBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsPiB7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWV4cHJlc3Npb25cIiwgRXhwcmVzc2lvbilcbmV4cG9ydCBkZWZhdWx0IEV4cHJlc3Npb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9maWxlXCI7XG5pbXBvcnQge1xuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgbG9hZEZpbGVGcm9tQmFzZTY0XG59IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZpbGUgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkZpbGVNb2RlbD4ge1xuICBvbkRyYWdPdmVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuICBvbkRyb3AgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHNyYyA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICB0aGlzLm9uQ2hhbmdlKHNyYyk7XG4gIH07XG4gIGRvQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgdGhpcy5vbkNoYW5nZShzcmMpO1xuICB9XG4gIGRvQ2xlYW4oZXZlbnQ6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIGlmIChxdWVzdGlvbi5uZWVkQ29uZmlybVJlbW92ZUZpbGUpIHtcbiAgICAgIHZhciBpc0NvbmZpcm1lZCA9IGNvbmZpcm1BY3Rpb24ocXVlc3Rpb24uY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UpO1xuICAgICAgaWYgKCFpc0NvbmZpcm1lZCkgcmV0dXJuO1xuICAgIH1cbiAgICBxdWVzdGlvbi5jbGVhcigpO1xuICAgIHNyYy5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKVswXS52YWx1ZSA9IFwiXCI7XG4gIH1cbiAgZG9SZW1vdmVGaWxlKGRhdGE6IGFueSkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgaWYgKHF1ZXN0aW9uLm5lZWRDb25maXJtUmVtb3ZlRmlsZSkge1xuICAgICAgdmFyIGlzQ29uZmlybWVkID0gY29uZmlybUFjdGlvbihcbiAgICAgICAgcXVlc3Rpb24uZ2V0Q29uZmlybVJlbW92ZU1lc3NhZ2UoZGF0YS5uYW1lKVxuICAgICAgKTtcbiAgICAgIGlmICghaXNDb25maXJtZWQpIHJldHVybjtcbiAgICB9XG4gICAgcXVlc3Rpb24ucmVtb3ZlRmlsZShkYXRhKTtcbiAgfVxuICBkb0Rvd25sb2FkRmlsZShldmVudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoZGV0ZWN0SUVPckVkZ2UoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxvYWRGaWxlRnJvbUJhc2U2NChkYXRhLmNvbnRlbnQsIGRhdGEubmFtZSk7XG4gICAgfVxuICB9XG4gIGdldFBsYWNlaG9sZGVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFwiZm9ybS1jb250cm9sIFwiICsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnBsYWNlaG9sZGVySW5wdXQ7XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZShzcmM6IGFueSkge1xuICAgIGlmICghKDxhbnk+d2luZG93KVtcIkZpbGVSZWFkZXJcIl0pIHJldHVybjtcbiAgICBpZiAoIXNyYyB8fCAhc3JjLmZpbGVzIHx8IHNyYy5maWxlcy5sZW5ndGggPCAxKSByZXR1cm47XG4gICAgbGV0IGZpbGVzID0gW107XG4gICAgbGV0IGFsbG93Q291bnQgPSB0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGUgPyBzcmMuZmlsZXMubGVuZ3RoIDogMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbG93Q291bnQ7IGkrKykge1xuICAgICAgZmlsZXMucHVzaChzcmMuZmlsZXNbaV0pO1xuICAgIH1cbiAgICBzcmMudmFsdWUgPSBcIlwiO1xuICAgIHRoaXMucXVlc3Rpb24ubG9hZEZpbGVzKGZpbGVzKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1maWxlXCIsIEZpbGUpO1xuZXhwb3J0IGRlZmF1bHQgRmlsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvZmlsZS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbEJhc2UsIFBhbmVsTW9kZWwsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwiLi4vcGFuZWxcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEZsb3dQYW5lbE1vZGVsIH0gZnJvbSBcIi4uL2Zsb3dwYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRmxvd1BhbmVsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IEZsb3dQYW5lbE1vZGVsO1xuICBAUHJvcCBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCBjc3M6IGFueTtcbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcm9vdE5vZGVWYWx1ZTogTm9kZTtcblxuICBnZXQgcm9vdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdE5vZGVWYWx1ZTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IHNlbGYucmVuZGVyUXVlc3Rpb247XG4gICAgdGhpcy5zZXRSb290Tm9kZSgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRSb290Tm9kZSgpIHtcbiAgICBsZXQgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLnF1ZXN0aW9uLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBsZXQgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucm9vdE5vZGVWYWx1ZSA9XG4gICAgICAhIWRvYyAmJiBkb2MuY2hpbGROb2Rlcy5sZW5ndGggPiAwID8gZG9jLmNoaWxkTm9kZXNbMF0gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxxdWVzdGlvbj5cIiArIHF1ZXN0aW9uLm5hbWUgKyBcIjwvcXVlc3Rpb24+XCI7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInN0YXRlXCIsIGZ1bmN0aW9uKFxuICAgICAgdmFsOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYuaXNDb2xsYXBzZWQgPSBzZWxmLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgIH0pO1xuICB9XG4gIGdldCByb290U3R5bGUoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoKSB7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleEJhc2lzXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4R3Jvd1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1pbldpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5taW5XaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJtYXhXaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmICh0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZClcbiAgICApO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFwic3ZfcGFuZWxfaWNvblwiO1xuICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkgcmVzdWx0ICs9IFwiIHN2X2V4cGFuZGVkXCI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkIHx8IHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCkge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5leHBhbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0VGl0bGVTdHlsZSgpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jc3MucGFuZWwudGl0bGU7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkKSB7XG4gICAgICByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC50aXRsZUV4cGFuZGFibGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxcIiwgRmxvd1BhbmVsKTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi4vc3VydmV5XCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCB9IGZyb20gXCIuLi9mbG93cGFuZWxcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbEVsZW1lbnQgZXh0ZW5kcyBWdWUge1xuICBzdGF0aWMgaWRWYWx1ZTogbnVtYmVyO1xuICBAUHJvcCBub2RlOiBOb2RlO1xuICBAUHJvcCBwYW5lbDogRmxvd1BhbmVsTW9kZWw7XG4gIEBQcm9wIGNzczogYW55O1xuICBwcml2YXRlIGVsZW1lbnRJZFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb24gPSBudWxsO1xuICBwdWJsaWMgdGFnTmFtZTogc3RyaW5nID0gXCJzcGFuXCI7XG4gIHB1YmxpYyBub2RlczogQXJyYXk8Tm9kZT4gPSBbXTtcbiAgcHVibGljIHRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzdHlsZTogYW55ID0ge307XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHB1YmxpYyBnZXQgZWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRJZFZhbHVlKSB7XG4gICAgICBpZiAoIUZsb3dQYW5lbEVsZW1lbnQuaWRWYWx1ZSkge1xuICAgICAgICBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlKys7XG4gICAgICB0aGlzLmVsZW1lbnRJZFZhbHVlID0gXCJmcF9lbFwiICsgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50SWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIDxTdXJ2ZXlNb2RlbD50aGlzLnBhbmVsLnN1cnZleTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwgfHwgIXRoaXMubm9kZSkgcmV0dXJuO1xuICAgIHZhciBub2RlVHlwZSA9IHRoaXMubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghdGhpcy5oYXNUZXh0Q2hpbGROb2Rlc09ubHkodGhpcy5ub2RlKSkge1xuICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVR5cGUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSB0aGlzLnBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKHRoaXMubm9kZS50ZXh0Q29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLm5vZGUudGV4dENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlVHlwZSA9PSBcImRpdlwiICYmICF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnRhZ05hbWUgPSBcImRpdlwiO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5nZXRTdHlsZShub2RlVHlwZSk7XG4gIH1cbiAgLy9kdXBsaWNhdGVkIGNvZGUgZnJvbSBlbGVtZW50LnZ1ZVxuICBnZXRXaWRnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICAvLyBkdXBsaWNhdGVkIGNvZGUgZnJvbSByZWFjdHBhZ2VzLnRzeFxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgdmFyIG5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGlsZERvbU5vZGVzKG5vZGU6IE5vZGUpOiBBcnJheTxOb2RlPiB7XG4gICAgdmFyIGRvbU5vZGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZmxvd3BhbmVsZWxlbWVudFwiLCBGbG93UGFuZWxFbGVtZW50KTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbEVsZW1lbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wXG4gIEBQcm9wXG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgbW91bnRlZCgpIHtcbiAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmRvQWZ0ZXJSZW5kZXJIZWFkZXIoZWwpO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaGVhZGVyXCIsIFN1cnZleUhlYWRlcik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlIZWFkZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL2hlYWRlci52dWUiLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25faHRtbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgSHRtbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIHF1ZXN0aW9uOiBRdWVzdGlvbkh0bWxNb2RlbDtcbiAgQFByb3AgY3NzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWh0bWxcIiwgSHRtbCk7XG5leHBvcnQgZGVmYXVsdCBIdG1sO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9odG1sLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2ltYWdlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBJbWFnZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIHF1ZXN0aW9uOiBRdWVzdGlvbkltYWdlTW9kZWw7XG4gIEBQcm9wIGNzczogYW55O1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1pbWFnZVwiLCBJbWFnZSk7XG5leHBvcnQgZGVmYXVsdCBJbWFnZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvaW1hZ2UudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25faW1hZ2VwaWNrZXJcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEltYWdlUGlja2VyIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsPiB7XG4gIGdldEl0ZW1DbGFzcyhpdGVtOmFueSkge1xuICB2YXIgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gIHZhciBjb2xDb3VudCA9IHF1ZXN0aW9uLmNvbENvdW50O1xuICB2YXIgaXRlbUNsYXNzID1cbiAgICAgIGNzc0NsYXNzZXMuaXRlbSArXG4gICAgICAoY29sQ291bnQgPT09IDBcbiAgICAgICAgPyBcIiBcIiArIGNzc0NsYXNzZXMuaXRlbUlubGluZVxuICAgICAgICA6IFwiIHN2LXEtY29sLVwiICsgY29sQ291bnQpO1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgIHZhciBpc0Rpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7IFxuICAgIHZhciBhbGxvd0hvdmVyID0gIWlzQ2hlY2tlZCAmJiAhaXNEaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgaXRlbUNsYXNzICs9IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQ7XG4gICAgfVxuICAgIGlmIChhbGxvd0hvdmVyKSB7XG4gICAgICBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1Ib3ZlcjtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1pbWFnZXBpY2tlclwiLCBJbWFnZVBpY2tlcik7XG5leHBvcnQgZGVmYXVsdCBJbWFnZVBpY2tlcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25NYXRyaXhNb2RlbD4ge1xuICBnZXRJdGVtQ2xhc3Mocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICB2YXIgaXNEaXNhYmxlZCA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgdmFyIGFsbG93SG92ZXIgPSAhaXNDaGVja2VkICYmICFpc0Rpc2FibGVkO1xuICAgIHZhciBjZWxsRGlzYWJsZWRDbGFzcyA9IHF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICA/IGNzc0NsYXNzZXMuY2VsbFRleHREaXNhYmxlZFxuICAgICAgOiBjc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcblxuICAgIHZhciBjZWxsU2VsZWN0ZWRDbGFzcyA9IHF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICA/IGNzc0NsYXNzZXMuY2VsbFRleHRTZWxlY3RlZFxuICAgICAgOiBjc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuXG4gICAgdmFyIGl0ZW1Ib3ZlckNsYXNzID0gIXF1ZXN0aW9uLmhhc0NlbGxUZXh0ID8gY3NzQ2xhc3Nlcy5pdGVtSG92ZXIgOiBcIlwiO1xuXG4gICAgdmFyIGNlbGxDbGFzcyA9IHF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICA/IGNzc0NsYXNzZXMuY2VsbFRleHRcbiAgICAgIDogY3NzQ2xhc3Nlcy5sYWJlbDtcblxuICAgIGxldCBpdGVtQ2xhc3MgPVxuICAgICAgY2VsbENsYXNzICtcbiAgICAgIChpc0NoZWNrZWQgPyBcIiBcIiArIGNlbGxTZWxlY3RlZENsYXNzIDogXCJcIikgK1xuICAgICAgKGlzRGlzYWJsZWQgPyBcIiBcIiArIGNlbGxEaXNhYmxlZENsYXNzIDogXCJcIikgK1xuICAgICAgKGFsbG93SG92ZXIgPyBcIiBcIiArIGl0ZW1Ib3ZlckNsYXNzIDogXCJcIik7XG4gICAgcmV0dXJuIGl0ZW1DbGFzcztcbiAgfVxuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSkgcmV0dXJuO1xuICAgIHJvdy52YWx1ZSA9IGNvbHVtbi52YWx1ZTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXhcIiwgTWF0cml4KTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4LnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuaW1wb3J0IHtcbiAgTWF0cml4RHJvcGRvd25DZWxsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsXG59IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw7XG5cbiAgaXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGdldFdpZGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudC5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBcInN1cnZleS1jdXN0b213aWRnZXRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUeXBlKCk7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiB0aGlzLmNlbGwuc2hvd0Vycm9yT25Ub3A7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmNlbGwuc2hvd0Vycm9yT25Cb3R0b207XG4gIH1cbiAgZ2V0SGVhZGVycygpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuY2VsbC5xdWVzdGlvbjtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBlbGVtZW50LmlzVmlzaWJsZSA/IHRoaXMuY2VsbC5jZWxsLmNvbHVtbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgOiBcIlwiO1xuICB9XG4gIGdldENlbGxDbGFzcygpIHtcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuY2VsbC5xdWVzdGlvbjtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbDtcblxuICAgIHZhciBjZWxsQ2xhc3MgPSBlbGVtZW50LmNzc0NsYXNzZXMuaXRlbVZhbHVlO1xuXG4gICAgaWYgKCEhZWxlbWVudC5lcnJvcnMgJiYgZWxlbWVudC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY2VsbENsYXNzICs9IFwiIFwiICsgZWxlbWVudC5jc3NDbGFzc2VzLmhhc0Vycm9yO1xuICAgIH1cblxuICAgIGNlbGxDbGFzcyArPSBcIiBcIiArIGVsZW1lbnQuY3NzQ2xhc3Nlcy5hc0NlbGw7XG5cbiAgICByZXR1cm4gY2VsbENsYXNzO1xuICB9XG4gIGdldENlbGxTdHlsZSgpIHtcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0Nob2ljZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHsgXCJ0ZXh0LWFsaWduXCI6IFwiY2VudGVyXCIgfTtcbiAgfVxuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZDtcbiAgICB2YXIgaXNDaGVja2VkID0gaXRlbS52YWx1ZSA9PT0gdGhpcy5jZWxsLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWU7XG4gICAgdmFyIGFsbG93SG92ZXIgPSAhaXNEaXNhYmxlZCAmJiAhaXNDaGVja2VkO1xuICAgIHZhciBpdGVtQ2xhc3MgPSB0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmIChpc0Rpc2FibGVkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIGlmIChhbGxvd0hvdmVyKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1Ib3ZlcjtcbiAgICByZXR1cm4gaXRlbUNsYXNzO1xuICB9XG4gIHJlbW92ZVJvd0NsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUm93VUkodGhpcy5jZWxsLnJvdyk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuY2VsbC5oYXNRdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbiB8fCAhdGhpcy5xdWVzdGlvbi5zdXJ2ZXkpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY2VsbC5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiaXNWaXNpYmxlXCIsXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbC5jZWxsLFxuICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLmNlbGwucXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogdGhpcy4kZWwsXG4gICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtblxuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkubWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHRoaXMucXVlc3Rpb24sIG9wdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgb25WaXNpYmlsaXR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pc1Zpc2libGU7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXhjZWxsXCIsIE1hdHJpeENlbGwpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4Q2VsbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4Y2VsbC52dWUiLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsPiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeGRyb3Bkb3duXCIsIE1hdHJpeERyb3Bkb3duKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeERyb3Bkb3duO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmltcG9ydCB7IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4RHluYW1pYyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsPiB7XG4gIGFkZFJvd0NsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUm93KCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHluYW1pY1wiLCBNYXRyaXhEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeER5bmFtaWM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZVxufSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBNYXRyaXhUYWJsZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIHF1ZXN0aW9uOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICBnZXQgdGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1tYXRyaXh0YWJsZVwiLCBNYXRyaXhUYWJsZSk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXhUYWJsZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4dGFibGUudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVGV4dCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWw+IHtcbiAgZ2V0V2lkZ2V0Q29tcG9uZW50TmFtZShxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAocXVlc3Rpb24uY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS10ZXh0XCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbXVsdGlwbGV0ZXh0XCIsIE11bHRpcGxlVGV4dCk7XG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZVRleHQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3N1cnZleVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4uL3BhZ2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb24gZXh0ZW5kcyBWdWUge1xuICBwcml2YXRlIG1vdXNlRG93blBhZ2U6IFBhZ2VNb2RlbDtcbiAgQFByb3Agc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AgY3NzOiBhbnk7XG4gIG5leHRCdXR0b25Nb3VzZURvd24oKSB7XG4gICAgdGhpcy5tb3VzZURvd25QYWdlID0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2U7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5hdmlnYXRpb25Nb3VzZURvd24oKTtcbiAgfVxuICBidXR0b25Nb3VzZURvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm5hdmlnYXRpb25Nb3VzZURvd24oKTtcbiAgfVxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLnN1cnZleS5wcmV2UGFnZSgpO1xuICB9XG4gIG5leHRQYWdlKCkge1xuICAgIGlmICghIXRoaXMubW91c2VEb3duUGFnZSAmJiB0aGlzLm1vdXNlRG93blBhZ2UgIT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMubW91c2VEb3duUGFnZSA9IG51bGw7XG4gICAgdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKTtcbiAgfVxuICBjb21wbGV0ZUxhc3RQYWdlKCkge1xuICAgIHRoaXMuc3VydmV5LmNvbXBsZXRlTGFzdFBhZ2UoKTtcbiAgfVxuICBzaG93UHJldmlldygpIHtcbiAgICB0aGlzLnN1cnZleS5zaG93UHJldmlldygpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW5hdmlnYXRpb25cIiwgTmF2aWdhdGlvbik7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE90aGVyQ2hvaWNlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBAUHJvcCBjb21tZW50Q2xhc3M6IGFueTtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNvbW1lbnQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAga2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb24uY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1vdGhlci1jaG9pY2VcIiwgT3RoZXJDaG9pY2UpO1xuZXhwb3J0IGRlZmF1bHQgT3RoZXJDaG9pY2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuLi9wYWdlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFnZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wIHBhZ2U6IFBhZ2VNb2RlbDtcbiAgQFByb3AgY3NzOiBPYmplY3Q7XG5cbiAgaXNDdXJyZW50UGFnZUNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsKTtcblxuICAgICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5pc0N1cnJlbnRQYWdlQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlZCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsKTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5zdXJ2ZXkuc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93VGl0bGU7XG4gIH1cbiAgZ2V0IHNob3dEZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLl9zaG93RGVzY3JpcHRpb247XG4gIH1cbiAgZ2V0IG51bSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLm51bSA+IDAgPyB0aGlzLnBhZ2UubnVtICsgXCIuIFwiIDogXCJcIjtcbiAgfVxuICBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlLnJvd3M7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFnZVwiLCBQYWdlKTtcbmV4cG9ydCBkZWZhdWx0IFBhZ2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3BhZ2UudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUGFuZWxNb2RlbCwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgSVN1cnZleSB9IGZyb20gXCIuLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wIHF1ZXN0aW9uOiBQYW5lbE1vZGVsO1xuICBAUHJvcCBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCBjc3M6IGFueTtcbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhdGVcIixcbiAgICAgIGZ1bmN0aW9uKHZhbDogYW55KSB7XG4gICAgICAgIHNlbGYuaXNDb2xsYXBzZWQgPSBzZWxmLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgICAgfSxcbiAgICAgIFwicGFuZWxcIlxuICAgICk7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCBcInBhbmVsXCIpO1xuICB9XG4gIGdldCByb290U3R5bGUoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoKSB7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleEJhc2lzXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4R3Jvd1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1pbldpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5taW5XaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJtYXhXaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmICh0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZClcbiAgICApO1xuICB9XG4gIGdldCByb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJvd3M7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnRpdGxlLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5zdXJ2ZXk7XG4gIH1cbiAgZ2V0IGljb25Dc3MoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3NzLnBhbmVsLmljb247XG4gICAgaWYgKCF0aGlzLmlzQ29sbGFwc2VkKSByZXN1bHQgKz0gXCIgXCIgKyB0aGlzLmNzcy5wYW5lbC5pY29uRXhwYW5kZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkIHx8IHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCkge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5leHBhbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FuY2VsUHJldmlldygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNhbmNlbFByZXZpZXcoKTtcbiAgfVxuICBnZXRUaXRsZVN0eWxlKCkge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmNzcy5wYW5lbC50aXRsZTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCB8fCB0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQpIHtcbiAgICAgIHJlc3VsdCArPSBcIiBcIiArIHRoaXMuY3NzLnBhbmVsLnRpdGxlRXhwYW5kYWJsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvcGFuZWwudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwiLi4vcXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbER5bmFtaWMgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsPiB7XG4gIGdldCByZW5kZXJlZFBhbmVscygpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0KSByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbHM7XG4gICAgdmFyIHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbCkge1xuICAgICAgcGFuZWxzLnB1c2godGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWxzO1xuICB9XG4gIGFkZFBhbmVsQ2xpY2soKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbCgpO1xuICB9XG4gIGdldEJ1dHRvbkFkZENzcyhxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB2YXIgYnRuQ2xhc3NlcyA9XG4gICAgICBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArIFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQ7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgYnRuQ2xhc3NlcyArPSBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkICsgXCItLWxpc3QtbW9kZVwiO1xuICAgIH1cblxuICAgIHJldHVybiBidG5DbGFzc2VzO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXBhbmVsZHluYW1pY1wiLCBQYW5lbER5bmFtaWMpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvdyB9IGZyb20gXCIuLi9rbm9ja291dC9rb3BhZ2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFBhbmVsRHluYW1pY1Byb2dyZXNzIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw7XG5cbiAgZ2V0IGNzc0NsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVG9wOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCb3R0b207XG4gIH1cbiAgZ2V0IHJhbmdlTWF4KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxO1xuICB9XG4gIGFkZFBhbmVsQ2xpY2soKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgcHJldlBhbmVsQ2xpY2soKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvUHJldlBhbmVsKCk7XG4gIH1cbiAgbmV4dFBhbmVsQ2xpY2soKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gIH1cblxuICBjaGFuZ2VSYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cblxuICBnZXRCdXR0b25BZGRDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7fVxuXG4gIGdldEJ1dHRvblByZXZDc3MocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgdmFyIGJ0bkNsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvblByZXY7XG4gICAgaWYgKCFxdWVzdGlvbi5pc1ByZXZCdXR0b25TaG93aW5nKSB7XG4gICAgICBidG5DbGFzc2VzICs9IFwiIFwiICsgcXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25QcmV2ICsgXCItLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBidG5DbGFzc2VzO1xuICB9XG5cbiAgZ2V0QnV0dG9uTmV4dENzcyhxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB2YXIgYnRuQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uTmV4dDtcbiAgICBpZiAoIXF1ZXN0aW9uLmlzTmV4dEJ1dHRvblNob3dpbmcpIHtcbiAgICAgIGJ0bkNsYXNzZXMgKz0gXCIgXCIgKyBxdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbk5leHQgKyBcIi0tZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIGJ0bkNsYXNzZXM7XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4IC8gdGhpcy5yYW5nZU1heCAqIDEwMCArIFwiJVwiO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUHJvZ3Jlc3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi4vcGFuZWxcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUmVtb3ZlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AgcXVlc3Rpb246IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw7XG4gIEBQcm9wIHBhbmVsOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnBhbmVsLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJzdGF0ZVwiLFxuICAgICAgZnVuY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgc2VsZi5pc0NvbGxhcHNlZCA9IHNlbGYucGFuZWwuaXNDb2xsYXBzZWQ7XG4gICAgICB9LFxuICAgICAgXCJidXR0b25cIlxuICAgICk7XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnBhbmVsLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJzdGF0ZVwiLCBcImJ1dHRvblwiKTtcbiAgfVxuICByZW1vdmVQYW5lbENsaWNrKHBhbmVsOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkocGFuZWwpO1xuICB9XG4gIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICB9XG4gIHNldCBpc0NvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSB2YWw7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcmVtb3ZlXCIsIFBhbmVsRHluYW1pY1JlbW92ZSk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbER5bmFtaWNSZW1vdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3N1cnZleVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3MgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCBjc3M6IGFueTtcbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5nZXRQcm9ncmVzcygpICsgXCIlXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcHJvZ3Jlc3NcIiwgUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUHJvZ3Jlc3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBSYWRpb2dyb3VwIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25SYWRpb2dyb3VwTW9kZWw+IHtcbiAgZ2V0IGNob2ljZXNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGggLSAxO1xuICB9XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgaXNEaXNhYmxlZCA9IHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQ7XG4gICAgdmFyIGlzQ2hlY2tlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSB8fCB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCAmJiB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZSA9PT0gaXRlbS52YWx1ZTtcbiAgICB2YXIgYWxsb3dIb3ZlciA9ICFpc0Rpc2FibGVkICYmICFpc0NoZWNrZWQ7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmIChpc0Rpc2FibGVkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1EaXNhYmxlZDtcbiAgICBpZiAoaXNDaGVja2VkKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1DaGVja2VkO1xuICAgIGlmIChhbGxvd0hvdmVyKSBpdGVtQ2xhc3MgKz0gXCIgXCIgKyBjc3NDbGFzc2VzLml0ZW1Ib3ZlcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaGFzQ29sdW1ucykge1xuICAgICAgaXRlbUNsYXNzICs9XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29sQ291bnQgPT09IDBcbiAgICAgICAgICA/IFwiIFwiICsgY3NzQ2xhc3Nlcy5pdGVtSW5saW5lXG4gICAgICAgICAgOiBcIiBzdi1xLWNvbC1cIiArIHRoaXMucXVlc3Rpb24uY29sQ291bnQ7XG4gICAgfVxuICAgIHJldHVybiBpdGVtQ2xhc3M7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cFwiLCBSYWRpb2dyb3VwKTtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvZ3JvdXA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFkaW9ncm91cEl0ZW0gZXh0ZW5kcyBWdWUge1xuICBAUHJvcCBxdWVzdGlvbjogYW55O1xuICBAUHJvcCBpdGVtOiBhbnk7XG4gIEBQcm9wIGluZGV4OiBhbnk7XG4gIEBQcm9wIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgZ2V0TGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKGl0ZW0udmFsdWUgPT09IHRoaXMucXVlc3Rpb24udmFsdWUpO1xuICB9XG4gIGdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW06IGFueSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW0udmFsdWUgPT09IHRoaXMucXVlc3Rpb24udmFsdWUpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCBSYWRpb2dyb3VwSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYWRpb2dyb3VwSXRlbTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9yYXRpbmdcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhdGluZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgZ2V0Q3NzKHF1ZXN0aW9uOiBRdWVzdGlvblJhdGluZ01vZGVsLCBpdGVtOiBhbnkpIHtcbiAgICBsZXQgY3NzID0gcXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtO1xuICAgIGlmIChxdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlKSB7XG4gICAgICBjc3MgPSBjc3MgKyBcIiBcIiArIHF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIHJldHVybiBjc3M7XG4gIH1cbiAgY2hhbmdlKGU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgfVxuICBnZXRSb290Q2xhc3MocXVlc3Rpb246IFF1ZXN0aW9uUmF0aW5nTW9kZWwpIHtcbiAgICBjb25zdCBjbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seSkgcmV0dXJuIGNsYXNzZXMucm9vdCArIFwiIFwiICsgY2xhc3Nlcy5kaXNhYmxlZDtcbiAgICByZXR1cm4gY2xhc3Nlcy5yb290O1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhdGluZ1wiLCBSYXRpbmcpO1xuZXhwb3J0IGRlZmF1bHQgUmF0aW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9yYXRpbmcudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWxCYXNlLCBQYW5lbE1vZGVsLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcIi4uL3BhbmVsXCI7XG5pbXBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleU1vZGVsXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUm93IGV4dGVuZHMgVnVlIHtcbiAgQFByb3Agcm93OiBhbnk7XG4gIEBQcm9wIGNzczogYW55O1xuICBAUHJvcCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBtb3VudGVkKCkge1xuICAgIGlmICghIXRoaXMucm93KSB7XG4gICAgICBWdWVTdXJ2ZXlNb2RlbC51cGRhdGVQcm9wZXJ0aWVzSGFzaCh0aGlzLnJvdyk7XG4gICAgfVxuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJvd1wiLCBSb3cpO1xuZXhwb3J0IGRlZmF1bHQgUm93O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS9yb3cudnVlIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIlxuaW1wb3J0IHtDb21wb25lbnQsIFByb3AsIFdhdGNofSBmcm9tICd2dWUtcHJvcGVydHktZGVjb3JhdG9yJ1xuaW1wb3J0IHtkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlfSBmcm9tICcuL3F1ZXN0aW9uJ1xuaW1wb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZCdcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFNpZ25hdHVyZVBhZCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWw+IHtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc2lnbmF0dXJlcGFkXCIsIFNpZ25hdHVyZVBhZClcbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIlxuaW1wb3J0IHtDb21wb25lbnQsIFByb3B9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InXG5pbXBvcnQge0xvY2FsaXphYmxlU3RyaW5nfSBmcm9tIFwiLi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVN0cmluZyBleHRlbmRzIFZ1ZSB7XG4gICAgQFByb3BcbiAgICBsb2NTdHJpbmc6IExvY2FsaXphYmxlU3RyaW5nXG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc3RyaW5nXCIsIFN1cnZleVN0cmluZylcbmV4cG9ydCBkZWZhdWx0IFN1cnZleVN0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3NyYy92dWUvc3RyaW5nLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcbmltcG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwiLi4vc3R5bGVzbWFuYWdlclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgVnVlIHtcbiAgQFByb3Agc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgcHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlOiBzdHJpbmc7XG5cbiAgZm9yY2VVcGRhdGUoKSB7XG4gICAgdGhpcy4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBtb3VudGVkKCkge1xuICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB0aGlzLmZvcmNlVXBkYXRlO1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZTtcbiAgfVxuICBnZXQgaGFzQ29tcGxldGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIGdldENvbXBsZXRlZFBhZ2VDbGFzc2VzKCkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICByZXR1cm4gY3NzLmJvZHkgKyBcIiBcIiArIGNzcy5jb21wbGV0ZWRQYWdlO1xuICB9XG4gIGdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZFBhZ2UpIHJldHVybiBcIlwiO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlO1xuICB9XG4gIGdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICB9XG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0KCk7XG4gIH1cbiAgZG9UcnlTYXZlQWdhaW4oKSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgc3VydmV5Q3NzIGluIGFsbCBleGFtcGxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleSwgXCJjc3NUeXBlXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5ld1R5cGUpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUobmV3VHlwZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn0pO1xuXG5WdWUuY29tcG9uZW50KFwic3VydmV5XCIsIFN1cnZleSk7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3N1cnZleS52dWUiLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGV4dE1vZGVsIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX3RleHRcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRleHQgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvblRleHRNb2RlbD4ge1xuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbiAga2V5dXAoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktdGV4dFwiLCBUZXh0KTtcbmV4cG9ydCBkZWZhdWx0IFRleHQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9zcmMvdnVlL3RleHQudnVlIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiXG5pbXBvcnQge0NvbXBvbmVudCwgUHJvcH0gZnJvbSAndnVlLXByb3BlcnR5LWRlY29yYXRvcidcbmltcG9ydCB7U3VydmV5TW9kZWx9IGZyb20gJy4uL3N1cnZleSdcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRpbWVyUGFuZWwgZXh0ZW5kcyBWdWUge1xuICAgIEBQcm9wXG4gICAgc3VydmV5OiBTdXJ2ZXlNb2RlbFxuICAgIEBQcm9wXG4gICAgY3NzOiBhbnlcbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpbWVySW5mb1RleHQ7XG4gICAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS10aW1lcnBhbmVsXCIsIFRpbWVyUGFuZWwpXG5leHBvcnQgZGVmYXVsdCBUaW1lclBhbmVsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZSIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uL3N1cnZleVdpbmRvd1wiO1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgV2luZG93IGV4dGVuZHMgVnVlIHtcbiAgQFByb3Agd2luZG93OiBTdXJ2ZXlXaW5kb3dNb2RlbDtcbiAgQFByb3Agc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AgaXNleHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AgY2xvc2VPbkNvbXBsZXRlVGltZW91dDogbnVtYmVyO1xuXG4gIHN1cnZleVdpbmRvdzogU3VydmV5V2luZG93TW9kZWw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKHRoaXMud2luZG93KSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdyA9IHRoaXMud2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdyA9IG5ldyBWdWVTdXJ2ZXlXaW5kb3dNb2RlbChudWxsLCB0aGlzLnN1cnZleSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IHRoaXMuaXNleHBhbmRlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93LmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPSB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQ7XG4gICAgfVxuICAgIHRoaXMuc3VydmV5V2luZG93LmlzU2hvd2luZyA9IHRydWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5V2luZG93LmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmRvSGlkZSgpO1xuICAgIH07XG4gIH1cbiAgZ2V0IHdpbmRvd1N1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5V2luZG93LnN1cnZleTtcbiAgfVxuICBnZXQgY3NzKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuZ2V0Q3NzKCkgOiB7fTtcbiAgfVxuICBnZXQgZXhwYW5kZWRDc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWRcbiAgICAgID8gdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25Db2xsYXBzZWRcbiAgICAgIDogdGhpcy5jc3Mud2luZG93LmhlYWRlci5idXR0b25FeHBhbmRlZDtcbiAgfVxuICBnZXQgaXNFeHBhbmRlZFN1cnZleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZDtcbiAgfVxuICBzZXQgaXNFeHBhbmRlZFN1cnZleSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkID0gdmFsO1xuICB9XG4gIGRvRXhwYW5kKCkge1xuICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSAhdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZDtcbiAgfVxuICBkb0hpZGUoKSB7XG4gICAgVnVlLnNldCh0aGlzLnN1cnZleVdpbmRvdywgXCJpc1Nob3dpbmdcIiwgZmFsc2UpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXdpbmRvd1wiLCBXaW5kb3cpO1xuZXhwb3J0IGRlZmF1bHQgV2luZG93O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3JjL3Z1ZS93aW5kb3cudnVlIiwiaW1wb3J0IHsgQmFzZSwgU3VydmV5RXJyb3IsIElUZXh0UHJvY2Vzc29yLCBJUXVlc3Rpb24gfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFdlYlJlcXVlc3RFcnJvciwgV2ViUmVxdWVzdEVtcHR5RXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG5jbGFzcyBYbWxQYXJzZXIge1xuICBwcml2YXRlIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgcHVibGljIGFzc2lnblZhbHVlKHRhcmdldDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0ucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXV0uY29uY2F0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAxICYmXG4gICAgICBPYmplY3Qua2V5cyh2YWx1ZSlbMF0gPT09IG5hbWVcbiAgICApIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHhtbDJKc29uKHhtbE5vZGU6IGFueSwgcmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoeG1sTm9kZS5jaGlsZHJlbiAmJiB4bWxOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeG1sTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGROb2RlID0geG1sTm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgbGV0IGNoaWxkT2JqZWN0ID0ge307XG4gICAgICAgIHRoaXMueG1sMkpzb24oY2hpbGROb2RlLCBjaGlsZE9iamVjdCk7XG4gICAgICAgIHRoaXMuYXNzaWduVmFsdWUocmVzdWx0LCBjaGlsZE5vZGUubm9kZU5hbWUsIGNoaWxkT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NpZ25WYWx1ZShyZXN1bHQsIHhtbE5vZGUubm9kZU5hbWUsIHhtbE5vZGUudGV4dENvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcGFyc2VYbWxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICBsZXQgeG1sUm9vdCA9IHRoaXMucGFyc2VyLnBhcnNlRnJvbVN0cmluZyh4bWxTdHJpbmcsIFwidGV4dC94bWxcIik7XG4gICAgbGV0IGpzb24gPSB7fTtcbiAgICB0aGlzLnhtbDJKc29uKHhtbFJvb3QsIGpzb24pO1xuICAgIHJldHVybiBqc29uO1xuICB9XG59XG5cbi8qKlxuICogQSBkZWZpbml0aW9uIGZvciBmaWxsaW5nIGNob2ljZXMgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMgZnJvbSByZXNmdWxsIHNlcnZpY2VzLlxuICogVGhlIHJ1biBtZXRob2QgY2FsbCBhIHJlc3RmdWxsIHNlcnZpY2UgYW5kIHJlc3VsdHMgY2FuIGJlIGdldCBvbiBnZXRSZXN1bHRDYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIENob2ljZXNSZXN0ZnVsbCBleHRlbmRzIEJhc2Uge1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLndlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBDaG9pY2VzUmVzdGZ1bGwuaXRlbXNSZXN1bHQgPSB7fTtcbiAgICBDaG9pY2VzUmVzdGZ1bGwuc2VuZGluZ1NhbWVSZXF1ZXN0cyA9IHt9O1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGl0ZW1zUmVzdWx0OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgc2VuZGluZ1NhbWVSZXF1ZXN0czoge1xuICAgIFtpbmRleDogc3RyaW5nXTogQXJyYXk8Q2hvaWNlc1Jlc3RmdWxsPjtcbiAgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBhZGRTYW1lUmVxdWVzdChvYmo6IENob2ljZXNSZXN0ZnVsbCk6IGJvb2xlYW4ge1xuICAgIHZhciBoYXNoID0gb2JqLm9iakhhc2g7XG4gICAgdmFyIHJlcyA9IENob2ljZXNSZXN0ZnVsbC5zZW5kaW5nU2FtZVJlcXVlc3RzW2hhc2hdO1xuICAgIGlmICghcmVzKSB7XG4gICAgICBDaG9pY2VzUmVzdGZ1bGwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF0gPSBbXTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVzLnB1c2gob2JqKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyB1bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKG9iajogQ2hvaWNlc1Jlc3RmdWxsLCBpdGVtczogYW55KSB7XG4gICAgdmFyIHJlcyA9IENob2ljZXNSZXN0ZnVsbC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICBkZWxldGUgQ2hvaWNlc1Jlc3RmdWxsLnNlbmRpbmdTYW1lUmVxdWVzdHNbb2JqLm9iakhhc2hdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoISFyZXNbaV0uZ2V0UmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmVzW2ldLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBvbkJlZm9yZVNlbmRSZXF1ZXN0OiAoXG4gICAgc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bGwsXG4gICAgb3B0aW9uczogeyByZXF1ZXN0OiBYTUxIdHRwUmVxdWVzdCB9XG4gICkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q2FjaGVkSXRlbXNSZXN1bHQob2JqOiBDaG9pY2VzUmVzdGZ1bGwpOiBib29sZWFuIHtcbiAgICB2YXIgaGFzaCA9IG9iai5vYmpIYXNoO1xuICAgIHZhciByZXMgPSBDaG9pY2VzUmVzdGZ1bGwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0T2JqSGFzaDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkVXJsOiBzdHJpbmcgPSBcIlwiO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkUGF0aDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGdldFJlc3VsdENhbGxiYWNrOiAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pID0+IHZvaWQ7XG4gIHB1YmxpYyBiZWZvcmVTZW5kUmVxdWVzdENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgdXBkYXRlUmVzdWx0Q2FsbGJhY2s6IChcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBzZXJ2ZXJSZXN1bHQ6IGFueVxuICApID0+IEFycmF5PEl0ZW1WYWx1ZT47XG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVDYWxsYmFjazogKGl0ZW06IGFueSkgPT4gYW55O1xuICBwdWJsaWMgZXJyb3I6IFN1cnZleUVycm9yID0gbnVsbDtcbiAgcHVibGljIG93bmVyOiBJUXVlc3Rpb247XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIHJ1bih0ZXh0UHJvY2Vzc29yOiBJVGV4dFByb2Nlc3NvciA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMudXJsIHx8ICF0aGlzLmdldFJlc3VsdENhbGxiYWNrKSByZXR1cm47XG4gICAgdGhpcy5wcm9jZXNzZWRUZXh0KHRleHRQcm9jZXNzb3IpO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRVcmwpIHtcbiAgICAgIHRoaXMuZG9FbXB0eVJlc3VsdENhbGxiYWNrKHt9KTtcbiAgICAgIHRoaXMubGFzdE9iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RPYmpIYXNoID09PSB0aGlzLm9iakhhc2gpIHJldHVybjtcbiAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIGlmICh0aGlzLnVzZUNoYW5nZWRJdGVtc1Jlc3VsdHMoKSkgcmV0dXJuO1xuICAgIGlmIChDaG9pY2VzUmVzdGZ1bGwuYWRkU2FtZVJlcXVlc3QodGhpcykpIHJldHVybjtcbiAgICB0aGlzLnNlbmRSZXF1ZXN0KCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc1dhaXRpbmdGb3JQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnVybCAmJiAhdGhpcy5wcm9jZXNzZWRVcmw7XG4gIH1cbiAgcHJvdGVjdGVkIHVzZUNoYW5nZWRJdGVtc1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENob2ljZXNSZXN0ZnVsbC5nZXRDYWNoZWRJdGVtc1Jlc3VsdCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGRvRW1wdHlSZXN1bHRDYWxsYmFjayhzZXJ2ZXJSZXN1bHQ6IGFueSkge1xuICAgIHZhciBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHNlcnZlclJlc3VsdCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xuICB9XG4gIHByaXZhdGUgcHJvY2Vzc2VkVGV4dCh0ZXh0UHJvY2Vzc29yOiBJVGV4dFByb2Nlc3Nvcikge1xuICAgIGlmICh0ZXh0UHJvY2Vzc29yKSB7XG4gICAgICB2YXIgcFVybCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdGhpcy51cmwsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICAgIHZhciBwUGF0aCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdGhpcy5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgc2V0dGluZ3Mud2Vic2VydmljZUVuY29kZVBhcmFtZXRlcnNcbiAgICAgICk7XG4gICAgICBpZiAoIXBVcmwuaGFzQWxsVmFsdWVzT25MYXN0UnVuIHx8ICFwUGF0aC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBcIlwiO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSBwVXJsLnRleHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IHBQYXRoLnRleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsID0gdGhpcy51cmw7XG4gICAgICB0aGlzLnByb2Nlc3NlZFBhdGggPSB0aGlzLnBhdGg7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBhbnkpIHtcbiAgICBsZXQgcGFyc2VkUmVzcG9uc2U7XG4gICAgaWYgKFxuICAgICAgISFyZXNwb25zZSAmJlxuICAgICAgdHlwZW9mIHJlc3BvbnNlLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgcmVzcG9uc2UuaW5kZXhPZihcIjxcIikgPT09IDBcbiAgICApIHtcbiAgICAgIHZhciBwYXJzZXIgPSBuZXcgWG1sUGFyc2VyKCk7XG4gICAgICBwYXJzZWRSZXNwb25zZSA9IHBhcnNlci5wYXJzZVhtbFN0cmluZyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcGFyc2VkUmVzcG9uc2UgPSAocmVzcG9uc2UgfHwgXCJcIilcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAubWFwKChzOiBhbnkpID0+IHMudHJpbShcIiBcIikpXG4gICAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiAhIXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNlbmRSZXF1ZXN0KCkge1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcIkdFVFwiLCB0aGlzLnByb2Nlc3NlZFVybCk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBsb2FkaW5nT2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBzZWxmLm9uTG9hZChzZWxmLnBhcnNlUmVzcG9uc2UoeGhyLnJlc3BvbnNlKSwgbG9hZGluZ09iakhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5vbkVycm9yKHhoci5zdGF0dXNUZXh0LCB4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvcHRpb25zID0geyByZXF1ZXN0OiB4aHIgfTtcbiAgICBpZiAoISFDaG9pY2VzUmVzdGZ1bGwub25CZWZvcmVTZW5kUmVxdWVzdCkge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWxsLm9uQmVmb3JlU2VuZFJlcXVlc3QodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYmVmb3JlU2VuZFJlcXVlc3QoKTtcbiAgICBvcHRpb25zLnJlcXVlc3Quc2VuZCgpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2hvaWNlc0J5VXJsXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51cmwgJiYgIXRoaXMucGF0aCAmJiAhdGhpcy52YWx1ZU5hbWUgJiYgIXRoaXMudGl0bGVOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRDdXN0b21Qcm9wZXJ0aWVzTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXMoKTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnRpZXNbaV0ubmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lICsgXCJOYW1lXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21Qcm9wZXJ0aWVzKCk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKHRoaXMuaXRlbVZhbHVlVHlwZSk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwidmFsdWVcIiB8fFxuICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwidGV4dFwiIHx8XG4gICAgICAgIHByb3BlcnRpZXNbaV0ubmFtZSA9PT0gXCJ2aXNpYmxlSWZcIiB8fFxuICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwiZW5hYmxlSWZcIlxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhKGpzb246IGFueSkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBpZihqc29uLnVybCkgdGhpcy51cmwgPSBqc29uLnVybDtcbiAgICBpZihqc29uLnBhdGgpIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcbiAgICBpZihqc29uLnZhbHVlTmFtZSkgdGhpcy52YWx1ZU5hbWUgPSBqc29uLnZhbHVlTmFtZTtcbiAgICBpZihqc29uLnRpdGxlTmFtZSkgdGhpcy50aXRsZU5hbWUgPSBqc29uLnRpdGxlTmFtZTtcbiAgICBpZihqc29uLmFsbG93RW1wdHlSZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB0aGlzLmFsbG93RW1wdHlSZXNwb25zZSA9IGpzb24uYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmKGpzb24uYXR0YWNoT3JpZ2luYWxJdGVtcyAhPT0gdW5kZWZpbmVkKSB0aGlzLmF0dGFjaE9yaWdpbmFsSXRlbXMgPSBqc29uLmF0dGFjaE9yaWdpbmFsSXRlbXM7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihqc29uW3Byb3BlcnRpZXNbaV1dKSAoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXSA9IGpzb25bcHJvcGVydGllc1tpXV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREYXRhKCk6IGFueSB7XG4gICAgaWYodGhpcy5pc0VtcHR5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICBpZih0aGlzLnVybCkgcmVzW1widXJsXCJdID0gdGhpcy51cmw7XG4gICAgaWYodGhpcy5wYXRoKSByZXNbXCJwYXRoXCJdID0gdGhpcy5wYXRoO1xuICAgIGlmKHRoaXMudmFsdWVOYW1lKSByZXNbXCJ2YWx1ZU5hbWVcIl0gPSB0aGlzLnZhbHVlTmFtZTtcbiAgICBpZih0aGlzLnRpdGxlTmFtZSkgcmVzW1widGl0bGVOYW1lXCJdID0gdGhpcy50aXRsZU5hbWU7XG4gICAgaWYodGhpcy5hbGxvd0VtcHR5UmVzcG9uc2UpIHJlc1tcImFsbG93RW1wdHlSZXNwb25zZVwiXSA9IHRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmKHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcykgcmVzW1wiYXR0YWNoT3JpZ2luYWxJdGVtc1wiXSA9IHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcztcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKCg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dKVxuICAgICAgICByZXNbcHJvcGVydGllc1tpXV0gPSAoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ1cmxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB1cmwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1cmxcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGF0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJwYXRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0VtcHR5UmVzcG9uc2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93RW1wdHlSZXNwb25zZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0VtcHR5UmVzcG9uc2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dFbXB0eVJlc3BvbnNlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBhdHRhY2hPcmlnaW5hbEl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGF0dGFjaE9yaWdpbmFsSXRlbXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXR0YWNoT3JpZ2luYWxJdGVtc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbVZhbHVlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLm93bmVyLmdldFR5cGUoKSwgXCJjaG9pY2VzXCIpO1xuICAgIGlmICghcHJvcCkgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gICAgaWYgKHByb3AudHlwZSA9PSBcIml0ZW12YWx1ZVtdXCIpIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIHJldHVybiBwcm9wLnR5cGU7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMudXJsID0gXCJcIjtcbiAgICB0aGlzLnBhdGggPSBcIlwiO1xuICAgIHRoaXMudmFsdWVOYW1lID0gXCJcIjtcbiAgICB0aGlzLnRpdGxlTmFtZSA9IFwiXCI7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dKSAoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXSA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZW5kUmVxdWVzdCgpIHtcbiAgICBpZiAoISF0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkKHJlc3VsdDogYW55LCBsb2FkaW5nT2JqSGFzaDogc3RyaW5nID0gbnVsbCkge1xuICAgIGlmICghbG9hZGluZ09iakhhc2gpIHtcbiAgICAgIGxvYWRpbmdPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgIH1cbiAgICB2YXIgaXRlbXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICAgIHZhciB1cGRhdGVkUmVzdWx0ID0gdGhpcy5nZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0KTtcbiAgICBpZiAodXBkYXRlZFJlc3VsdCAmJiB1cGRhdGVkUmVzdWx0W1wibGVuZ3RoXCJdKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZWRSZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IHVwZGF0ZWRSZXN1bHRbaV07XG4gICAgICAgIGlmICghaXRlbVZhbHVlKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHZhbHVlID0gISF0aGlzLmdldEl0ZW1WYWx1ZUNhbGxiYWNrXG4gICAgICAgICAgPyB0aGlzLmdldEl0ZW1WYWx1ZUNhbGxiYWNrKGl0ZW1WYWx1ZSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWUoaXRlbVZhbHVlKTtcbiAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtVmFsdWUpO1xuICAgICAgICB2YXIgaXRlbSA9IG5ldyBJdGVtVmFsdWUodmFsdWUsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21Qcm9wZXJ0aWVzKGl0ZW0sIGl0ZW1WYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaE9yaWdpbmFsSXRlbXMpIHtcbiAgICAgICAgICBpdGVtLm9yaWdpbmFsSXRlbSA9IGl0ZW1WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVtcHR5RXJyb3IobnVsbCwgdGhpcy5vd25lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIENob2ljZXNSZXN0ZnVsbC5pdGVtc1Jlc3VsdFtsb2FkaW5nT2JqSGFzaF0gPSBpdGVtcztcbiAgICB0aGlzLmNhbGxSZXN1bHRDYWxsYmFjayhpdGVtcywgbG9hZGluZ09iakhhc2gpO1xuICAgIENob2ljZXNSZXN0ZnVsbC51bnJlZ2lzdGVyU2FtZVJlcXVlc3RzKHRoaXMsIGl0ZW1zKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsbFJlc3VsdENhbGxiYWNrKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIGxvYWRpbmdPYmpIYXNoOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGxvYWRpbmdPYmpIYXNoICE9IHRoaXMub2JqSGFzaCkgcmV0dXJuO1xuICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xuICB9XG4gIHByaXZhdGUgc2V0Q3VzdG9tUHJvcGVydGllcyhpdGVtOiBJdGVtVmFsdWUsIGl0ZW1WYWx1ZTogYW55KSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQ29yZShcbiAgICAgICAgaXRlbVZhbHVlLFxuICAgICAgICB0aGlzLmdldFByb3BlcnR5QmluZGluZyhwcm9wLm5hbWUpXG4gICAgICApO1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgICg8YW55Pml0ZW0pW3Byb3AubmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydHlCaW5kaW5nKHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldKVxuICAgICAgcmV0dXJuICg8YW55PnRoaXMpW3RoaXMuZ2V0Q3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSldO1xuICAgIGlmICgoPGFueT50aGlzKVtwcm9wZXJ0eU5hbWVdKSByZXR1cm4gKDxhbnk+dGhpcylbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICB9XG4gIHByaXZhdGUgb25FcnJvcihzdGF0dXM6IHN0cmluZywgcmVzcG9uc2U6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVycm9yKHN0YXR1cywgcmVzcG9uc2UsIHRoaXMub3duZXIpO1xuICAgIHRoaXMuZG9FbXB0eVJlc3VsdENhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICBDaG9pY2VzUmVzdGZ1bGwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBbXSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkUGF0aCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgcGF0aGVzID0gdGhpcy5nZXRQYXRoZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYXRoZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHBhdGhlcyA9IFtdO1xuICAgIGlmICh0aGlzLnByb2Nlc3NlZFBhdGguaW5kZXhPZihcIjtcIikgPiAtMSkge1xuICAgICAgcGF0aGVzID0gdGhpcy5wYXRoLnNwbGl0KFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aGVzID0gdGhpcy5wcm9jZXNzZWRQYXRoLnNwbGl0KFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHBhdGhlcy5sZW5ndGggPT0gMCkgcGF0aGVzLnB1c2godGhpcy5wcm9jZXNzZWRQYXRoKTtcbiAgICByZXR1cm4gcGF0aGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKGl0ZW0sIHRoaXMudmFsdWVOYW1lKTtcbiAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIGl0ZW07XG4gICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcbiAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xuICB9XG4gIHByaXZhdGUgZ2V0VGl0bGUoaXRlbTogYW55KTogYW55IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnRpdGxlTmFtZSA/IHRoaXMudGl0bGVOYW1lIDogXCJ0aXRsZVwiO1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShpdGVtLCB0aXRsZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZUNvcmUoaXRlbTogYW55LCBwcm9wZXJ0eTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKFwiLlwiKSA8IDApIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHByb3BlcnR5LnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBpdGVtW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgb2JqSGFzaCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgK1xuICAgICAgXCI7XCIgK1xuICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudmFsdWVOYW1lICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMudGl0bGVOYW1lXG4gICAgKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNob2ljZXNCeVVybFwiLFxuICBbXG4gICAgXCJ1cmxcIixcbiAgICBcInBhdGhcIixcbiAgICBcInZhbHVlTmFtZVwiLFxuICAgIFwidGl0bGVOYW1lXCIsXG4gICAgeyBuYW1lOiBcImFsbG93RW1wdHlSZXNwb25zZTpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImF0dGFjaE9yaWdpbmFsSXRlbXM6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfVxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bGwoKTtcbiAgfVxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jaG9pY2VzUmVzdGZ1bGwudHMiLCJpbXBvcnQgeyBPcGVyYW5kLCBDb25zdCB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBTeW50YXhFcnJvciwgcGFyc2UgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uUGFyc2VyXCI7XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25zUGFyc2VyRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgYXQ6IG51bWJlciwgcHVibGljIGNvZGU6IHN0cmluZykge31cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbnNQYXJzZXIge1xuICBwcml2YXRlIGNvbmRpdGlvbkVycm9yOiBDb25kaXRpb25zUGFyc2VyRXJyb3I7XG4gIHByaXZhdGUgc3RhdGljIHBhcnNlckNhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogT3BlcmFuZCB9ID0ge307XG5cbiAgcHJpdmF0ZSBwYXRjaEV4cHJlc3Npb24odGV4dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRleHRcbiAgICAgIC5yZXBsYWNlKC89Pi9nLCBcIj49XCIpXG4gICAgICAucmVwbGFjZSgvPTwvZywgXCI8PVwiKVxuICAgICAgLnJlcGxhY2UoLzw+L2csIFwiIT1cIilcbiAgICAgIC5yZXBsYWNlKC89PS9nLCBcIj0gXCIpXG4gICAgICAucmVwbGFjZSgvZXF1YWxzL2csIFwiZXF1YWwgXCIpXG4gICAgICAucmVwbGFjZSgvbm90ZXF1YWxzL2csIFwibm90ZXF1YWwgXCIpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNvbmRpdGlvbih0ZXh0OiBzdHJpbmcpOiBPcGVyYW5kIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb24odGV4dCk7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VFeHByZXNzaW9uKHRleHQ6IHN0cmluZyk6IE9wZXJhbmQge1xuICAgIHRyeSB7XG4gICAgICB2YXIgcmVzdWx0ID0gQ29uZGl0aW9uc1BhcnNlci5wYXJzZXJDYWNoZVt0ZXh0XTtcbiAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSBwYXJzZSh0aGlzLnBhdGNoRXhwcmVzc2lvbih0ZXh0KSk7XG4gICAgICAgIGlmICghcmVzdWx0Lmhhc0FzeW5jRnVuY3Rpb24oKSkge1xuICAgICAgICAgIENvbmRpdGlvbnNQYXJzZXIucGFyc2VyQ2FjaGVbdGV4dF0gPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkVycm9yID0gbmV3IENvbmRpdGlvbnNQYXJzZXJFcnJvcihcbiAgICAgICAgICBlLmxvY2F0aW9uLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgICBlLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yKCk6IENvbmRpdGlvbnNQYXJzZXJFcnJvciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRXJyb3I7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25kaXRpb25zUGFyc2VyLnRzIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuLyoqXG4gKiBUaGUgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB0byB3b3JrIHdpdGggYXBpLnN1cnZleWpzLmlvIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBkeFN1cnZleVNlcnZpY2Uge1xuICBwdWJsaWMgc3RhdGljIGdldCBzZXJ2aWNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnN1cnZleVNlcnZpY2VVcmw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgc2VydmljZVVybCh2YWw6IHN0cmluZykge1xuICAgIHNldHRpbmdzLnN1cnZleVNlcnZpY2VVcmwgPSB2YWw7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7fVxuICBwdWJsaWMgbG9hZFN1cnZleShcbiAgICBzdXJ2ZXlJZDogc3RyaW5nLFxuICAgIG9uTG9hZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL2dldFN1cnZleT9zdXJ2ZXlJZD1cIiArIHN1cnZleUlkXG4gICAgKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5SnNvbkFuZElzQ29tcGxldGVkKFxuICAgIHN1cnZleUlkOiBzdHJpbmcsXG4gICAgY2xpZW50SWQ6IHN0cmluZyxcbiAgICBvbkxvYWQ6IChcbiAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICBzdXJ2ZXlKc29uOiBhbnksXG4gICAgICByZXN1bHQ6IHN0cmluZyxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFxuICAgICAgXCJHRVRcIixcbiAgICAgIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICtcbiAgICAgICAgXCIvZ2V0U3VydmV5QW5kSXNDb21wbGV0ZWQ/c3VydmV5SWQ9XCIgK1xuICAgICAgICBzdXJ2ZXlJZCArXG4gICAgICAgIFwiJmNsaWVudElkPVwiICtcbiAgICAgICAgY2xpZW50SWRcbiAgICApO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgdmFyIHN1cnZleUpzb24gPSByZXN1bHQgPyByZXN1bHQuc3VydmV5IDogbnVsbDtcbiAgICAgIHZhciBpc0NvbXBsZXRlZCA9IHJlc3VsdCA/IHJlc3VsdC5pc0NvbXBsZXRlZCA6IG51bGw7XG4gICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHN1cnZleUpzb24sIGlzQ29tcGxldGVkLCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgc2VuZFJlc3VsdChcbiAgICBwb3N0SWQ6IHN0cmluZyxcbiAgICByZXN1bHQ6IEpTT04sXG4gICAgb25TZW5kUmVzdWx0OiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgcmVxdWVzdD86IGFueSkgPT4gdm9pZCxcbiAgICBjbGllbnRJZDogc3RyaW5nID0gbnVsbCxcbiAgICBpc1BhcnRpYWxDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvcG9zdC9cIik7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgIHZhciBkYXRhID0geyBwb3N0SWQ6IHBvc3RJZCwgc3VydmV5UmVzdWx0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQpIH07XG4gICAgaWYgKGNsaWVudElkKSAoPGFueT5kYXRhKVtcImNsaWVudElkXCJdID0gY2xpZW50SWQ7XG4gICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCkgKDxhbnk+ZGF0YSlbXCJpc1BhcnRpYWxDb21wbGV0ZWRcIl0gPSB0cnVlO1xuICAgIHZhciBkYXRhU3RyaW5naWZ5OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvblNlbmRSZXN1bHQpIHJldHVybjtcbiAgICAgIG9uU2VuZFJlc3VsdCh4aHIuc3RhdHVzID09PSAyMDAsIHhoci5yZXNwb25zZSwgeGhyKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKGRhdGFTdHJpbmdpZnkpO1xuICB9XG4gIHB1YmxpYyBzZW5kRmlsZShcbiAgICBwb3N0SWQ6IHN0cmluZyxcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9uU2VuZEZpbGU6IChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9uU2VuZEZpbGUpIHJldHVybjtcbiAgICAgIG9uU2VuZEZpbGUoeGhyLnN0YXR1cyA9PSAyMDAsIEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSk7XG4gICAgfTtcbiAgICB4aHIub3BlbihcIlBPU1RcIiwgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi91cGxvYWQvXCIsIHRydWUpO1xuICAgIHZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwicG9zdElkXCIsIHBvc3RJZCk7XG4gICAgeGhyLnNlbmQoZm9ybURhdGEpO1xuICB9XG4gIHB1YmxpYyBnZXRSZXN1bHQoXG4gICAgcmVzdWx0SWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25HZXRSZXN1bHQ6IChcbiAgICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgICBkYXRhOiBhbnksXG4gICAgICBkYXRhTGlzdDogQXJyYXk8YW55PixcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHZhciBkYXRhID0gXCJyZXN1bHRJZD1cIiArIHJlc3VsdElkICsgXCImbmFtZT1cIiArIG5hbWU7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9nZXRSZXN1bHQ/XCIgKyBkYXRhKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgdmFyIGxpc3QgPSBudWxsO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgbGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzdWx0LlF1ZXN0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGVsID0geyBuYW1lOiBrZXksIHZhbHVlOiByZXN1bHQuUXVlc3Rpb25SZXN1bHRba2V5XSB9O1xuICAgICAgICAgIGxpc3QucHVzaChlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9uR2V0UmVzdWx0KHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIGxpc3QsIHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG4gIHB1YmxpYyBpc0NvbXBsZXRlZChcbiAgICByZXN1bHRJZDogc3RyaW5nLFxuICAgIGNsaWVudElkOiBzdHJpbmcsXG4gICAgb25Jc0NvbXBsZXRlZDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgZGF0YSA9IFwicmVzdWx0SWQ9XCIgKyByZXN1bHRJZCArIFwiJmNsaWVudElkPVwiICsgY2xpZW50SWQ7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9pc0NvbXBsZXRlZD9cIiArIGRhdGEpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgb25Jc0NvbXBsZXRlZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2R4U3VydmV5U2VydmljZS50cyIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbi8vaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBlbmdsaXNoU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXZpb3VzXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJOZXh0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZVwiLFxuICBwcmV2aWV3VGV4dDogXCJQcmV2aWV3XCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3RoZXIgKGRlc2NyaWJlKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTm9uZVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBvZiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlY29yZCB7MH0gb2YgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJBbnN3ZXJlZCB7MH0vezF9IHF1ZXN0aW9uc1wiLFxuICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUaGFuayB5b3UgZm9yIGNvbXBsZXRpbmcgdGhlIHN1cnZleSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk91ciByZWNvcmRzIHNob3cgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIHN1cnZleS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMb2FkaW5nIFN1cnZleS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaG9vc2UuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQbGVhc2UgYW5zd2VyIHRoZSBxdWVzdGlvbi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUGxlYXNlIGFuc3dlciBhdCBsZWFzdCBvbmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGxlYXNlIGFuc3dlciBxdWVzdGlvbnMgaW4gYWxsIHJvd3MuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIGJlIG51bWVyaWMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlBsZWFzZSBlbnRlciBsZXNzIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIG1vcmUgdGhhbiB7MH0gYW5kIGxlc3MgdGhhbiB7MX0gY2hhcmFjdGVycy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQbGVhc2UgZmlsbCBpbiBhdCBsZWFzdCB7MH0gcm93cy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudHMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlBsZWFzZSBzZWxlY3Qgbm8gbW9yZSB0aGFuIHswfSB2YXJpYW50cy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfSBhbmQgZXF1YWwgb3IgbGVzcyB0aGFuIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbW9yZSB0aGFuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlRoZSAnezB9JyBzaG91bGQgYmUgZXF1YWwgb3IgbGVzcyB0aGFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0gc2hvdWxkIHJldHVybiAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJUaGUgcmVxdWVzdCByZXR1cm5lZCBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVtcHR5IGRhdGEgb3IgdGhlICdwYXRoJyBwcm9wZXJ0eSBpcyBpbmNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJUaGUgZmlsZSBzaXplIHNob3VsZCBub3QgZXhjZWVkIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBsZWFzZSBlbnRlciB0aGUgb3RoZXIgdmFsdWUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJZb3VyIGZpbGUgaXMgdXBsb2FkaW5nLiBQbGVhc2Ugd2FpdCBzZXZlcmFsIHNlY29uZHMgYW5kIHRyeSBhZ2Fpbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNob29zZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBmaWxlIGNob3NlblwiLFxuICBjb25maXJtRGVsZXRlOiBcIkRvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIkFkZCBjb2x1bW5cIixcbiAgYWRkUm93OiBcIkFkZCByb3dcIixcbiAgcmVtb3ZlUm93OiBcIlJlbW92ZVwiLFxuICBhZGRQYW5lbDogXCJBZGQgbmV3XCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVtblwiLFxuICBtYXRyaXhfcm93OiBcIlJvd1wiLFxuICBzYXZpbmdEYXRhOiBcIlRoZSByZXN1bHRzIGFyZSBzYXZpbmcgb24gdGhlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJyZWQgYW5kIHdlIGNvdWxkIG5vdCBzYXZlIHRoZSByZXN1bHRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ2xlYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNob29zZSBmaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZSB0aGlzIGZpbGVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJZZXNcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGZpbGU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZmlsZXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJRdWVzdGlvbiBUaXRsZVwiLFxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG4vL3N1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZW5cIl0gPSBlbmdsaXNoU3RyaW5ncztcbi8vc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcIkVuZ2xpc2hcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZW5nbGlzaC50cyIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggYmFzZSBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPFRSb3csIFRDb2x1bW4+IGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxUQ29sdW1uPjtcbiAgcHJvdGVjdGVkIGZpbHRlcmVkUm93czogQXJyYXk8SXRlbVZhbHVlPjtcbiAgcHJvdGVjdGVkIGdlbmVyYXRlZFZpc2libGVSb3dzOiBBcnJheTxUUm93PiA9IG51bGw7XG4gIHByb3RlY3RlZCBnZW5lcmF0ZWRUb3RhbFJvdzogVFJvdyA9IG51bGw7XG4gIHB1YmxpYyB2aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNvbHVtbnNcIik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gbnVsbDtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNyZWF0ZUNvbHVtblZhbHVlcygpO1xuICAgIHRoaXMucm93cyA9IHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcInJvd3NcIik7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhiYXNlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBbGxvd1RpdGxlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byBoaWRlIHRhYmxlIGhlYWRlci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dIZWFkZXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBjb2x1bW5zLiBBIGNvbHVtbiBoYXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgdGV4dFxuICAgKi9cbiAgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIik7XG4gIH1cbiAgc2V0IGNvbHVtbnMobmV3VmFsdWU6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zXCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiAhIXRoaXMuZmlsdGVyZWRDb2x1bW5zID8gdGhpcy5maWx0ZXJlZENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHJvd3MuIEEgcm93IGhhcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCB0ZXh0XG4gICAqL1xuICBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBzZXQgcm93cyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xuICAgIHZhciBuZXdSb3dzID0gdGhpcy5wcm9jZXNzUm93c09uU2V0KG5ld1ZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIG5ld1Jvd3MpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jvd3NPblNldChuZXdSb3dzOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIG5ld1Jvd3M7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZpc2libGVSb3dzKCk6IEFycmF5PFRSb3c+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgdmlzaWJsZSByb3dzIGFzIG1vZGVsIG9iamVjdHMuXG4gICAqIEBzZWUgcm93c1Zpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlUm93cygpOiBBcnJheTxUUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCByb3cgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCByb3dzVmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NWaXNpYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCByb3dzVmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSXQgcnVucyBhZ2FpbnN0IGVhY2ggY29sdW1uIGl0ZW0gYW5kIGlmIGZvciB0aGlzIGl0ZW0gaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSBpdGVtIGlzIHZpc2libGUgb3RoZXJ3aXNlIHRoZSBpdGVtIGJlY29tZXMgaW52aXNpYmxlLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbnNWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uc1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbHVtbnNWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGZpbHRlckl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZykge1xuICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8ICF0aGlzLmRhdGEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5ydW5JdGVtc0NvbmRpdGlvbihcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ29sdW1uc0NoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgb25Sb3dzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2hvdWxkUnVuQ29sdW1uRXhwcmVzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUm93c0FzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLmZpbHRlcmVkUm93cyAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBvbGRWaXNpYmxlUm93cyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbGRWaXNpYmxlUm93cy5wdXNoKHRoaXMuZmlsdGVyZWRSb3dzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGhhc0NoYW5nZXMgPVxuICAgICAgdGhpcy5oYXNSb3dzQXNJdGVtcygpICYmIHRoaXMucnVuQ29uZGl0aW9uc0ZvclJvd3ModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB2YXIgaGFzQ29sdW1uc0NoYW5nZWQgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaGFzQ2hhbmdlcyA9IGhhc0NvbHVtbnNDaGFuZ2VkIHx8IGhhc0NoYW5nZXM7XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIGlmICghIXRoaXMuZmlsdGVyZWRDb2x1bW5zIHx8ICEhdGhpcy5maWx0ZXJlZFJvd3MpIHtcbiAgICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgfVxuICAgICAgaWYgKCEhb2xkVmlzaWJsZVJvd3MpIHtcbiAgICAgICAgdGhpcy5yZXN0b3JlTmV3VmlzaWJsZVJvd3NWYWx1ZXMob2xkVmlzaWJsZVJvd3MpO1xuICAgICAgfVxuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgICBpZiAoaGFzQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZXM7XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25zRm9yUm93cyhcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBydW5uZXIgPSAhIXRoaXMucm93c1Zpc2libGVJZlxuICAgICAgPyBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMucm93c1Zpc2libGVJZilcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHJ1bm5lciA9ICEhdGhpcy5jb2x1bW5zVmlzaWJsZUlmXG4gICAgICA/IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5jb2x1bW5zVmlzaWJsZUlmKVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gW107XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBJdGVtVmFsdWUucnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgPGFueT50aGlzLmZpbHRlcmVkQ29sdW1ucyxcbiAgICAgIHJ1bm5lcixcbiAgICAgIHZhbHVlcyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICB0aGlzLnNob3VsZFJ1bkNvbHVtbkV4cHJlc3Npb24oKVxuICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRDb2x1bW5zLmxlbmd0aCA9PT0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsID0gbnVsbDtcbiAgICB2YXIgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgdmFyIGNvbHVtbnMgPSAhIXRoaXMuZmlsdGVyZWRDb2x1bW5zID8gdGhpcy5maWx0ZXJlZENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKFxuICAgICAgICBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUocm93cywga2V5KSAmJlxuICAgICAgICBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoY29sdW1ucywgdmFsW2tleV0pXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PSBudWxsKSBuZXdWYWwgPSB7fTtcbiAgICAgICAgKDxhbnk+bmV3VmFsKVtrZXldID0gdmFsW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgIH1cbiAgICBzdXBlci5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybjtcbiAgICB2YXIgbmV3RGF0YSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcm93c1tpXS52YWx1ZTtcbiAgICAgIGlmICghIW5ld0RhdGFba2V5XSAmJiAhcm93c1tpXS5pc1Zpc2libGUpIHtcbiAgICAgICAgZGVsZXRlIG5ld0RhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdEYXRhLCB0aGlzLnZhbHVlKSkgcmV0dXJuO1xuICAgIHRoaXMudmFsdWUgPSBuZXdEYXRhO1xuICB9XG4gIHByaXZhdGUgcmVzdG9yZU5ld1Zpc2libGVSb3dzVmFsdWVzKG9sZFZpc2libGVSb3dzOiBhbnkpIHtcbiAgICB2YXIgcm93cyA9ICEhdGhpcy5maWx0ZXJlZFJvd3MgPyB0aGlzLmZpbHRlcmVkUm93cyA6IHRoaXMucm93cztcbiAgICB2YXIgdmFsID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gSGVscGVycy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB2YXIgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKFxuICAgICAgICBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUocm93cywga2V5KSAmJlxuICAgICAgICAhSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKG9sZFZpc2libGVSb3dzLCBrZXkpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09IG51bGwpIG5ld1ZhbHVlID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbHVlKVtrZXldID0gdmFsW2tleV07XG4gICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhiYXNlXCIsXG4gIFtcbiAgICBcImNvbHVtbnNWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyb3dzVmlzaWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIHsgbmFtZTogXCJzaG93SGVhZGVyOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9XG4gIF0sXG4gIHVuZGVmaW5lZCxcbiAgXCJxdWVzdGlvblwiXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL21hcnRpeEJhc2UudHMiLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgSVBhZ2UsXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIFN1cnZleUVsZW1lbnRcbn0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgRHJhZ0Ryb3BJbmZvLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5cbi8qKlxuICogVGhlIHBhZ2Ugb2JqZWN0LiBJdCBoYXMgZWxlbWVudHMgY29sbGVjdGlvbiwgdGhhdCBjb250YWlucyBxdWVzdGlvbnMgYW5kIHBhbmVscy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VNb2RlbCBleHRlbmRzIFBhbmVsTW9kZWxCYXNlIGltcGxlbWVudHMgSVBhZ2Uge1xuICBwcml2YXRlIGhhc1Nob3duVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5sb2NUaXRsZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIGlmIChzZWxmLm51bSA+IDApIHJldHVybiBzZWxmLm51bSArIFwiLiBcIiArIHRleHQ7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFnZVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhZ2UoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGRlbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxmRnJvbUxpc3QodGhpcy5zdXJ2ZXkucGFnZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy53YXNTaG93bikgcmV0dXJuO1xuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhZ2UuIEl0IGhhcyB2YWx1ZXMgZnJvbSAwIHRvIHZpc2libGUgcGFnZSBjb3VudCAtIDEuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwudmlzaWJsZVBhZ2VzXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGUgcGFnZSBpcyBzdGFydGVkIHBhZ2UgaW4gdGhlIHN1cnZleS4gSXQgY2FuIGJlIHNob3duIG9uIHRoZSBzdGFydCBvbmx5IGFuZCB0aGUgZW5kLXVzZXIgY291bGQgbm90IGNvbWViYWNrIHRvIGl0IGFmdGVyIGl0IHBhc3NlZCBpdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc1BhZ2VTdGFydGVkKHRoaXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHZhciBjc3MgPSB0aGlzLmNzcztcbiAgICB2YXIgY2xhc3NlcyA9IHsgcGFnZToge30sIHBhZ2VUaXRsZTogXCJcIiwgcGFnZURlc2NyaXB0aW9uOiBcIlwiLCByb3c6IFwiXCIgfTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMucGFnZSwgY3NzLnBhZ2UpO1xuICAgIGlmICghIWNzcy5wYWdlVGl0bGUpIHtcbiAgICAgIGNsYXNzZXMucGFnZVRpdGxlID0gY3NzLnBhZ2VUaXRsZTtcbiAgICB9XG4gICAgaWYgKCEhY3NzLnBhZ2VEZXNjcmlwdGlvbikge1xuICAgICAgY2xhc3Nlcy5wYWdlRGVzY3JpcHRpb24gPSBjc3MucGFnZURlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAoISFjc3Mucm93KSB7XG4gICAgICBjbGFzc2VzLnJvdyA9IGNzcy5yb3c7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUGFnZUNzc0NsYXNzZXModGhpcywgY2xhc3Nlcyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG4gIGdldElzUGFnZVZpc2libGUoZXhjZXB0aW9uUXVlc3Rpb246IElRdWVzdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RhcnRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5nZXRJc1BhZ2VWaXNpYmxlKGV4Y2VwdGlvblF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG51bSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibnVtXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IG51bSh2YWw6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm51bSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJudW1cIiwgdmFsKTtcbiAgICB0aGlzLm9uTnVtQ2hhbmdlZCh2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcImhpZGVcIiB0byBtYWtlIFwiUHJldlwiLCBcIk5leHRcIiBhbmQgXCJDb21wbGV0ZVwiIGJ1dHRvbnMgYXJlIGludmlzaWJsZSBmb3IgdGhpcyBwYWdlLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNob3dcIiB0byBtYWtlIHRoZXNlIGJ1dHRvbnMgdmlzaWJsZSwgZXZlbiBpZiBzdXJ2ZXkgc2hvd05hdmlnYXRpb25CdXR0b25zIHByb3BlcnR5IGlzIGZhbHNlLlxuICAgKiBAc2VlIFN1cnZleU1vZGUuc2hvd05hdmlnYXRpb25CdXR0b25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIiwgdmFsLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgcmV0dXJucyB0cnVlLCBpZiB0aGUgcGFnZSBoYXMgYmVlbiBzaG93biB0byB0aGUgZW5kLXVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdhc1Nob3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Nob3duVmFsdWU7XG4gIH1cbiAgZ2V0IGhhc1Nob3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndhc1Nob3duO1xuICB9XG4gIHB1YmxpYyBzZXRXYXNTaG93bih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMuaGFzU2hvd25WYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaGFzU2hvd25WYWx1ZSA9IHZhbDtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICBpZiAodmFsID09IHRydWUgJiYgdGhpcy5hcmVRdWVzdGlvbnNSYW5kb21pemVkKSB7XG4gICAgICB0aGlzLnJhbmRvbWl6ZUVsZW1lbnRzKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNSYW5kb21pemluZyA9IGZhbHNlO1xuICBwcml2YXRlIHJhbmRvbWl6ZUVsZW1lbnRzKCkge1xuICAgIGlmICh0aGlzLmlzUmFuZG9taXppbmcpIHJldHVybjtcbiAgICB0aGlzLmlzUmFuZG9taXppbmcgPSB0cnVlO1xuICAgIHZhciBvbGRFbGVtZW50cyA9IFtdO1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2xkRWxlbWVudHMucHVzaChlbGVtZW50c1tpXSk7XG4gICAgfVxuICAgIHZhciBuZXdFbGVtZW50cyA9IEhlbHBlcnMucmFuZG9taXplQXJyYXk8SUVsZW1lbnQ+KG9sZEVsZW1lbnRzKTtcbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKG5ld0VsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgdGhpcy5pc1JhbmRvbWl6aW5nID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRydWUsIGlmIHRoZSBlbGVtZW50cyBhcmUgcmFuZG9taXplZCBvbiB0aGUgcGFnZVxuICAgKiBAc2VlIGhhc1Nob3duXG4gICAqIEBzZWUgcXVlc3Rpb25zT3JkZXJcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvbnNPcmRlclxuICAgKi9cbiAgcHVibGljIGdldCBhcmVRdWVzdGlvbnNSYW5kb21pemVkKCk6IGJvb2xlYW4ge1xuICAgIHZhciBvcmRlciA9XG4gICAgICB0aGlzLnF1ZXN0aW9uc09yZGVyID09IFwiZGVmYXVsdFwiICYmIHRoaXMuc3VydmV5XG4gICAgICAgID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25zT3JkZXJcbiAgICAgICAgOiB0aGlzLnF1ZXN0aW9uc09yZGVyO1xuICAgIHJldHVybiBvcmRlciA9PSBcInJhbmRvbVwiO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByYW5kb21pemUgcXVlc3Rpb25zLiBTZXQgaXQgdG8gJ3JhbmRvbScgdG8gcmFuZG9taXplIHF1ZXN0aW9ucywgJ2luaXRpYWwnIHRvIGtlZXAgdGhlbSBpbiB0aGUgc2FtZSBvcmRlciBvciAnZGVmYXVsdCcgdG8gdXNlIHRoZSBTdXJ2ZXkgcXVlc3Rpb25zT3JkZXIgcHJvcGVydHlcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvbnNPcmRlclxuICAgKiBAc2VlIGFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zT3JkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25zT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIGl0IHRvIHNjcm9sbCB0byB0aGUgcGFnZSB0b3AuXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnNjcm9sbEVsZW1lbnRUb1RvcCh0aGlzLCBudWxsLCB0aGlzLCB0aGlzLmlkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRpbWUgaW4gc2Vjb25kcyBlbmQtdXNlciBzcGVudCBvbiB0aGlzIHBhZ2VcbiAgICovXG4gIHB1YmxpYyB0aW1lU3BlbnQgPSAwO1xuICAvLyBwdWJsaWMgZ2V0IHRpbWVTcGVudCgpOiBudW1iZXIge1xuICAvLyAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0aW1lU3BlbnRcIiwgMCk7XG4gIC8vIH1cbiAgLy8gcHVibGljIHNldCB0aW1lU3BlbnQodmFsOiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0aW1lU3BlbnRcIiwgdmFsKTtcbiAgLy8gfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgcGFuZWxzIGluIHRoZSBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFuZWxzKFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PElQYW5lbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8SVBhbmVsPigpO1xuICAgIHRoaXMuYWRkUGFuZWxzSW50b0xpc3QocmVzdWx0LCB2aXNpYmxlT25seSwgaW5jbHVkaW5nRGVzaWduVGltZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoYXQgZW5kLXVzZXIgaGFzIHRvIGNvbXBsZXRlIHRoZSBwYWdlLiBJZiB0aGUgdmFsdWUgaXMgMCBvciBsZXNzLCB0aGUgZW5kLXVzZXIgaGFzIHVubGltaXRlZCBudW1iZXIgb2YgdGltZSB0byBmaW5pc2ggdGhlIHBhZ2UuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1heFRpbWVUb0ZpbmlzaFBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFRpbWVUb0ZpbmlzaCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvbk51bUNoYW5nZWQodmFsdWU6IG51bWJlcikge31cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNSYW5kb21pemluZykgcmV0dXJuO1xuICAgIHN1cGVyLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5zdXJ2ZXkucGFnZVZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbztcbiAgcHVibGljIGRyYWdEcm9wU3RhcnQoXG4gICAgc3JjOiBJRWxlbWVudCxcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIG5lc3RlZFBhbmVsRGVwdGg6IG51bWJlciA9IC0xXG4gICkge1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvID0gbmV3IERyYWdEcm9wSW5mbyhzcmMsIHRhcmdldCwgbmVzdGVkUGFuZWxEZXB0aCk7XG4gIH1cbiAgcHVibGljIGRyYWdEcm9wTW92ZVRvKFxuICAgIGRlc3RpbmF0aW9uOiBJU3VydmV5RWxlbWVudCxcbiAgICBpc0JvdHRvbTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGlzRWRnZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kcmFnRHJvcEluZm8pIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmlzQm90dG9tID0gaXNCb3R0b207XG4gICAgdGhpcy5kcmFnRHJvcEluZm8uaXNFZGdlID0gaXNFZGdlO1xuICAgIHRoaXMuY29ycmVjdERyYWdEcm9wSW5mbyh0aGlzLmRyYWdEcm9wSW5mbyk7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcFRhZ2VydCgpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcFNvdXJjZSgpIHx8ICF0aGlzLmRyYWdEcm9wQWxsb3dGcm9tU3VydmV5KCkpIHtcbiAgICAgIGlmICghIXRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZSkge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3codGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0KTtcbiAgICAgICAgdGhpcy51cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3codGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LCByb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0KHRoaXMuZHJhZ0Ryb3BJbmZvKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGNvcnJlY3REcmFnRHJvcEluZm8oZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8pIHtcbiAgICBpZiAoIWRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbikgcmV0dXJuO1xuICAgIHZhciBwYW5lbCA9ICg8SUVsZW1lbnQ+ZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKS5pc1BhbmVsXG4gICAgICA/IDxJUGFuZWw+KDxhbnk+ZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIGlmICghcGFuZWwpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICAhZHJhZ0Ryb3BJbmZvLnRhcmdldC5pc0xheW91dFR5cGVTdXBwb3J0ZWQocGFuZWwuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCkpXG4gICAgKSB7XG4gICAgICBkcmFnRHJvcEluZm8uaXNFZGdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFsbG93RnJvbVN1cnZleSgpOiBib29sZWFuIHtcbiAgICB2YXIgZGVzdCA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmICghZGVzdCB8fCAhdGhpcy5zdXJ2ZXkpIHJldHVybiB0cnVlO1xuICAgIHZhciBpbnNlcnRCZWZvcmU6IElFbGVtZW50ID0gbnVsbDtcbiAgICB2YXIgaW5zZXJ0QWZ0ZXI6IElFbGVtZW50ID0gbnVsbDtcbiAgICB2YXIgcGFyZW50ID1cbiAgICAgIGRlc3QuaXNQYWdlIHx8ICghdGhpcy5kcmFnRHJvcEluZm8uaXNFZGdlICYmICg8SUVsZW1lbnQ+ZGVzdCkuaXNQYW5lbClcbiAgICAgICAgPyBkZXN0XG4gICAgICAgIDogKDxJRWxlbWVudD5kZXN0KS5wYXJlbnQ7XG4gICAgaWYgKCFkZXN0LmlzUGFnZSkge1xuICAgICAgdmFyIGNvbnRhaW5lciA9ICg8SUVsZW1lbnQ+ZGVzdCkucGFyZW50O1xuICAgICAgaWYgKCEhY29udGFpbmVyKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9ICg8UGFuZWxNb2RlbEJhc2U+Y29udGFpbmVyKS5lbGVtZW50cztcbiAgICAgICAgdmFyIGluZGV4ID0gZWxlbWVudHMuaW5kZXhPZig8SUVsZW1lbnQ+ZGVzdCk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgaW5zZXJ0QmVmb3JlID0gPElFbGVtZW50PmRlc3Q7XG4gICAgICAgICAgaW5zZXJ0QWZ0ZXIgPSA8SUVsZW1lbnQ+ZGVzdDtcbiAgICAgICAgICBpZiAodGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20pIHtcbiAgICAgICAgICAgIGluc2VydEJlZm9yZSA9XG4gICAgICAgICAgICAgIGluZGV4IDwgZWxlbWVudHMubGVuZ3RoIC0gMSA/IGVsZW1lbnRzW2luZGV4ICsgMV0gOiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnNlcnRBZnRlciA9IGluZGV4ID4gMCA/IGVsZW1lbnRzW2luZGV4IC0gMV0gOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldDogdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgc291cmNlOiB0aGlzLmRyYWdEcm9wSW5mby5zb3VyY2UsXG4gICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgIGluc2VydEFmdGVyOiBpbnNlcnRBZnRlcixcbiAgICAgIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BGaW5pc2goaXNDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZSk6IElFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BJbmZvKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldDtcbiAgICB2YXIgcm93ID0gdGhpcy5kcmFnRHJvcEZpbmRSb3codGFyZ2V0KTtcbiAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdEcm9wR2V0RWxlbWVudEluZGV4KHRhcmdldCwgcm93KTtcbiAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0YXJnZXQsIHJvdyk7XG4gICAgaWYgKCFpc0NhbmNlbCAmJiAhIXJvdykge1xuICAgICAgdmFyIHNyYyA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBpc1NhbWVQYW5lbCA9IGZhbHNlO1xuICAgICAgaWYgKCEhc3JjICYmICEhc3JjLnBhcmVudCkge1xuICAgICAgICBpc1NhbWVQYW5lbCA9IHJvdy5wYW5lbCA9PSBzcmMucGFyZW50O1xuICAgICAgICBpZiAoaXNTYW1lUGFuZWwpIHtcbiAgICAgICAgICByb3cucGFuZWwuZHJhZ0Ryb3BNb3ZlRWxlbWVudChzcmMsIHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICAgIHRhcmdldEluZGV4ID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3JjLnBhcmVudC5yZW1vdmVFbGVtZW50KHNyYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXRJbmRleCA+IC0xKSB7XG4gICAgICAgIHJvdy5wYW5lbC5hZGRFbGVtZW50KHRhcmdldCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRyYWdEcm9wSW5mbyA9IG51bGw7XG4gICAgcmV0dXJuICFpc0NhbmNlbCA/IHRhcmdldCA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEdldEVsZW1lbnRJbmRleChcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBudW1iZXIge1xuICAgIGlmICghcm93KSByZXR1cm4gLTE7XG4gICAgdmFyIGluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcbiAgICBpZiAocm93LmluZGV4ID09IDApIHJldHVybiBpbmRleDtcbiAgICB2YXIgcHJldlJvdyA9IHJvdy5wYW5lbC5yb3dzW3Jvdy5pbmRleCAtIDFdO1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZSb3cuZWxlbWVudHNbcHJldlJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gaW5kZXggKyByb3cucGFuZWwuZWxlbWVudHMuaW5kZXhPZihwcmV2RWxlbWVudCkgKyAxO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgZGVzdGluYXRpb24uaXNQYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgICAgdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgPElFbGVtZW50PmRlc3RpbmF0aW9uXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSA8SUVsZW1lbnQ+dGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcENvcmUoc291cmNlLCBkZXN0aW5hdGlvbikpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgICAgc291cmNlLFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UsXG4gICAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGVzdGluYXRpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wSXNTYW1lRWxlbWVudChkZXN0aW5hdGlvbiwgdGFyZ2V0KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0YXJnZXQuaXNQYW5lbCkge1xuICAgICAgdmFyIHBubCA9IDxQYW5lbE1vZGVsQmFzZT4oPGFueT50YXJnZXQpO1xuICAgICAgaWYgKFxuICAgICAgICBwbmwuY29udGFpbnNFbGVtZW50KGRlc3RpbmF0aW9uKSB8fFxuICAgICAgICAhIXBubC5nZXRFbGVtZW50QnlOYW1lKGRlc3RpbmF0aW9uLm5hbWUpXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcENhbkRyb3BOb3ROZXh0KFxuICAgIHNvdXJjZTogSUVsZW1lbnQsXG4gICAgZGVzdGluYXRpb246IElFbGVtZW50LFxuICAgIGlzRWRnZTogYm9vbGVhbixcbiAgICBpc0JvdHRvbTogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWRlc3RpbmF0aW9uIHx8IChkZXN0aW5hdGlvbi5pc1BhbmVsICYmICFpc0VkZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc291cmNlLnBhcmVudCAhPT0gZGVzdGluYXRpb24ucGFyZW50KSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcG5sID0gPFBhbmVsTW9kZWxCYXNlPnNvdXJjZS5wYXJlbnQ7XG4gICAgdmFyIHNyY0luZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2Yoc291cmNlKTtcbiAgICB2YXIgZGVzdEluZGV4ID0gcG5sLmVsZW1lbnRzLmluZGV4T2YoZGVzdGluYXRpb24pO1xuICAgIGlmIChkZXN0SW5kZXggPCBzcmNJbmRleCAmJiAhaXNCb3R0b20pIGRlc3RJbmRleC0tO1xuICAgIGlmIChpc0JvdHRvbSkgZGVzdEluZGV4Kys7XG4gICAgcmV0dXJuIHNyY0luZGV4IDwgZGVzdEluZGV4XG4gICAgICA/IGRlc3RJbmRleCAtIHNyY0luZGV4ID4gMVxuICAgICAgOiBzcmNJbmRleCAtIGRlc3RJbmRleCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGRyYWdEcm9wSXNTYW1lRWxlbWVudChlbDE6IElFbGVtZW50LCBlbDI6IElFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsMSA9PSBlbDIgfHwgZWwxLm5hbWUgPT0gZWwyLm5hbWU7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYWdlXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgICAgZGVmYXVsdDogXCJpbmhlcml0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbmhlcml0XCIsIFwic2hvd1wiLCBcImhpZGVcIl1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImluaXRpYWxcIiwgXCJyYW5kb21cIl1cbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH1cbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbGJhc2VcIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYWdlLnRzIiwiaW1wb3J0IHsgQmFzZSwgSVF1ZXN0aW9uLCBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcbiAgcHVibGljIGh0bWxUZW1wbGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgaXNGaXJzdFJlbmRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHdpZGdldEpzb246IGFueSkge1xuICAgIHRoaXMuaHRtbFRlbXBsYXRlID0gd2lkZ2V0SnNvbi5odG1sVGVtcGxhdGUgPyB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0UmVuZGVyKSB7XG4gICAgICB0aGlzLmlzRmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgICAgIHF1ZXN0aW9uLnN1cnZleS5vbkxvY2FsZUNoYW5nZWRFdmVudC5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQocXVlc3Rpb24sIGVsKTtcbiAgICAgICAgdGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKSB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcbiAgfVxuICBwdWJsaWMgd2lsbFVubW91bnQocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQpIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuICB9XG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUocXVlc3Rpb246IElRdWVzdGlvbiwgdmFsdWU6IGFueSA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SnNvbi5nZXREaXNwbGF5VmFsdWUpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZShxdWVzdGlvbiwgdmFsdWUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBpc0ZpdChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmlzRml0KVxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5pc0ZpdChxdWVzdGlvbik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBpbml0KCkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24uaW5pdCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmluaXQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZCkge1xuICAgICAgdGhpcy53aWRnZXRKc29uLmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNMaWJyYXJ5TG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkgPT0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlcjtcbiAgfVxuICBwdWJsaWMgZ2V0IHBkZlF1ZXN0aW9uVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUXVlc3Rpb25UeXBlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGRmUmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLndpZGdldEpzb24ucGRmUmVuZGVyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiA9IG5ldyBDdXN0b21XaWRnZXRDb2xsZWN0aW9uKCk7XG4gIHByaXZhdGUgd2lkZ2V0c1ZhbHVlczogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+ID0gW107XG4gIHByaXZhdGUgd2lkZ2V0c0FjdGl2YXRlZEJ5ID0ge307XG5cbiAgcHVibGljIG9uQ3VzdG9tV2lkZ2V0QWRkZWQ6IEV2ZW50PFxuICAgIChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgRXZlbnQ8KGN1c3RvbVdpZGdldDogUXVlc3Rpb25DdXN0b21XaWRnZXQpID0+IGFueSwgYW55PigpO1xuXG4gIHB1YmxpYyBnZXQgd2lkZ2V0cygpOiBBcnJheTxRdWVzdGlvbkN1c3RvbVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLndpZGdldHNWYWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZCh3aWRnZXRKc29uOiBhbnksIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCIpIHtcbiAgICB0aGlzLmFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uLCBhY3RpdmF0ZWRCeSk7XG4gIH1cbiAgcHVibGljIGFkZEN1c3RvbVdpZGdldCh3aWRnZXRKc29uOiBhbnksIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCIpIHtcbiAgICB2YXIgbmFtZSA9IHdpZGdldEpzb24ubmFtZTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIG5hbWUgPSBcIndpZGdldF9cIiArIHRoaXMud2lkZ2V0cy5sZW5ndGggKyAxO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gbmV3IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KG5hbWUsIHdpZGdldEpzb24pO1xuICAgIHRoaXMud2lkZ2V0c1ZhbHVlcy5wdXNoKGN1c3RvbVdpZGdldCk7XG4gICAgY3VzdG9tV2lkZ2V0LmluaXQoKTtcbiAgICAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbbmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICBjdXN0b21XaWRnZXQuYWN0aXZhdGVkQnlDaGFuZ2VkKGFjdGl2YXRlZEJ5KTtcbiAgICB0aGlzLm9uQ3VzdG9tV2lkZ2V0QWRkZWQuZmlyZShjdXN0b21XaWRnZXQsIG51bGwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3YXkgdGhlIGN1c3RvbSB3aWdldCBpcyBhY3RpdmF0ZWQuIEl0IGNhbiBiZSBhY3RpdmF0ZWQgYnkgYSBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIGJ5IG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZSB0aGUgY3VzdG9tIHdpZGdldCBuYW1lXG4gICAqIEBzZWUgc2V0QWN0aXZhdGVkQnlcbiAgICovXG4gIHB1YmxpYyBnZXRBY3RpdmF0ZWRCeSh3aWRnZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV07XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IFwicHJvcGVydHlcIjtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgd2F5IHRoZSBjdXN0b20gd2lnZXQgaXMgYWN0aXZhdGVkLiBUaGUgYWN0aXZhdGlvbiB0eXBlcyBhcmU6IHByb3BlcnR5IChcInByb3BlcnR5XCIpLCBxdWVzdGlvbiB0eXBlIChcInR5cGVcIikgb3IgbmV3L2N1c3RvbSBxdWVzdGlvbiB0eXBlIChcImN1c3RvbXR5cGVcIikuIEEgY3VzdG9tIHdpZ2V0IG1heSBzdXBwb3J0IGFsbCBvciBvbmx5IHNvbWUgb2YgdGhpcyBhY3RpdmF0aW9uIHR5cGVzLlxuICAgKiBAcGFyYW0gd2lkZ2V0TmFtZVxuICAgKiBAcGFyYW0gYWN0aXZhdGVkQnkgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhcmlhbnRzOiBcInByb3BlcnR5XCIsIFwidHlwZVwiIGFuZCBcImN1c3RvbXR5cGVcIlxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2YXRlZEJ5KHdpZGdldE5hbWU6IHN0cmluZywgYWN0aXZhdGVkQnk6IHN0cmluZykge1xuICAgIGlmICghd2lkZ2V0TmFtZSB8fCAhYWN0aXZhdGVkQnkpIHJldHVybjtcbiAgICB2YXIgd2lkZ2V0ID0gdGhpcy5nZXRDdXN0b21XaWRnZXRCeU5hbWUod2lkZ2V0TmFtZSk7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICAoPGFueT50aGlzKS53aWRnZXRzQWN0aXZhdGVkQnlbd2lkZ2V0TmFtZV0gPSBhY3RpdmF0ZWRCeTtcbiAgICB3aWRnZXQuYWN0aXZhdGVkQnlDaGFuZ2VkKGFjdGl2YXRlZEJ5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy53aWRnZXRzVmFsdWVzID0gW107XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVdpZGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy53aWRnZXRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tV2lkZ2V0KHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBRdWVzdGlvbkN1c3RvbVdpZGdldCB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLndpZGdldHNWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLndpZGdldHNWYWx1ZXNbaV0uaXNGaXQocXVlc3Rpb24pKSByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0cy50cyIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZHJvcGRvd24gcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIiwgdGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImNob2ljZXNNaW5cIiwgXCJjaG9pY2VzTWF4XCIsIFwiY2hvaWNlc1N0ZXBcIl0sXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciB0byBzaG93IG9wdGlvbnMgY2FwdGlvbiBpdGVtICgnQ2hvb3NlLi4uJykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dPcHRpb25zQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd09wdGlvbnNDYXB0aW9uXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd09wdGlvbnNDYXB0aW9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dPcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG9wdGlvbnMgY2FwdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGl6YXRpb24gc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRyb3Bkb3duXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgdGhpcy52YWx1ZSk7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBtaW5NYXhDaG9pY2VzID0gPEFycmF5PEl0ZW1WYWx1ZT4+W107XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBpdGVtcyA9IHN1cGVyLmdldENob2ljZXMoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzTWF4IDw9IHRoaXMuY2hvaWNlc01pbikgcmV0dXJuIGl0ZW1zO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggIT09XG4gICAgICAgICh0aGlzLmNob2ljZXNNYXggLSB0aGlzLmNob2ljZXNNaW4pIC8gdGhpcy5jaG9pY2VzU3RlcCArIDFcbiAgICApIHtcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcyA9IFtdO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSB0aGlzLmNob2ljZXNNaW47XG4gICAgICAgIGkgPD0gdGhpcy5jaG9pY2VzTWF4O1xuICAgICAgICBpICs9IHRoaXMuY2hvaWNlc1N0ZXBcbiAgICAgICkge1xuICAgICAgICB0aGlzLm1pbk1heENob2ljZXMucHVzaChuZXcgSXRlbVZhbHVlKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLm1pbk1heENob2ljZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGFuZCBjaG9pY2VzTWF4IHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgYWRkIGNob2ljZXMuIEZvciBleGFtcGxlIGNob2ljZXNNaW4gPSAxIGFuZCBjaG9pY2VzTWF4ID0gMTAgd2lsbCBnZW5lcmF0ZSB0ZW4gYWRkaXRpb25hbCBjaG9pY2VzIGZyb20gMSB0byAxMC5cbiAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAqIEBzZWUgY2hvaWNlc1N0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc01pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWluXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc01pbih2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgYW5kIGNob2ljZXNNYXggcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGQgY2hvaWNlcy4gRm9yIGV4YW1wbGUgY2hvaWNlc01pbiA9IDEgYW5kIGNob2ljZXNNYXggPSAxMCB3aWxsIGdlbmVyYXRlIHRlbiBhZGRpdGlvbmFsIGNob2ljZXMgZnJvbSAxIHRvIDEwLlxuICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNYXhcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiBJdCB0ZWxscyB0aGUgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yIGJldHdlZW4gY2hvaWNlc01pbiBhbmQgY2hvaWNlc01heCBwcm9wZXJ0aWVzLlxuICAgKiBJZiBjaG9pY2VzTWluID0gMTAsIGNob2ljZXNNYXggPSAzMCBhbmQgY2hvaWNlc1N0ZXAgPSAxMCB0aGVuIHlvdSB3aWxsIGhhdmUgb25seSB0aHJlZSBhZGRpdGlvbmFsIGNob2ljZXM6IFsxMCwgMjAsIDMwXS5cbiAgICogQHNlZSBjaG9pY2VzTWluXG4gICAqIEBzZWUgY2hvaWNlc01heFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiLCAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNTdGVwKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEpIHZhbCA9IDE7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1N0ZXBcIiwgdmFsKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJkcm9wZG93blwiLFxuICBbXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwiIH0sXG4gICAgeyBuYW1lOiBcInNob3dPcHRpb25zQ2FwdGlvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc01pbjpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTWF4Om51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMSB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9kcm9wZG93bi50cyIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgZXhwcmVzc2lvbiBxdWVzdGlvbi4gSXQgaXMgYSByZWFkLW9ubHkgcXVlc3Rpb24uIEl0IGNhbGN1bGF0ZXMgdmFsdWUgYmFzZWQgb24gZXB4cmVzc2lvbiBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcml2YXRlIGV4cHJlc3Npb25Jc1J1bm5pbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgZXhwcmVzc2lvblJ1bm5lcjogRXhwcmVzc2lvblJ1bm5lcjtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJmb3JtYXRcIiwgdGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJleHByZXNzaW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgICAgc2VsZi5leHByZXNzaW9uUnVubmVyID0gbmV3IEV4cHJlc3Npb25SdW5uZXIoc2VsZi5leHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4cHJlc3Npb25cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZGlzcGxheSB0aGUgdmFsdWUgaW4geW91ciBvd24gZm9ybWF0LiBNYWtlIHN1cmUgeW91IGhhdmUgXCJ7MH1cIiBzdWJzdHJpbmcgaW4geW91ciBzdHJpbmcsIHRvIGRpc3BsYXkgdGhlIGFjdHVhbCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZm9ybWF0XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZm9ybWF0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJmb3JtYXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRm9ybWF0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImZvcm1hdFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIEV4cHJlc3Npb24gdGhhdCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcXVlc3Rpb24gdmFsdWUuIFlvdSBtYXkgdXNlIHN0YW5kYXJkIG9wZXJhdG9ycyBsaWtlICssIC0sICogYW5kIC8sIHNxdWFyZXMgKCkuIEhlcmUgaXMgdGhlIGV4YW1wbGUgb2YgYWNjZXNzaW5nIHRoZSBxdWVzdGlvbiB2YWx1ZSB7cXVlc3Rpb25uYW1lfS5cbiAgICogPGJyLz5FeGFtcGxlOiBcIih7cXVhbnRpdHl9ICoge3ByaWNlfSkgKiAoMTAwIC0ge2Rpc2NvdW50fSkgLyAxMDBcIlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBsb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB1bmxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbiB8fCB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdG8gdXNlIGlmIGRpc3BsYXlTdHlsZSBpcyBub3QgXCJub25lXCIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZnJvbSAwIHRvIDIwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAtMSBhbmQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb3BlcnR5IGlzIG5vdCB1c2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4aW11bUZyYWN0aW9uRGlnaXRzXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heGltdW1GcmFjdGlvbkRpZ2l0cyh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIHVzZSBpZiBkaXNwbGF5U3R5bGUgaXMgbm90IFwibm9uZVwiLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGZyb20gMCB0byAyMC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgLTEgYW5kIGl0IG1lYW5zIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluaW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pbmltdW1GcmFjdGlvbkRpZ2l0c1wiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCBtaW5pbXVtRnJhY3Rpb25EaWdpdHModmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHN0ciA9IHRoaXMuZ2V0VmFsdWVBc1N0cih2YWwpO1xuICAgIGlmICghdGhpcy5mb3JtYXQpIHJldHVybiBzdHI7XG4gICAgcmV0dXJuICg8YW55PnRoaXMuZm9ybWF0KVtcImZvcm1hdFwiXShzdHIpO1xuICB9XG4gIC8qKlxuICAgKiBZb3UgbWF5IHNldCB0aGlzIHByb3BlcnR5IHRvIFwiZGVjaW1hbFwiLCBcImN1cnJlbmN5XCIsIFwicGVyY2VudFwiIG9yIFwiZGF0ZVwiLiBJZiB5b3Ugc2V0IGl0IHRvIFwiY3VycmVuY3lcIiwgeW91IG1heSB1c2UgdGhlIGN1cnJlbmN5IHByb3BlcnR5IHRvIGRpc3BsYXkgdGhlIHZhbHVlIGluIGN1cnJlbmN5IGRpZmZlcmVudCBmcm9tIFVTRC5cbiAgICogQHNlZSBjdXJyZW5jeVxuICAgKi9cbiAgcHVibGljIGdldCBkaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVN0eWxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzcGxheVN0eWxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVN0eWxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSBpbiB0aGUgY3VycmVuY3kgZGlmZmVyZW4gZnJvbSBVU0QuIFRoZSBkaXNwbGF5U3R5cGUgc2hvdWxkIGJlIHNldCB0byBcImN1cnJlbmN5XCIuXG4gICAqIEBzZWUgZGlzcGxheVN0eWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImN1cnJlbmN5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVuY3kodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZ2V0Q3VycmVjeUNvZGVzKCkuaW5kZXhPZih2YWwpIDwgMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImN1cnJlbmN5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB1c2VHcm91cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidXNlR3JvdXBpbmdcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VHcm91cGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ1c2VHcm91cGluZ1wiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUFzU3RyKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5U3R5bGUgPT0gXCJkYXRlXCIpIHtcbiAgICAgIHZhciBkID0gbmV3IERhdGUodmFsKTtcbiAgICAgIGlmICghIWQgJiYgISFkLnRvTG9jYWxlRGF0ZVN0cmluZykgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc3BsYXlTdHlsZSAhPSBcIm5vbmVcIiAmJiBIZWxwZXJzLmlzTnVtYmVyKHZhbCkpIHtcbiAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmdldExvY2FsZSgpO1xuICAgICAgaWYgKCFsb2NhbGUpIGxvY2FsZSA9IFwiZW5cIjtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdHlsZTogdGhpcy5kaXNwbGF5U3R5bGUsXG4gICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LFxuICAgICAgICB1c2VHcm91cGluZzogdGhpcy51c2VHcm91cGluZyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPiAtMSkge1xuICAgICAgICAoPGFueT5vcHRpb25zKVtcIm1heGltdW1GcmFjdGlvbkRpZ2l0c1wiXSA9IHRoaXMubWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWluaW11bUZyYWN0aW9uRGlnaXRzID4gLTEpIHtcbiAgICAgICAgKDxhbnk+b3B0aW9ucylbXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIl0gPSB0aGlzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWwudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbC50b1N0cmluZygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZWN5Q29kZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiBbXG4gICAgXCJBRURcIixcbiAgICBcIkFGTlwiLFxuICAgIFwiQUxMXCIsXG4gICAgXCJBTURcIixcbiAgICBcIkFOR1wiLFxuICAgIFwiQU9BXCIsXG4gICAgXCJBUlNcIixcbiAgICBcIkFVRFwiLFxuICAgIFwiQVdHXCIsXG4gICAgXCJBWk5cIixcbiAgICBcIkJBTVwiLFxuICAgIFwiQkJEXCIsXG4gICAgXCJCRFRcIixcbiAgICBcIkJHTlwiLFxuICAgIFwiQkhEXCIsXG4gICAgXCJCSUZcIixcbiAgICBcIkJNRFwiLFxuICAgIFwiQk5EXCIsXG4gICAgXCJCT0JcIixcbiAgICBcIkJPVlwiLFxuICAgIFwiQlJMXCIsXG4gICAgXCJCU0RcIixcbiAgICBcIkJUTlwiLFxuICAgIFwiQldQXCIsXG4gICAgXCJCWU5cIixcbiAgICBcIkJaRFwiLFxuICAgIFwiQ0FEXCIsXG4gICAgXCJDREZcIixcbiAgICBcIkNIRVwiLFxuICAgIFwiQ0hGXCIsXG4gICAgXCJDSFdcIixcbiAgICBcIkNMRlwiLFxuICAgIFwiQ0xQXCIsXG4gICAgXCJDTllcIixcbiAgICBcIkNPUFwiLFxuICAgIFwiQ09VXCIsXG4gICAgXCJDUkNcIixcbiAgICBcIkNVQ1wiLFxuICAgIFwiQ1VQXCIsXG4gICAgXCJDVkVcIixcbiAgICBcIkNaS1wiLFxuICAgIFwiREpGXCIsXG4gICAgXCJES0tcIixcbiAgICBcIkRPUFwiLFxuICAgIFwiRFpEXCIsXG4gICAgXCJFR1BcIixcbiAgICBcIkVSTlwiLFxuICAgIFwiRVRCXCIsXG4gICAgXCJFVVJcIixcbiAgICBcIkZKRFwiLFxuICAgIFwiRktQXCIsXG4gICAgXCJHQlBcIixcbiAgICBcIkdFTFwiLFxuICAgIFwiR0hTXCIsXG4gICAgXCJHSVBcIixcbiAgICBcIkdNRFwiLFxuICAgIFwiR05GXCIsXG4gICAgXCJHVFFcIixcbiAgICBcIkdZRFwiLFxuICAgIFwiSEtEXCIsXG4gICAgXCJITkxcIixcbiAgICBcIkhSS1wiLFxuICAgIFwiSFRHXCIsXG4gICAgXCJIVUZcIixcbiAgICBcIklEUlwiLFxuICAgIFwiSUxTXCIsXG4gICAgXCJJTlJcIixcbiAgICBcIklRRFwiLFxuICAgIFwiSVJSXCIsXG4gICAgXCJJU0tcIixcbiAgICBcIkpNRFwiLFxuICAgIFwiSk9EXCIsXG4gICAgXCJKUFlcIixcbiAgICBcIktFU1wiLFxuICAgIFwiS0dTXCIsXG4gICAgXCJLSFJcIixcbiAgICBcIktNRlwiLFxuICAgIFwiS1BXXCIsXG4gICAgXCJLUldcIixcbiAgICBcIktXRFwiLFxuICAgIFwiS1lEXCIsXG4gICAgXCJLWlRcIixcbiAgICBcIkxBS1wiLFxuICAgIFwiTEJQXCIsXG4gICAgXCJMS1JcIixcbiAgICBcIkxSRFwiLFxuICAgIFwiTFNMXCIsXG4gICAgXCJMWURcIixcbiAgICBcIk1BRFwiLFxuICAgIFwiTURMXCIsXG4gICAgXCJNR0FcIixcbiAgICBcIk1LRFwiLFxuICAgIFwiTU1LXCIsXG4gICAgXCJNTlRcIixcbiAgICBcIk1PUFwiLFxuICAgIFwiTVJPXCIsXG4gICAgXCJNVVJcIixcbiAgICBcIk1WUlwiLFxuICAgIFwiTVdLXCIsXG4gICAgXCJNWE5cIixcbiAgICBcIk1YVlwiLFxuICAgIFwiTVlSXCIsXG4gICAgXCJNWk5cIixcbiAgICBcIk5BRFwiLFxuICAgIFwiTkdOXCIsXG4gICAgXCJOSU9cIixcbiAgICBcIk5PS1wiLFxuICAgIFwiTlBSXCIsXG4gICAgXCJOWkRcIixcbiAgICBcIk9NUlwiLFxuICAgIFwiUEFCXCIsXG4gICAgXCJQRU5cIixcbiAgICBcIlBHS1wiLFxuICAgIFwiUEhQXCIsXG4gICAgXCJQS1JcIixcbiAgICBcIlBMTlwiLFxuICAgIFwiUFlHXCIsXG4gICAgXCJRQVJcIixcbiAgICBcIlJPTlwiLFxuICAgIFwiUlNEXCIsXG4gICAgXCJSVUJcIixcbiAgICBcIlJXRlwiLFxuICAgIFwiU0FSXCIsXG4gICAgXCJTQkRcIixcbiAgICBcIlNDUlwiLFxuICAgIFwiU0RHXCIsXG4gICAgXCJTRUtcIixcbiAgICBcIlNHRFwiLFxuICAgIFwiU0hQXCIsXG4gICAgXCJTTExcIixcbiAgICBcIlNPU1wiLFxuICAgIFwiU1JEXCIsXG4gICAgXCJTU1BcIixcbiAgICBcIlNURFwiLFxuICAgIFwiU1ZDXCIsXG4gICAgXCJTWVBcIixcbiAgICBcIlNaTFwiLFxuICAgIFwiVEhCXCIsXG4gICAgXCJUSlNcIixcbiAgICBcIlRNVFwiLFxuICAgIFwiVE5EXCIsXG4gICAgXCJUT1BcIixcbiAgICBcIlRSWVwiLFxuICAgIFwiVFREXCIsXG4gICAgXCJUV0RcIixcbiAgICBcIlRaU1wiLFxuICAgIFwiVUFIXCIsXG4gICAgXCJVR1hcIixcbiAgICBcIlVTRFwiLFxuICAgIFwiVVNOXCIsXG4gICAgXCJVWUlcIixcbiAgICBcIlVZVVwiLFxuICAgIFwiVVpTXCIsXG4gICAgXCJWRUZcIixcbiAgICBcIlZORFwiLFxuICAgIFwiVlVWXCIsXG4gICAgXCJXU1RcIixcbiAgICBcIlhBRlwiLFxuICAgIFwiWEFHXCIsXG4gICAgXCJYQVVcIixcbiAgICBcIlhCQVwiLFxuICAgIFwiWEJCXCIsXG4gICAgXCJYQkNcIixcbiAgICBcIlhCRFwiLFxuICAgIFwiWENEXCIsXG4gICAgXCJYRFJcIixcbiAgICBcIlhPRlwiLFxuICAgIFwiWFBEXCIsXG4gICAgXCJYUEZcIixcbiAgICBcIlhQVFwiLFxuICAgIFwiWFNVXCIsXG4gICAgXCJYVFNcIixcbiAgICBcIlhVQVwiLFxuICAgIFwiWFhYXCIsXG4gICAgXCJZRVJcIixcbiAgICBcIlpBUlwiLFxuICAgIFwiWk1XXCIsXG4gICAgXCJaV0xcIixcbiAgXTtcbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJleHByZXNzaW9uXCIsXG4gIFtcbiAgICBcImV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIHsgbmFtZTogXCJmb3JtYXRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Zvcm1hdFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkaXNwbGF5U3R5bGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImRlY2ltYWxcIiwgXCJjdXJyZW5jeVwiLCBcInBlcmNlbnRcIiwgXCJkYXRlXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjdXJyZW5jeVwiLFxuICAgICAgY2hvaWNlczogKCkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVjeUNvZGVzKCk7XG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogXCJVU0RcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcIm1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcbiAgICB7IG5hbWU6IFwidXNlR3JvdXBpbmc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImNvbW1lbnRUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImlzUmVxdWlyZWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVhZE9ubHlcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbChuYW1lKTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2V4cHJlc3Npb24udHMiLCJpbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgRW1haWxWYWxpZGF0b3IsIFN1cnZleVZhbGlkYXRvciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGFuIGlucHV0IHRleHQgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZUhvbGRlclwiLCB0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNUZXh0VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRUeXBlID09IFwidGV4dFwiO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgaW5wdXQgdHlwZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlucHV0VHlwZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlucHV0VHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gXCJkYXRldGltZV9sb2NhbFwiKSB2YWwgPSBcImRhdGV0aW1lLWxvY2FsXCI7XG4gICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tYXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlucHV0VHlwZVwiLCB2YWwudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgcHVibGljIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgdmFyIHZhbGlkYXRvcnMgPSBzdXBlci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dFR5cGUgPT09IFwiZW1haWxcIiAmJlxuICAgICAgIXRoaXMudmFsaWRhdG9ycy5zb21lKCh2KSA9PiB2LmdldFR5cGUoKSA9PT0gXCJlbWFpbHZhbGlkYXRvclwiKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG5ldyBFbWFpbFZhbGlkYXRvcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0ZXh0IGxlbmd0aC4gSWYgaXQgaXMgLTEsIGRlZmF1bCB2YWx1ZSwgdGhlbiB0aGUgc3VydmV5IG1heFRleHRMZW5ndGggcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICAgKiBJZiBpdCBpcyAwLCB0aGVuIHRoZSB2YWx1ZSBpcyB1bmxpbWl0ZWRcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5tYXhUZXh0TGVuZ3RoXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhMZW5ndGhcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0TWF4TGVuZ3RoKFxuICAgICAgdGhpcy5tYXhMZW5ndGgsXG4gICAgICB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5Lm1heFRleHRMZW5ndGggOiAtMVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IGlucHV0IHNpemVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaXplXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXgoKTogc3RyaW5nIHtcbiAgICB2YXIgbWF4VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhcIik7XG4gICAgaWYgKFxuICAgICAgIW1heFZhbHVlICYmXG4gICAgICAodGhpcy5pbnB1dFR5cGUgPT09IFwiZGF0ZVwiIHx8IHRoaXMuaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCIpXG4gICAgKSB7XG4gICAgICBtYXhWYWx1ZSA9IFwiMjk5OS0xMi0zMVwiO1xuICAgIH1cbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBtYXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHN0ZXAgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RlcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RlcCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIiwgdmFsKTtcbiAgfVxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5pc0VtcHR5KCkgfHwgdGhpcy52YWx1ZSA9PT0gXCJcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpIHtcbiAgICByZXR1cm4gW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5kZXhPZih0aGlzLmlucHV0VHlwZSkgPCAwO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGxhY2VIb2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBsYWNlSG9sZGVyXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SdW5WYWxpZGF0b3JzKGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCB8fFxuICAgICAgIWlzT25WYWx1ZUNoYW5nZWQgfHxcbiAgICAgIHRoaXMuc3VwcG9ydEdvTmV4dFBhZ2VFcnJvcigpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlKTtcbiAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvcnJlY3RWYWx1ZVR5cGUobmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCFuZXdWYWx1ZSkgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIGlmICh0aGlzLmlucHV0VHlwZSA9PSBcIm51bWJlclwiIHx8IHRoaXMuaW5wdXRUeXBlID09IFwicmFuZ2VcIikge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuaXNOdW1iZXIobmV3VmFsdWUpID8gcGFyc2VGbG9hdChuZXdWYWx1ZSkgOiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGFkZFN1cHBvcnRlZFZhbGlkYXRvcnMoc3VwcG9ydGVkVmFsaWRhdG9yczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyLmFkZFN1cHBvcnRlZFZhbGlkYXRvcnMoc3VwcG9ydGVkVmFsaWRhdG9ycyk7XG4gICAgc3VwcG9ydGVkVmFsaWRhdG9ycy5wdXNoKFwibnVtZXJpY1wiLCBcInRleHRcIiwgXCJyZWdleFwiLCBcImVtYWlsXCIpO1xuICB9XG59XG5cbmNvbnN0IG1pbk1heFR5cGVzID0gW1xuICBcIm51bWJlclwiLFxuICBcInJhbmdlXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gIFwibW9udGhcIixcbiAgXCJ0aW1lXCIsXG4gIFwid2Vla1wiLFxuXTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ0ZXh0XCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwibW9udGhcIixcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgICBcInJhbmdlXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGV4dFwiLFxuICAgICAgICBcInRpbWVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInNpemU6bnVtYmVyXCIsIGRlZmF1bHQ6IDI1IH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5cIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBtaW5NYXhUeXBlcy5pbmRleE9mKG9iai5pbnB1dFR5cGUpICE9PSAtMTtcbiAgICAgIH0sXG4gICAgICBvblByb3BlcnR5RWRpdG9yVXBkYXRlOiBmdW5jdGlvbiAob2JqOiBhbnksIHByb3BlcnR5RWRpdG9yOiBhbnkpIHtcbiAgICAgICAgcHJvcGVydHlFZGl0b3IuaW5wdXRUeXBlID0gb2JqLmlucHV0VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pbk1heFR5cGVzLmluZGV4T2Yob2JqLmlucHV0VHlwZSkgIT09IC0xO1xuICAgICAgfSxcbiAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uIChvYmo6IGFueSwgcHJvcGVydHlFZGl0b3I6IGFueSkge1xuICAgICAgICBwcm9wZXJ0eUVkaXRvci5pbnB1dFR5cGUgPSBvYmouaW5wdXRUeXBlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic3RlcDpudW1iZXJcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaW5wdXRUeXBlID09PSBcIm51bWJlclwiO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhMZW5ndGg6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwidGV4dFwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uVGV4dE1vZGVsKG5hbWUpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc3VydmV5IHJ1bm5pbmcgaW4gdGhlIFdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcbiAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xuICBleHBhbmRlZENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgc2hvd2luZ0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGluaXRpYWxNb2RlbCkge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24oc3VydmV5LCBvcHRpb25zKSB7XG4gICAgICBzZWxmLm9uU3VydmV5Q29tcGxldGUoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIndpbmRvd1wiO1xuICB9XG4gIC8qKlxuICAgKiBBIHN1cnZleSBvYmplY3QuXG4gICAqIEBzZWUgU3VydmV5TW9kZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgdmFsdWUgdG8gbmVnYXRpdmUgdmFsdWUsIGZvciBleGFtcGxlIC0xLCB0byBhdm9pZCBjbG9zaW5nIHRoZSB3aW5kb3cgb24gY29tcGxldGluZyB0aGUgc3VydmV5LiBMZWF2ZSBpdCBlcXVhbHMgdG8gMCAoZGVmYXVsdCB2YWx1ZSkgdG8gY2xvc2UgdGhlIHdpbmRvdyBpbW1lZGlhdGVseSwgb3Igc2V0IGl0IHRvIDMsIDUsIDEwLCAuLi4gdG8gY2xvc2UgdGhlIHdpbmRvdyBpbiAzLCA1LCAxMCBzZWNvbmRzLlxuICAgKi9cbiAgcHVibGljIGNsb3NlT25Db21wbGV0ZVRpbWVvdXQ6IG51bWJlciA9IDA7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgc2hvd2luZy4gU2V0IGl0IHRvIHRydWUgdG8gc2hvdyB0aGUgd2luZG93IGFuZCBmYWxzZSB0byBoaWRlIGl0LlxuICAgKiBAc2VlIHNob3dcbiAgICogQHNlZSBoaWRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93aW5nXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzU2hvd2luZyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmcgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTaG93aW5nXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaykgdGhpcy5zaG93aW5nQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNob3cgdGhlIHdpbmRvd1xuICAgKiBAc2VlIGhpZGVcbiAgICogQHNlZSBpc1Nob3dpbmdcbiAgICovXG4gIHB1YmxpYyBzaG93KCkge1xuICAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogSGlkZSB0aGUgd2luZG93XG4gICAqIEBzZWUgc2hvd1xuICAgKiBAc2VlIGlzU2hvd2luZ1xuICAgKi9cbiAgcHVibGljIGhpZGUoKSB7XG4gICAgdGhpcy5pc1Nob3dpbmcgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgZXhwYW5kZWQuIFNldCBpdCB0byB0cnVlIHRvIGV4cGFuZCB0aGUgd2luZG93IG9yIGZhbHNlIHRvIGNvbGxhcHNlIGl0LlxuICAgKiBAc2VlIGV4cGFuZFxuICAgKiBAc2VlIGNvbGxhcHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzRXhwYW5kZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNFeHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0V4cGFuZGVkXCIsIHZhbCk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuZXhwYW5kZWRDaGFuZ2VkQ2FsbGJhY2spXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB3aW5kb3cgYW5kIHN1cnZleSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdXJ2ZXkudGl0bGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5sb2NUaXRsZTtcbiAgfVxuICAvKipcbiAgICogRXhwYW5kIHRoZSB3aW5kb3cgdG8gc2hvdyB0aGUgc3VydmV5LlxuICAgKi9cbiAgcHVibGljIGV4cGFuZCgpIHtcbiAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBDb2xsYXBzZSB0aGUgd2luZG93IGFuZCBzaG93IHN1cnZleSB0aXRsZSBvbmx5LlxuICAgKi9cbiAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuZXhwYW5kY29sbGFwc2UoZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkoanNvbk9iajogYW55KTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiBuZXcgU3VydmV5TW9kZWwoanNvbk9iaik7XG4gIH1cbiAgcHJvdGVjdGVkIGV4cGFuZGNvbGxhcHNlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VydmV5Q29tcGxldGUoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA8IDApIHJldHVybjtcbiAgICBpZiAodGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID09IDApIHtcbiAgICAgIHRoaXMuY2xvc2VXaW5kb3dPbkNvbXBsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciB0aW1lcklkOiBhbnkgPSBudWxsO1xuICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5jbG9zZVdpbmRvd09uQ29tcGxldGUoKTtcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICB9O1xuICAgICAgdGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsb3NlV2luZG93T25Db21wbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5V2luZG93LnRzIiwiaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbmV4cG9ydCB2YXIgc3VydmV5VGltZXJGdW5jdGlvbnMgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGZ1bmM6ICgpID0+IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmMsIDEwMDApO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHRpbWVySWQ6IG51bWJlcikge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJJZCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUaW1lciB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlVmFsdWU6IFN1cnZleVRpbWVyID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UoKSB7XG4gICAgaWYgKCFTdXJ2ZXlUaW1lci5pbnN0YW5jZVZhbHVlKSB7XG4gICAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZVZhbHVlID0gbmV3IFN1cnZleVRpbWVyKCk7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlUaW1lci5pbnN0YW5jZVZhbHVlO1xuICB9XG4gIHByaXZhdGUgbGlzdGVuZXJDb3VudGVyID0gMDtcbiAgcHJpdmF0ZSB0aW1lcklkID0gLTE7XG4gIHB1YmxpYyBvblRpbWVyOiBFdmVudDwoKSA9PiBhbnksIGFueT4gPSBuZXcgRXZlbnQ8KCkgPT4gYW55LCBhbnk+KCk7XG4gIHB1YmxpYyBzdGFydChmdW5jOiAoKSA9PiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgIHRoaXMub25UaW1lci5hZGQoZnVuYyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVySWQgPCAwKSB7XG4gICAgICB0aGlzLnRpbWVySWQgPSBzdXJ2ZXlUaW1lckZ1bmN0aW9ucy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5kb1RpbWVyKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lckNvdW50ZXIrKztcbiAgfVxuICBwdWJsaWMgc3RvcChmdW5jOiAoKSA9PiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgIHRoaXMub25UaW1lci5yZW1vdmUoZnVuYyk7XG4gICAgfVxuICAgIHRoaXMubGlzdGVuZXJDb3VudGVyLS07XG4gICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudGVyID09IDAgJiYgdGhpcy50aW1lcklkID4gLTEpIHtcbiAgICAgIHN1cnZleVRpbWVyRnVuY3Rpb25zLmNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgICAgdGhpcy50aW1lcklkID0gLTE7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkb1RpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVySWQgPCAwKSByZXR1cm47XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIHRoaXMudGltZXJJZCA9IHN1cnZleVRpbWVyRnVuY3Rpb25zLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kb1RpbWVyKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXl0aW1lci50cyIsImltcG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuL2Nzc3N0YW5kYXJkXCI7XG5cbmV4cG9ydCB2YXIgZGVmYXVsdEJvb3RzdHJhcENzcyA9IHtcbiAgcm9vdDogXCJzdl9tYWluIHN2X2Jvb3RzdHJhcF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclwiLFxuICBib2R5OiBcInBhbmVsLWJvZHkgY2FyZC1ibG9jayBtdC00XCIsXG4gIGJvZHlFbXB0eTogXCJwYW5lbC1ib2R5IGNhcmQtYmxvY2sgbXQtNCBzdl9ib2R5X2VtcHR5XCIsXG4gIGZvb3RlcjogXCJwYW5lbC1mb290ZXIgY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuXCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG5cIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0blwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG5cIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0blwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuXCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0blwiLFxuICAgIGZsb3dSb290OiBcInN2X3FfZmxvdyBzdl9xc3RuXCIsXG4gICAgaGVhZGVyOiBcIlwiLFxuICAgIGhlYWRlckxlZnQ6IFwidGl0bGUtbGVmdFwiLFxuICAgIGNvbnRlbnQ6IFwiXCIsXG4gICAgY29udGVudExlZnQ6IFwiY29udGVudC1sZWZ0XCIsXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJzdl9xc3RuX2xlZnRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzbWFsbFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInN2X2V4cGFuZGVkXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGwgc3ZfcF9kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxuICAgIGZvb3RlcjogXCJzdl9wX2Zvb3RlclwiLFxuICB9LFxuICBlcnJvcjoge1xuICAgIHJvb3Q6IFwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIsXG4gICAgaWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ25cIixcbiAgICBpdGVtOiBcIlwiLFxuICAgIGxvY2F0aW9uVG9wOiBcInN2X3FzdG5fZXJyb3JfdG9wXCIsXG4gICAgbG9jYXRpb25Cb3R0b206IFwic3ZfcXN0bl9lcnJvcl9ib3R0b21cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIHJvb3Q6IFwic3ZfcWJsbiBmb3JtLWlubGluZSBjaGVja2JveFwiLFxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxuICAgIGNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzdi1ib29sZWFuLS1jaGVja2VkIGNoZWNrZWRcIixcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWJvb2xlYW4tLWRpc2FibGVkXCIsXG4gICAgc3dpdGNoOiBcInN2LWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3ZfcWNiYyBzdl9xY2J4IGZvcm0taW5saW5lXCIsXG4gICAgaXRlbTogXCJjaGVja2JveFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LW1hdGVyaWFsXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9jaGVja2JveF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcImZvcm0tY29udHJvbFwiLFxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInRhYmxlIHN2X3FfbWF0cml4XCIsXG4gICAgbGFiZWw6IFwic3ZfcV9tX2xhYmVsXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjogeyByb290OiBcInRhYmxlXCIgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBidXR0b246IFwiYnV0dG9uXCIsXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJidXR0b24gc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gIH0sXG4gIG11bHRpcGxldGV4dDoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVGl0bGU6IFwiXCIsXG4gICAgaXRlbVZhbHVlOiBcInN2X3FfbXRfaXRlbV92YWx1ZSBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgcmFkaW9ncm91cDoge1xuICAgIHJvb3Q6IFwic3ZfcWNiYyBmb3JtLWlubGluZVwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwiXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxuICAgIG90aGVyOiBcInN2X3FfcmFkaW9ncm91cF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXIgYnV0dG9uXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdl9xX2ZpbGVfcGxhY2Vob2xkZXJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwLnRzIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwiY2FyZC1oZWFkaW5nXCIsXG4gIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJjYXJkLWJvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwiY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG4gYnRuLXByaW1hcnlcIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG4gYnRuLXByaW1hcnlcIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0biBmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzbWFsbFwiLFxuICAgIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgcmVxdWlyZWQ6IFwiXCIsXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcbiAgICBoYXNFcnJvcjogXCJoYXMtZXJyb3JcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvcm1Hcm91cDogXCJmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gIH0sXG4gIHBhbmVsOiB7XG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9wX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICBpY29uOiBcInN2X3BhbmVsX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbCBzdl9wX2Rlc2NyaXB0aW9uXCIsXG4gICAgY29udGFpbmVyOiBcInN2X3BfY29udGFpbmVyXCIsXG4gICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYnhcIixcbiAgICBpdGVtOiBcImNoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgIGxhYmVsOiBcIlwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtZGVjb3JhdG9yXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9jaGVja2JveF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIGNvbW1lbnQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICBjb250cm9sOiBcImZvcm0tY29udHJvbFwiLFxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxuICBpbWFnZTogeyByb290OiBcInN2X3FfaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBtYXRyaXg6IHtcbiAgICByb290OiBcInRhYmxlIHN2X3FfbWF0cml4XCIsXG4gICAgcm93OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWwgcmFkaW8taW5saW5lXCIsXG4gICAgY2VsbFRleHQ6IFwic3ZfcV9tX2NlbGxfdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3ZfcV9tX2NlbGxfc2VsZWN0ZWQgYmctcHJpbWFyeVwiLFxuICAgIGNlbGxMYWJlbDogXCJzdl9xX21fY2VsbF9sYWJlbFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJmb3JtLWNvbnRyb2xcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJibWQtcmFkaW9cIlxuICB9LFxuICBtYXRyaXhkcm9wZG93bjogeyByb290OiBcInRhYmxlXCIsIGl0ZW1WYWx1ZTogXCJmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIG1haW5Sb290OiBcInN2X3FzdG5cIixcbiAgICBmbG93Um9vdDogXCJzdl9xX2Zsb3dcIixcbiAgICByb290OiBcInRhYmxlXCIsXG4gICAgYnV0dG9uOiBcImJ0biBidG4tcHJpbWFyeVwiLFxuICAgIGl0ZW1WYWx1ZTogXCJmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJcIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmU6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25QcmV2OiBcInN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIixcbiAgICBidXR0b25OZXh0OiBcInN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIixcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxuICAgIHByb2dyZXNzOiBcInN2LXByb2dyZXNzXCIsXG4gICAgcHJvZ3Jlc3NCYXI6IFwic3YtcHJvZ3Jlc3NfX2JhclwiLFxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcIlwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiYm1kLXJhZGlvXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b24gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXG4gICAgaXRlbTogXCJzdl9xX2ltZ3NlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3ZfcV9pbWdzZWxfbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX2ltZ3NlbF9jb250cm9sX2l0ZW1cIixcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfaW1nc2VsX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJidG4tZ3JvdXBcIixcbiAgICBpdGVtOiBcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XCIsXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXG4gICAgbWluVGV4dDogXCJzdl9xX3JhdGluZ19taW5fdGV4dFwiLFxuICAgIGl0ZW1UZXh0OiBcInN2X3FfcmF0aW5nX2l0ZW1fdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcbiAgICBkaXNhYmxlZDogXCJcIixcbiAgfSxcbiAgdGV4dDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZXhwcmVzc2lvbjogXCJmb3JtLWNvbnRyb2xcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cCBpcy1maWxlaW5wdXQgc3ZfcV9maWxlXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJcIixcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXG4gICAgcmVtb3ZlQnV0dG9uOiBcInN2X3FfZmlsZV9yZW1vdmVfYnV0dG9uXCIsXG4gICAgZmlsZUlucHV0OiBcInN2X3FfZmlsZV9pbnB1dFwiLFxuICAgIHJlbW92ZUZpbGU6IFwic3ZfcV9maWxlX3JlbW92ZVwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgY2FyZC10aXRsZVwiLFxuICAgICAgdGl0bGU6IFwicHVsbC1sZWZ0XCIsXG4gICAgICBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiLFxuICAgIH0sXG4gIH0sXG59O1xuKDxhbnk+c3VydmV5Q3NzKVtcImJvb3RzdHJhcG1hdGVyaWFsXCJdID0gZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWwudHMiLCJpbXBvcnQgeyBzdXJ2ZXlDc3MgfSBmcm9tIFwiLi9jc3NzdGFuZGFyZFwiO1xuZXhwb3J0IHZhciBtb2Rlcm5Dc3MgPSB7XG4gIHJvb3Q6IFwic3Ytcm9vdC1tb2Rlcm5cIixcbiAgY29udGFpbmVyOiBcInN2LWNvbnRhaW5lci1tb2Rlcm5cIixcbiAgaGVhZGVyOiBcInN2LXRpdGxlIHN2LWNvbnRhaW5lci1tb2Rlcm5fX3RpdGxlXCIsXG4gIGJvZHk6IFwic3YtYm9keVwiLFxuICBib2R5RW1wdHk6IFwic3YtYm9keSBzdi1ib2R5LS1lbXB0eVwiLFxuICBmb290ZXI6IFwic3YtZm9vdGVyIHN2LWJvZHlfX2Zvb3RlciBzdi1jbGVhcmZpeFwiLFxuICB0aXRsZTogXCJcIixcbiAgZGVzY3JpcHRpb246IFwiXCIsXG4gIGxvZ286IFwic3YtbG9nb1wiLFxuICBsb2dvSW1hZ2U6IFwic3YtbG9nb19faW1hZ2VcIixcbiAgaGVhZGVyVGV4dDogXCJzdi1oZWFkZXJfX3RleHRcIixcbiAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIixcbiAgY29tcGxldGVkUGFnZTogXCJzdi1jb21wbGV0ZWRwYWdlXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJzdi1idG4gc3YtZm9vdGVyX19jb21wbGV0ZS1idG5cIixcbiAgICBwcmV2OiBcInN2LWJ0biBzdi1mb290ZXJfX3ByZXYtYnRuXCIsXG4gICAgbmV4dDogXCJzdi1idG4gc3YtZm9vdGVyX19uZXh0LWJ0blwiLFxuICAgIHN0YXJ0OiBcInN2LWJ0biBzdi1mb290ZXJfX3N0YXJ0LWJ0blwiLFxuICAgIHByZXZpZXc6IFwic3YtYnRuIHN2LWZvb3Rlcl9fcHJldmlldy1idG5cIixcbiAgICBlZGl0OiBcInN2LWJ0biBzdi1mb290ZXJfX2VkaXQtYnRuXCIsXG4gIH0sXG4gIHBhbmVsOiB7XG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcGFuZWxfX3RpdGxlXCIsXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2LXBhbmVsX190aXRsZS0tZXhwYW5kYWJsZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhbmVsX19kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdi1wYW5lbCBzdi1yb3dfX3BhbmVsXCIsXG4gICAgY29udGVudDogXCJzdi1wYW5lbF9fY29udGVudFwiLFxuICAgIGljb246IFwic3YtcGFuZWxfX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3YtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZm9vdGVyOiBcInN2LXBhbmVsX19mb290ZXJcIixcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgcm9vdDogXCJzdi1wYW5lbGR5bmFtaWNcIixcbiAgICBuYXZpZ2F0aW9uOiBcInN2LXBhbmVsZHluYW1pY19fbmF2aWdhdGlvblwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJzdi1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuXCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206XG4gICAgICBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgc2VwYXJhdG9yOiBcInN2LXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInN2LXByb2dyZXNzIHN2LWJvZHlfX3Byb2dyZXNzXCIsXG4gIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInN2LXByb2dyZXNzX190ZXh0XCIsXG4gIHByb2dyZXNzVGV4dEluQmFyOiBcInN2LWhpZGRlblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJzdi1wYWdlIHN2LWJvZHlfX3BhZ2VcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIH0sXG4gIHBhZ2VUaXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwic3YtZGVzY3JpcHRpb24gc3YtcGFnZV9fZGVzY3JpcHRpb25cIixcbiAgcm93OiBcInN2LXJvdyBzdi1jbGVhcmZpeFwiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInN2LXF1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb25cIixcbiAgICBmbG93Um9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb24tLWZsb3dcIixcbiAgICBhc0NlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXI6IFwic3YtcXVlc3Rpb25fX2hlYWRlclwiLFxuICAgIGhlYWRlckxlZnQ6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWxlZnRcIixcbiAgICBoZWFkZXJUb3A6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGhlYWRlckJvdHRvbTogXCJzdi1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tYm90dG9tXCIsXG4gICAgY29udGVudDogXCJzdi1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcInN2LXF1ZXN0aW9uX19jb250ZW50LS1sZWZ0XCIsXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJcIixcbiAgICB0aXRsZU9uQW5zd2VyOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tZXJyb3JcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3YtcXVlc3Rpb25fX3JlcXVpcmVkLXRleHRcIixcbiAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzdi1kZXNjcmlwdGlvbiBzdi1xdWVzdGlvbl9fZGVzY3JpcHRpb25cIixcbiAgICBjb21tZW50OiBcInN2LWNvbW1lbnRcIixcbiAgICByZXF1aXJlZDogXCJzdi1xdWVzdGlvbi0tcmVxdWlyZWRcIixcbiAgICB0aXRsZVJlcXVpcmVkOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tcmVxdWlyZWRcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvb3RlcjogXCJzdi1xdWVzdGlvbl9fZm9vdGVyXCIsXG4gICAgZm9ybUdyb3VwOiBcInN2LXF1ZXN0aW9uX19mb3JtLWdyb3VwXCIsXG4gICAgaGFzRXJyb3I6IFwiXCIsXG4gICAgZGlzYWJsZWQ6IFwic3YtcXVlc3Rpb24tLWRpc2FibGVkXCIsXG4gIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3YtaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBlcnJvcjoge1xuICAgIHJvb3Q6IFwic3YtcXVlc3Rpb25fX2VyYm94XCIsXG4gICAgaWNvbjogXCJcIixcbiAgICBpdGVtOiBcIlwiLFxuICAgIGxvY2F0aW9uVG9wOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZVwiLFxuICAgIGl0ZW06IFwic3YtaXRlbSBzdi1jaGVja2JveCBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LWNoZWNrYm94LS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWNoZWNrYm94LS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWNoZWNrYm94LS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1zZWxlY3RiYXNlX19pdGVtLS1pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdi1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtY2hlY2tib3hfX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWNoZWNrYm94X19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgfSxcbiAgcmFkaW9ncm91cDoge1xuICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZVwiLFxuICAgIGl0ZW06IFwic3YtaXRlbSBzdi1yYWRpbyBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1zZWxlY3RiYXNlX19pdGVtLS1pbmxpbmVcIixcbiAgICBsYWJlbDogXCJzdi1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtcmFkaW8tLWFsbG93aG92ZXJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtcmFkaW9fX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2LWJ0biBzdi1zZWxlY3RiYXNlX19jbGVhci1idG5cIixcbiAgICBjb2x1bW46IFwic3Ytc2VsZWN0YmFzZV9fY29sdW1uXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuIHN2LWl0ZW1cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICByb290OiBcInN2LXRleHRcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIG9uRXJyb3I6IFwic3YtdGV4dC0tZXJyb3JcIixcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJzdi1tdWx0aXBsZXRleHRcIixcbiAgICBpdGVtOiBcInN2LW11bHRpcGxldGV4dF9faXRlbVwiLFxuICAgIGl0ZW1UaXRsZTogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW0tdGl0bGVcIixcbiAgICByb3c6IFwic3YtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICBjZWxsOiBcInN2LW11bHRpcGxldGV4dF9fY2VsbFwiLFxuICB9LFxuICBkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sOiBcInN2LWRyb3Bkb3duXCIsXG4gICAgc2VsZWN0V3JhcHBlcjogXCJcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIG9uRXJyb3I6IFwic3YtZHJvcGRvd24tLWVycm9yXCIsXG4gIH0sXG4gIGltYWdlcGlja2VyOiB7XG4gICAgcm9vdDogXCJzdi1pbWFnZXBpY2tlclwiLFxuICAgIGl0ZW06IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW1cIixcbiAgICBpdGVtSW5saW5lOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0tZGlzYWJsZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICBsYWJlbDogXCJzdi1pbWFnZXBpY2tlcl9fbGFiZWxcIixcbiAgICBpdGVtQ29udHJvbDogXCJzdi1pbWFnZXBpY2tlcl9fY29udHJvbFwiLFxuICAgIGltYWdlOiBcInN2LWltYWdlcGlja2VyX19pbWFnZVwiLFxuICAgIGl0ZW1UZXh0OiBcInN2LWltYWdlcGlja2VyX190ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3YtYnRuXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgfSxcbiAgbWF0cml4OiB7XG4gICAgdGFibGVXcmFwcGVyOiBcInN2LW1hdHJpeFwiLFxuICAgIHJvb3Q6IFwic3YtdGFibGVcIixcbiAgICBjZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LW1hdHJpeF9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGxhYmVsOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3YtbWF0cml4X19sYWJlbFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdi12aXN1YWxseWhpZGRlbiBzdi1pdGVtX19jb250cm9sIHN2LXJhZGlvX19jb250cm9sXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1yYWRpb19fc3ZnXCIsXG4gICAgY2VsbFRleHQ6IFwic3YtbWF0cml4X190ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdi1tYXRyaXhfX3RleHQtLdGBaGVja2VkXCIsXG4gICAgY2VsbFRleHREaXNhYmxlZDogXCJzdi1tYXRyaXhfX3RleHQtLWRpc2FibGVkXCIsXG4gIH0sXG4gIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJzdi10YWJsZVwiLFxuICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgfSxcbiAgbWF0cml4ZHluYW1pYzoge1xuICAgIHJvb3Q6IFwic3YtdGFibGUgc3YtbWF0cml4ZHluYW1pY1wiLFxuICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICBidXR0b246IFwic3YtYnRuXCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LW1hdHJpeGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBidXR0b25SZW1vdmU6IFwic3YtbWF0cml4ZHluYW1pY19fcmVtb3ZlLWJ0blwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYXRpbmdcIixcbiAgICBpdGVtOiBcInN2LXJhdGluZ19faXRlbVwiLFxuICAgIHNlbGVjdGVkOiBcInN2LXJhdGluZ19faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBtaW5UZXh0OiBcInN2LXJhdGluZ19fbWluLXRleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdi1yYXRpbmdfX2l0ZW0tdGV4dFwiLFxuICAgIG1heFRleHQ6IFwic3YtcmF0aW5nX19tYXgtdGV4dFwiLFxuICAgIGRpc2FibGVkOiBcInN2LXJhdGluZy0tZGlzYWJsZWRcIixcbiAgfSxcbiAgY29tbWVudDoge1xuICAgIHJvb3Q6IFwic3YtY29tbWVudFwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gIH0sXG4gIGV4cHJlc3Npb246IFwiXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcInN2LWZpbGVcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBwcmV2aWV3OiBcInN2LWZpbGVfX3ByZXZpZXdcIixcbiAgICBmaWxlU2lnbjogXCJzdi1oaWRkZW5cIixcbiAgICBmaWxlU2lnbkJvdHRvbTogXCJzdi1maWxlX19zaWduXCIsXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1maWxlX19kZWNvcmF0b3JcIixcbiAgICBmaWxlSW5wdXQ6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgICBub0ZpbGVDaG9zZW46IFwic3YtZGVzY3JpcHRpb24gc3YtZmlsZV9fbm8tZmlsZS1jaG9zZW5cIixcbiAgICBjaG9vc2VGaWxlOiBcInN2LWJ0biBzdi1maWxlX19jaG9vc2UtYnRuXCIsXG4gICAgZGlzYWJsZWQ6IFwic3YtZmlsZV9fY2hvb3NlLWJ0bi0tZGlzYWJsZWRcIixcbiAgICByZW1vdmVCdXR0b246IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWJ0biBzdi1maWxlX19jbGVhbi1idG5cIixcbiAgICByZW1vdmVGaWxlOiBcInN2LWhpZGRlblwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtZmlsZV9fcmVtb3ZlLXN2Z1wiLFxuICAgIHdyYXBwZXI6IFwic3YtZmlsZV9fd3JhcHBlclwiLFxuICB9LFxuICBzaWduYXR1cmVwYWQ6IHtcbiAgICByb290OiBcInN2LXNpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sczogXCJzanNfc3BfY29udHJvbHNcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcbiAgfSxcbiAgc2F2ZURhdGE6IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNhdmluZzogXCJcIixcbiAgICBlcnJvcjogXCJcIixcbiAgICBzdWNjZXNzOiBcIlwiLFxuICAgIHNhdmVBZ2FpbkJ1dHRvbjogXCJcIixcbiAgfSxcbiAgd2luZG93OiB7XG4gICAgcm9vdDogXCJzdl93aW5kb3dcIixcbiAgICBib2R5OiBcInN2X3dpbmRvd19jb250ZW50XCIsXG4gICAgaGVhZGVyOiB7XG4gICAgICByb290OiBcInN2X3dpbmRvd190aXRsZVwiLFxuICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICBidXR0b246IFwiXCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJcIixcbiAgICAgIGJ1dHRvbkNvbGxhcHNlZDogXCJcIixcbiAgICB9LFxuICB9LFxufTtcblxuc3VydmV5Q3NzW1wibW9kZXJuXCJdID0gbW9kZXJuQ3NzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RlZmF1bHRDc3MvY3NzbW9kZXJuLnRzIiwiaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2FyYWJpY1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2J1bGdhcmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2NhdGFsYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jemVjaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZXN0b25pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ2VvcmdpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9nZXJtYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ncmVla1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hlYnJld1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2h1bmdhcmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2ljZWxhbmRpY1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2luZG9uZXNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9pdGFsaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vamFwYW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9rb3JlYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9sYXR2aWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vbGl0aHVhbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3BlcnNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcm9tYW5pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ydXNzaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc3BhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3ZWRpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90aGFpXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3RyYWRpdGlvbmFsLWNoaW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi91a3JhaW5pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90YWppa1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3YWhpbGlcIjtcblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIi8vIHN0eWxlc1xuaW1wb3J0IFwiLi4vLi4vbWFpbi5zY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi9tb2Rlcm4uc2Nzc1wiO1xuXG5leHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcblZlcnNpb24gPSBgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWA7XG5cbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL3NldHRpbmdzXCI7XG5leHBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIEFuc3dlckNvdW50VmFsaWRhdG9yLFxuICBFbWFpbFZhbGlkYXRvcixcbiAgTnVtZXJpY1ZhbGlkYXRvcixcbiAgUmVnZXhWYWxpZGF0b3IsXG4gIFN1cnZleVZhbGlkYXRvcixcbiAgVGV4dFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yUmVzdWx0LFxuICBFeHByZXNzaW9uVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JSdW5uZXIsXG59IGZyb20gXCIuLi8uLi92YWxpZGF0b3JcIjtcbmV4cG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi8uLi9pdGVtdmFsdWVcIjtcbmV4cG9ydCB7IEJhc2UsIEV2ZW50LCBTdXJ2ZXlFcnJvciwgSVN1cnZleSwgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5leHBvcnQgeyBDYWxjdWxhdGVkVmFsdWUgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRlZFZhbHVlXCI7XG5leHBvcnQge1xuICBDdXN0b21FcnJvcixcbiAgQW5zd2VyUmVxdWlyZWRFcnJvcixcbiAgT25lQW5zd2VyUmVxdWlyZWRFcnJvcixcbiAgUmVxdXJlTnVtZXJpY0Vycm9yLFxuICBFeGNlZWRTaXplRXJyb3IsXG59IGZyb20gXCIuLi8uLi9lcnJvclwiO1xuZXhwb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5leHBvcnQgeyBIdG1sQ29uZGl0aW9uSXRlbSwgVXJsQ29uZGl0aW9uSXRlbSB9IGZyb20gXCIuLi8uLi9leHByZXNzaW9uSXRlbXNcIjtcbmV4cG9ydCB7IENob2ljZXNSZXN0ZnVsbCB9IGZyb20gXCIuLi8uLi9jaG9pY2VzUmVzdGZ1bGxcIjtcbmV4cG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSwgcmVnaXN0ZXJGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9mdW5jdGlvbnNmYWN0b3J5XCI7XG5leHBvcnQgeyBDb25kaXRpb25SdW5uZXIsIEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uc1wiO1xuZXhwb3J0IHtcbiAgT3BlcmFuZCxcbiAgQ29uc3QsXG4gIEJpbmFyeU9wZXJhbmQsXG4gIFZhcmlhYmxlLFxuICBGdW5jdGlvbk9wZXJhbmQsXG4gIEFycmF5T3BlcmFuZCxcbn0gZnJvbSBcIi4uLy4uL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5leHBvcnQgeyBDb25kaXRpb25zUGFyc2VyIH0gZnJvbSBcIi4uLy4uL2NvbmRpdGlvbnNQYXJzZXJcIjtcbmV4cG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmV4cG9ydCB7XG4gIEpzb25FcnJvcixcbiAgSnNvbkluY29ycmVjdFR5cGVFcnJvcixcbiAgSnNvbk1ldGFkYXRhLFxuICBKc29uTWV0YWRhdGFDbGFzcyxcbiAgSnNvbk1pc3NpbmdUeXBlRXJyb3IsXG4gIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSxcbiAgSnNvbk9iamVjdCxcbiAgSnNvbk9iamVjdFByb3BlcnR5LFxuICBKc29uUmVxdWlyZWRQcm9wZXJ0eUVycm9yLFxuICBKc29uVW5rbm93blByb3BlcnR5RXJyb3IsXG4gIFNlcmlhbGl6ZXIsXG59IGZyb20gXCIuLi8uLi9qc29ub2JqZWN0XCI7XG5leHBvcnQge1xuICBNYXRyaXhEcm9wZG93bkNlbGwsXG4gIE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzLFxuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuZXhwb3J0IHtcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbCxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcbmV4cG9ydCB7XG4gIE1hdHJpeER5bmFtaWNSb3dNb2RlbCxcbiAgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQge1xuICBNYXRyaXhSb3dNb2RlbCxcbiAgTWFydHJpeENlbGxzLFxuICBRdWVzdGlvbk1hdHJpeE1vZGVsLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4XCI7XG5leHBvcnQge1xuICBNdWx0aXBsZVRleHRJdGVtTW9kZWwsXG4gIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcbmV4cG9ydCB7IFBhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3BhbmVsXCI7XG5leHBvcnQgeyBGbG93UGFuZWxNb2RlbCB9IGZyb20gXCIuLi8uLi9mbG93cGFuZWxcIjtcbmV4cG9ydCB7IFBhZ2VNb2RlbCB9IGZyb20gXCIuLi8uLi9wYWdlXCI7XG5leHBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuLi8uLi9xdWVzdGlvblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbm5vbnZhbHVlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZW1wdHlcIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQ2hlY2tib3hCYXNlLFxuICBRdWVzdGlvblNlbGVjdEJhc2UsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5leHBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fY2hlY2tib3hcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NvbW1lbnRcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHsgUXVlc3Rpb25GYWN0b3J5LCBFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2ZpbGVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2h0bWxcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcmF0aW5nXCI7XG5leHBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl90ZXh0XCI7XG5leHBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9ib29sZWFuXCI7XG5leHBvcnQgeyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9pbWFnZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwsXG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5VGltZXIgfSBmcm9tIFwiLi4vLi4vc3VydmV5dGltZXJcIjtcbmV4cG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVwiO1xuZXhwb3J0IHtcbiAgU3VydmV5VHJpZ2dlcixcbiAgU3VydmV5VHJpZ2dlckNvbXBsZXRlLFxuICBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUsXG4gIFN1cnZleVRyaWdnZXJWaXNpYmxlLFxuICBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlLFxuICBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbixcbiAgVHJpZ2dlcixcbn0gZnJvbSBcIi4uLy4uL3RyaWdnZXJcIjtcbmV4cG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVdpbmRvd1wiO1xuZXhwb3J0IHsgVGV4dFByZVByb2Nlc3NvciB9IGZyb20gXCIuLi8uLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5cbmV4cG9ydCB7IGR4U3VydmV5U2VydmljZSB9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcbmV4cG9ydCB7IGVuZ2xpc2hTdHJpbmdzIH0gZnJvbSBcIi4uLy4uL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xuLy8gZXhwb3J0IHsgY3VsdHVyZUluZm8gfSBmcm9tIFwiLi4vLi4vY3VsdHVyZUluZm9cIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LFxuICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkN1c3RvbU1vZGVsLFxuICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLFxuICBDb21wb25lbnRRdWVzdGlvbkpTT04sXG4gIENvbXBvbmVudENvbGxlY3Rpb24sXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9zdHlsZXNtYW5hZ2VyXCI7XG5cbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBRdWVzdGlvbkRhdGVNb2RlbH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvcXVlc3Rpb25fZGF0ZVwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvY2h1bmtzL21vZGVsLnRzIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vYm9vbGVhbi52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Jvb2xlYW4udnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTFlZGI5ZGQ2XFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vYm9vbGVhbi52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYm9vbGVhbi52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMWVkYjlkZDZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xZWRiOWRkNlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvYm9vbGVhbi52dWVcbi8vIG1vZHVsZSBpZCA9IDkyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NoZWNrYm94LnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY2hlY2tib3gudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LWNhZDI3NmY2XFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vY2hlY2tib3gudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NoZWNrYm94LnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi1jYWQyNzZmNlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWNhZDI3NmY2XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9jaGVja2JveC52dWVcbi8vIG1vZHVsZSBpZCA9IDkzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NoZWNrYm94aXRlbS52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NoZWNrYm94aXRlbS52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtYzU4YzgwZDBcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9jaGVja2JveGl0ZW0udnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NoZWNrYm94aXRlbS52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtYzU4YzgwZDBcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi1jNThjODBkMFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZVxuLy8gbW9kdWxlIGlkID0gOTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY29tbWVudC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NvbW1lbnQudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTA5OWMyYzhkXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vY29tbWVudC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tbWVudC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMDk5YzJjOGRcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0wOTljMmM4ZFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvY29tbWVudC52dWVcbi8vIG1vZHVsZSBpZCA9IDk1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NvbXBvc2l0ZS52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2NvbXBvc2l0ZS52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMWE5ZTIxOTZcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9jb21wb3NpdGUudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvc2l0ZS52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMWE5ZTIxOTZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xYTllMjE5NlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvY29tcG9zaXRlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY3VzdG9tLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vY3VzdG9tLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi1kNGFhZTA5YVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2N1c3RvbS52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9tLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi1kNGFhZTA5YVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWQ0YWFlMDlhXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9jdXN0b20udnVlXG4vLyBtb2R1bGUgaWQgPSA5N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9jdXN0b213aWRnZXQudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9jdXN0b213aWRnZXQudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTFlNjFhN2I3XFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vY3VzdG9td2lkZ2V0LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTFlNjFhN2I3XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtMWU2MWE3YjdcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWVcbi8vIG1vZHVsZSBpZCA9IDk4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Ryb3Bkb3duLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZHJvcGRvd24udnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTZiMzIxNWQzXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vZHJvcGRvd24udnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi02YjMyMTVkM1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTZiMzIxNWQzXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9kcm9wZG93bi52dWVcbi8vIG1vZHVsZSBpZCA9IDk5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2VsZW1lbnQudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9lbGVtZW50LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi05NzM0NzJhY1xcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2VsZW1lbnQudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VsZW1lbnQudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTk3MzQ3MmFjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtOTczNDcyYWNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2VsZW1lbnQudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZWxlbWVudGhlYWRlci52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2VsZW1lbnRoZWFkZXIudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTI3YWRjNTM3XFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vZWxlbWVudGhlYWRlci52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudGhlYWRlci52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMjdhZGM1MzdcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0yN2FkYzUzN1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZWxlbWVudGhlYWRlci52dWVcbi8vIG1vZHVsZSBpZCA9IDEwMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9lbXB0eS52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2VtcHR5LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi0wNTA1MmMwYVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2VtcHR5LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9lbXB0eS52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMDUwNTJjMGFcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0wNTA1MmMwYVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZW1wdHkudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZXJyb3JzLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZXJyb3JzLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi01NjgyZTZhZFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2Vycm9ycy52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZXJyb3JzLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi01NjgyZTZhZFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTU2ODJlNmFkXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9lcnJvcnMudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZXhwcmVzc2lvbi52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2V4cHJlc3Npb24udnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTFkMjA4NjVhXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vZXhwcmVzc2lvbi52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZXhwcmVzc2lvbi52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMWQyMDg2NWFcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xZDIwODY1YVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZXhwcmVzc2lvbi52dWVcbi8vIG1vZHVsZSBpZCA9IDEwNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9maWxlLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vZmlsZS52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMjBmNzAyODRcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9maWxlLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9maWxlLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi0yMGY3MDI4NFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTIwZjcwMjg0XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9maWxlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Zsb3dwYW5lbC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Zsb3dwYW5lbC52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtOTZhZTFhNzhcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9mbG93cGFuZWwudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtOTZhZTFhNzhcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi05NmFlMWE3OFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi05ZDk5MmMzMFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTlkOTkyYzMwXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtOWQ5OTJjMzBcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vaGVhZGVyLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vaGVhZGVyLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi02OWNmZjhjZlxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2hlYWRlci52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaGVhZGVyLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi02OWNmZjhjZlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTY5Y2ZmOGNmXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9oZWFkZXIudnVlXG4vLyBtb2R1bGUgaWQgPSAxMDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vaHRtbC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2h0bWwudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTA3NDJlMTZkXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vaHRtbC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaHRtbC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMDc0MmUxNmRcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0wNzQyZTE2ZFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvaHRtbC52dWVcbi8vIG1vZHVsZSBpZCA9IDEwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9pbWFnZS52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL2ltYWdlLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi0xZGM4ZDcwOVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL2ltYWdlLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9pbWFnZS52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMWRjOGQ3MDlcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0xZGM4ZDcwOVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvaW1hZ2UudnVlXG4vLyBtb2R1bGUgaWQgPSAxMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vaW1hZ2VwaWNrZXIudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9pbWFnZXBpY2tlci52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMTUzZmUwNTJcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9pbWFnZXBpY2tlci52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvaW1hZ2VwaWNrZXIudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTE1M2ZlMDUyXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtMTUzZmUwNTJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeC52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtN2ZhMmY0MDNcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tYXRyaXgudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtN2ZhMmY0MDNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi03ZmEyZjQwM1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvbWF0cml4LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeGNlbGwudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tYXRyaXhjZWxsLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi0zY2E1NGVlNVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL21hdHJpeGNlbGwudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGNlbGwudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTNjYTU0ZWU1XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtM2NhNTRlZTVcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlXG4vLyBtb2R1bGUgaWQgPSAxMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vbWF0cml4ZHJvcGRvd24udnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tYXRyaXhkcm9wZG93bi52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMGI0ZGE2ZDhcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tYXRyaXhkcm9wZG93bi52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTBiNGRhNmQ4XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtMGI0ZGE2ZDhcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL21hdHJpeGR5bmFtaWMudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tYXRyaXhkeW5hbWljLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi05YTBiODhlOFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL21hdHJpeGR5bmFtaWMudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTlhMGI4OGU4XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtOWEwYjg4ZThcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlXG4vLyBtb2R1bGUgaWQgPSAxMTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vbWF0cml4dGFibGUudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9tYXRyaXh0YWJsZS52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtZmExOTdlNGFcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tYXRyaXh0YWJsZS52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4dGFibGUudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LWZhMTk3ZTRhXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtZmExOTdlNGFcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL211bHRpcGxldGV4dC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL211bHRpcGxldGV4dC52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtOTNmZTRjMDJcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9tdWx0aXBsZXRleHQudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL211bHRpcGxldGV4dC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtOTNmZTRjMDJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi05M2ZlNGMwMlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL25hdmlnYXRpb24udnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9uYXZpZ2F0aW9uLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi03NWVhZGZkNlxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL25hdmlnYXRpb24udnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL25hdmlnYXRpb24udnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTc1ZWFkZmQ2XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNzVlYWRmZDZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL25hdmlnYXRpb24udnVlXG4vLyBtb2R1bGUgaWQgPSAxMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vb3RoZXJDaG9pY2UudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9vdGhlckNob2ljZS52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMmVkNzc2ZmZcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9vdGhlckNob2ljZS52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvb3RoZXJDaG9pY2UudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTJlZDc3NmZmXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtMmVkNzc2ZmZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3BhZ2UudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wYWdlLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi00ZTk2MmE1MVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3BhZ2UudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhZ2UudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTRlOTYyYTUxXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtNGU5NjJhNTFcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL3BhZ2UudnVlXG4vLyBtb2R1bGUgaWQgPSAxMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcGFuZWwudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wYW5lbC52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMGM3ODg5OWNcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9wYW5lbC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWwudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LTBjNzg4OTljXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtMGM3ODg5OWNcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL3BhbmVsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3BhbmVsZHluYW1pYy52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3BhbmVsZHluYW1pYy52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtOWRkYTVkMDZcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9wYW5lbGR5bmFtaWMudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtOWRkYTVkMDZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi05ZGRhNWQwNlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTc0MmJmZmFjXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi03NDJiZmZhY1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTc0MmJmZmFjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcbi8vIG1vZHVsZSBpZCA9IDEyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCJcbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LWRiNmIyZjdlXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCJcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHsoZnVuY3Rpb24gKCkge1xuICB2YXIgaG90QVBJID0gcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKVxuICBob3RBUEkuaW5zdGFsbChyZXF1aXJlKFwidnVlXCIpLCBmYWxzZSlcbiAgaWYgKCFob3RBUEkuY29tcGF0aWJsZSkgcmV0dXJuXG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICBob3RBUEkuY3JlYXRlUmVjb3JkKFwiZGF0YS12LWRiNmIyZjdlXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGhvdEFQSS5yZWxvYWQoXCJkYXRhLXYtZGI2YjJmN2VcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWVcbi8vIG1vZHVsZSBpZCA9IDEyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9wcm9ncmVzcy52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3Byb2dyZXNzLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi0yN2UzMjVlZlxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3Byb2dyZXNzLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzcy52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMjdlMzI1ZWZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0yN2UzMjVlZlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcHJvZ3Jlc3MudnVlXG4vLyBtb2R1bGUgaWQgPSAxMjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcmFkaW9ncm91cC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3JhZGlvZ3JvdXAudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTA2YzZkNTI2XFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vcmFkaW9ncm91cC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmFkaW9ncm91cC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtMDZjNmQ1MjZcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi0wNmM2ZDUyNlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcmFkaW9ncm91cC52dWVcbi8vIG1vZHVsZSBpZCA9IDEyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi9yYWRpb2dyb3VwaXRlbS52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi01YmJlOTdiOVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3JhZGlvZ3JvdXBpdGVtLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtNWJiZTk3YjlcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi01YmJlOTdiOVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlXG4vLyBtb2R1bGUgaWQgPSAxMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcmF0aW5nLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcmF0aW5nLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi03MDkyYmZkZlxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3JhdGluZy52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcmF0aW5nLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi03MDkyYmZkZlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTcwOTJiZmRmXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9yYXRpbmcudnVlXG4vLyBtb2R1bGUgaWQgPSAxMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcm93LnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vcm93LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi03Y2MwYmQ4OFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3Jvdy52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcm93LnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi03Y2MwYmQ4OFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTdjYzBiZDg4XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9yb3cudnVlXG4vLyBtb2R1bGUgaWQgPSAxMjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc2lnbmF0dXJlcGFkLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc2lnbmF0dXJlcGFkLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi0wNDYyMzQ5ZFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NpZ25hdHVyZXBhZC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc2lnbmF0dXJlcGFkLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi0wNDYyMzQ5ZFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTA0NjIzNDlkXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlXG4vLyBtb2R1bGUgaWQgPSAxMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3RyaW5nLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3RyaW5nLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi1kM2EzZDc1YVxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3N0cmluZy52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3RyaW5nLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi1kM2EzZDc1YVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LWQzYTNkNzVhXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9zdHJpbmcudnVlXG4vLyBtb2R1bGUgaWQgPSAxMzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3VydmV5LnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vc3VydmV5LnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IHtyZW5kZXIgYXMgX192dWVfcmVuZGVyX18sIHN0YXRpY1JlbmRlckZucyBhcyBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19ffSBmcm9tIFwiISEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXIvaW5kZXg/e1xcXCJpZFxcXCI6XFxcImRhdGEtdi02ODc0ZTFjOFxcXCIsXFxcImhhc1Njb3BlZFxcXCI6ZmFsc2UsXFxcImJ1YmxlXFxcIjp7XFxcInRyYW5zZm9ybXNcXFwiOnt9fX0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3N1cnZleS52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvc3VydmV5LnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi02ODc0ZTFjOFwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTY4NzRlMWM4XCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS9zdXJ2ZXkudnVlXG4vLyBtb2R1bGUgaWQgPSAxMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGRpc3Bvc2VkID0gZmFsc2Vcbi8qIHNjcmlwdCAqL1xuZXhwb3J0ICogZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vdGV4dC52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3RleHQudnVlXCJcbi8qIHRlbXBsYXRlICovXG5pbXBvcnQge3JlbmRlciBhcyBfX3Z1ZV9yZW5kZXJfXywgc3RhdGljUmVuZGVyRm5zIGFzIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX199IGZyb20gXCIhIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlci9pbmRleD97XFxcImlkXFxcIjpcXFwiZGF0YS12LTQwZWNlNDIyXFxcIixcXFwiaGFzU2NvcGVkXFxcIjpmYWxzZSxcXFwiYnVibGVcXFwiOntcXFwidHJhbnNmb3Jtc1xcXCI6e319fSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vdGV4dC52dWVcIlxuLyogdGVtcGxhdGUgZnVuY3Rpb25hbCAqL1xudmFyIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyA9IGZhbHNlXG4vKiBzdHlsZXMgKi9cbnZhciBfX3Z1ZV9zdHlsZXNfXyA9IG51bGxcbi8qIHNjb3BlSWQgKi9cbnZhciBfX3Z1ZV9zY29wZUlkX18gPSBudWxsXG4vKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cbnZhciBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fID0gbnVsbFxuaW1wb3J0IG5vcm1hbGl6ZUNvbXBvbmVudCBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudC1ub3JtYWxpemVyXCJcbnZhciBDb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIF9fdnVlX3NjcmlwdF9fLFxuICBfX3Z1ZV9yZW5kZXJfXyxcbiAgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvdGV4dC52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtNDBlY2U0MjJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi00MGVjZTQyMlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvdGV4dC52dWVcbi8vIG1vZHVsZSBpZCA9IDEzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuLyogc2NyaXB0ICovXG5leHBvcnQgKiBmcm9tIFwiISF0cy1sb2FkZXIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAhLi90aW1lcnBhbmVsLnZ1ZVwiXG5pbXBvcnQgX192dWVfc2NyaXB0X18gZnJvbSBcIiEhdHMtbG9hZGVyIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXNjcmlwdCZpbmRleD0wIS4vdGltZXJwYW5lbC52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMGQyYWJlMjFcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi90aW1lcnBhbmVsLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG52YXIgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fID0gZmFsc2Vcbi8qIHN0eWxlcyAqL1xudmFyIF9fdnVlX3N0eWxlc19fID0gbnVsbFxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG5pbXBvcnQgbm9ybWFsaXplQ29tcG9uZW50IGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50LW5vcm1hbGl6ZXJcIlxudmFyIENvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgX192dWVfc2NyaXB0X18sXG4gIF9fdnVlX3JlbmRlcl9fLFxuICBfX3Z1ZV9zdGF0aWNfcmVuZGVyX2Zuc19fLFxuICBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18sXG4gIF9fdnVlX3N0eWxlc19fLFxuICBfX3Z1ZV9zY29wZUlkX18sXG4gIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX19cbilcbkNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZVwiXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi0wZDJhYmUyMVwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTBkMmFiZTIxXCIsIENvbXBvbmVudC5vcHRpb25zKVxuICB9XG4gIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICB9KVxufSkoKX1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50LmV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTM0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkaXNwb3NlZCA9IGZhbHNlXG4vKiBzY3JpcHQgKi9cbmV4cG9ydCAqIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3dpbmRvdy52dWVcIlxuaW1wb3J0IF9fdnVlX3NjcmlwdF9fIGZyb20gXCIhIXRzLWxvYWRlciEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3I/dHlwZT1zY3JpcHQmaW5kZXg9MCEuL3dpbmRvdy52dWVcIlxuLyogdGVtcGxhdGUgKi9cbmltcG9ydCB7cmVuZGVyIGFzIF9fdnVlX3JlbmRlcl9fLCBzdGF0aWNSZW5kZXJGbnMgYXMgX192dWVfc3RhdGljX3JlbmRlcl9mbnNfX30gZnJvbSBcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtNjJmNTg4YjJcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi93aW5kb3cudnVlXCJcbi8qIHRlbXBsYXRlIGZ1bmN0aW9uYWwgKi9cbnZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBudWxsXG4vKiBzY29wZUlkICovXG52YXIgX192dWVfc2NvcGVJZF9fID0gbnVsbFxuLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG52YXIgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfXyA9IG51bGxcbmltcG9ydCBub3JtYWxpemVDb21wb25lbnQgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnQtbm9ybWFsaXplclwiXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfcmVuZGVyX18sXG4gIF9fdnVlX3N0YXRpY19yZW5kZXJfZm5zX18sXG4gIF9fdnVlX3RlbXBsYXRlX2Z1bmN0aW9uYWxfXyxcbiAgX192dWVfc3R5bGVzX18sXG4gIF9fdnVlX3Njb3BlSWRfXyxcbiAgX192dWVfbW9kdWxlX2lkZW50aWZpZXJfX1xuKVxuQ29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3dpbmRvdy52dWVcIlxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkgeyhmdW5jdGlvbiAoKSB7XG4gIHZhciBob3RBUEkgPSByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpXG4gIGhvdEFQSS5pbnN0YWxsKHJlcXVpcmUoXCJ2dWVcIiksIGZhbHNlKVxuICBpZiAoIWhvdEFQSS5jb21wYXRpYmxlKSByZXR1cm5cbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgIGhvdEFQSS5jcmVhdGVSZWNvcmQoXCJkYXRhLXYtNjJmNTg4YjJcIiwgQ29tcG9uZW50Lm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgaG90QVBJLnJlbG9hZChcImRhdGEtdi02MmY1ODhiMlwiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfVxuICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgfSlcbn0pKCl9XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudC5leHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy92dWUvd2luZG93LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMTM1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWFpbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9tb2Rlcm4uc2Nzc1xuLy8gbW9kdWxlIGlkID0gMTM3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChDKSBNaWNyb3NvZnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cblxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xudmFyIFJlZmxlY3Q7XG4oZnVuY3Rpb24gKFJlZmxlY3QpIHtcbiAgICAvLyBNZXRhZGF0YSBQcm9wb3NhbFxuICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvXG4gICAgKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gICAgICAgICAgICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzID09PSBcIm9iamVjdFwiID8gdGhpcyA6XG4gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uKFwicmV0dXJuIHRoaXM7XCIpKCk7XG4gICAgICAgIHZhciBleHBvcnRlciA9IG1ha2VFeHBvcnRlcihSZWZsZWN0KTtcbiAgICAgICAgaWYgKHR5cGVvZiByb290LlJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJvb3QuUmVmbGVjdCA9IFJlZmxlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRlciA9IG1ha2VFeHBvcnRlcihyb290LlJlZmxlY3QsIGV4cG9ydGVyKTtcbiAgICAgICAgfVxuICAgICAgICBmYWN0b3J5KGV4cG9ydGVyKTtcbiAgICAgICAgZnVuY3Rpb24gbWFrZUV4cG9ydGVyKHRhcmdldCwgcHJldmlvdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHsgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMpXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKGZ1bmN0aW9uIChleHBvcnRlcikge1xuICAgICAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgICAgICAgLy8gZmVhdHVyZSB0ZXN0IGZvciBTeW1ib2wgc3VwcG9ydFxuICAgICAgICB2YXIgc3VwcG9ydHNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIHZhciB0b1ByaW1pdGl2ZVN5bWJvbCA9IHN1cHBvcnRzU3ltYm9sICYmIHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgIT09IFwidW5kZWZpbmVkXCIgPyBTeW1ib2wudG9QcmltaXRpdmUgOiBcIkBAdG9QcmltaXRpdmVcIjtcbiAgICAgICAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gc3VwcG9ydHNTeW1ib2wgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IFN5bWJvbC5pdGVyYXRvciA6IFwiQEBpdGVyYXRvclwiO1xuICAgICAgICB2YXIgc3VwcG9ydHNDcmVhdGUgPSB0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiOyAvLyBmZWF0dXJlIHRlc3QgZm9yIE9iamVjdC5jcmVhdGUgc3VwcG9ydFxuICAgICAgICB2YXIgc3VwcG9ydHNQcm90byA9IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXk7IC8vIGZlYXR1cmUgdGVzdCBmb3IgX19wcm90b19fIHN1cHBvcnRcbiAgICAgICAgdmFyIGRvd25MZXZlbCA9ICFzdXBwb3J0c0NyZWF0ZSAmJiAhc3VwcG9ydHNQcm90bztcbiAgICAgICAgdmFyIEhhc2hNYXAgPSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgYW4gb2JqZWN0IGluIGRpY3Rpb25hcnkgbW9kZSAoYS5rLmEuIFwic2xvd1wiIG1vZGUgaW4gdjgpXG4gICAgICAgICAgICBjcmVhdGU6IHN1cHBvcnRzQ3JlYXRlXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBNYWtlRGljdGlvbmFyeShPYmplY3QuY3JlYXRlKG51bGwpKTsgfVxuICAgICAgICAgICAgICAgIDogc3VwcG9ydHNQcm90b1xuICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE1ha2VEaWN0aW9uYXJ5KHsgX19wcm90b19fOiBudWxsIH0pOyB9XG4gICAgICAgICAgICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTWFrZURpY3Rpb25hcnkoe30pOyB9LFxuICAgICAgICAgICAgaGFzOiBkb3duTGV2ZWxcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uIChtYXAsIGtleSkgeyByZXR1cm4gaGFzT3duLmNhbGwobWFwLCBrZXkpOyB9XG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAobWFwLCBrZXkpIHsgcmV0dXJuIGtleSBpbiBtYXA7IH0sXG4gICAgICAgICAgICBnZXQ6IGRvd25MZXZlbFxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBoYXNPd24uY2FsbChtYXAsIGtleSkgPyBtYXBba2V5XSA6IHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgICAgIDogZnVuY3Rpb24gKG1hcCwga2V5KSB7IHJldHVybiBtYXBba2V5XTsgfSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gTG9hZCBnbG9iYWwgb3Igc2hpbSB2ZXJzaW9ucyBvZiBNYXAsIFNldCwgYW5kIFdlYWtNYXBcbiAgICAgICAgdmFyIGZ1bmN0aW9uUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKEZ1bmN0aW9uKTtcbiAgICAgICAgdmFyIHVzZVBvbHlmaWxsID0gdHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnZbXCJSRUZMRUNUX01FVEFEQVRBX1VTRV9NQVBfUE9MWUZJTExcIl0gPT09IFwidHJ1ZVwiO1xuICAgICAgICB2YXIgX01hcCA9ICF1c2VQb2x5ZmlsbCAmJiB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcyA9PT0gXCJmdW5jdGlvblwiID8gTWFwIDogQ3JlYXRlTWFwUG9seWZpbGwoKTtcbiAgICAgICAgdmFyIF9TZXQgPSAhdXNlUG9seWZpbGwgJiYgdHlwZW9mIFNldCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmVudHJpZXMgPT09IFwiZnVuY3Rpb25cIiA/IFNldCA6IENyZWF0ZVNldFBvbHlmaWxsKCk7XG4gICAgICAgIHZhciBfV2Vha01hcCA9ICF1c2VQb2x5ZmlsbCAmJiB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IENyZWF0ZVdlYWtNYXBQb2x5ZmlsbCgpO1xuICAgICAgICAvLyBbW01ldGFkYXRhXV0gaW50ZXJuYWwgc2xvdFxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHNcbiAgICAgICAgdmFyIE1ldGFkYXRhID0gbmV3IF9XZWFrTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcHBsaWVzIGEgc2V0IG9mIGRlY29yYXRvcnMgdG8gYSBwcm9wZXJ0eSBvZiBhIHRhcmdldCBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSBkZWNvcmF0b3JzIEFuIGFycmF5IG9mIGRlY29yYXRvcnMuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgdG8gZGVjb3JhdGUuXG4gICAgICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSB0YXJnZXQga2V5LlxuICAgICAgICAgKiBAcmVtYXJrcyBEZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluIHJldmVyc2Ugb3JkZXIuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIEV4YW1wbGUgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnNBcnJheSwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIsXG4gICAgICAgICAqICAgICAgICAgUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzQXJyYXksIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIsXG4gICAgICAgICAqICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIikpKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiLFxuICAgICAgICAgKiAgICAgICAgIFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9yc0FycmF5LCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIixcbiAgICAgICAgICogICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIikpKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFJc0FycmF5KGRlY29yYXRvcnMpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChhdHRyaWJ1dGVzKSAmJiAhSXNVbmRlZmluZWQoYXR0cmlidXRlcykgJiYgIUlzTnVsbChhdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmIChJc051bGwoYXR0cmlidXRlcykpXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gRGVjb3JhdGVQcm9wZXJ0eShkZWNvcmF0b3JzLCB0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghSXNBcnJheShkZWNvcmF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIGlmICghSXNDb25zdHJ1Y3Rvcih0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRlQ29uc3RydWN0b3IoZGVjb3JhdG9ycywgdGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImRlY29yYXRlXCIsIGRlY29yYXRlKTtcbiAgICAgICAgLy8gNC4xLjIgUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSlcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jcmVmbGVjdC5tZXRhZGF0YVxuICAgICAgICAvKipcbiAgICAgICAgICogQSBkZWZhdWx0IG1ldGFkYXRhIGRlY29yYXRvciBmYWN0b3J5IHRoYXQgY2FuIGJlIHVzZWQgb24gYSBjbGFzcywgY2xhc3MgbWVtYmVyLCBvciBwYXJhbWV0ZXIuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBUaGUga2V5IGZvciB0aGUgbWV0YWRhdGEgZW50cnkuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YVZhbHVlIFRoZSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGVudHJ5LlxuICAgICAgICAgKiBAcmV0dXJucyBBIGRlY29yYXRvciBmdW5jdGlvbi5cbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogSWYgYG1ldGFkYXRhS2V5YCBpcyBhbHJlYWR5IGRlZmluZWQgZm9yIHRoZSB0YXJnZXQgYW5kIHRhcmdldCBrZXksIHRoZVxuICAgICAgICAgKiBtZXRhZGF0YVZhbHVlIGZvciB0aGF0IGtleSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvciwgVHlwZVNjcmlwdCBvbmx5KVxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgQFJlZmxlY3QubWV0YWRhdGEoa2V5LCB2YWx1ZSlcbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlLCBUeXBlU2NyaXB0IG9ubHkpXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxuICAgICAgICAgKiAgICAgICAgIHByb3BlcnR5O1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIEBSZWZsZWN0Lm1ldGFkYXRhKGtleSwgdmFsdWUpXG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICBAUmVmbGVjdC5tZXRhZGF0YShrZXksIHZhbHVlKVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZCgpIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkgJiYgIUlzUHJvcGVydHlLZXkocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwibWV0YWRhdGFcIiwgbWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lIGEgdW5pcXVlIG1ldGFkYXRhIGVudHJ5IG9uIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIG1ldGFkYXRhVmFsdWUgQSB2YWx1ZSB0aGF0IGNvbnRhaW5zIGF0dGFjaGVkIG1ldGFkYXRhLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRvIGRlZmluZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBvcHRpb25zLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIG9wdGlvbnMsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGRlY29yYXRvciBmYWN0b3J5IGFzIG1ldGFkYXRhLXByb2R1Y2luZyBhbm5vdGF0aW9uLlxuICAgICAgICAgKiAgICAgZnVuY3Rpb24gTXlBbm5vdGF0aW9uKG9wdGlvbnMpOiBEZWNvcmF0b3Ige1xuICAgICAgICAgKiAgICAgICAgIHJldHVybiAodGFyZ2V0LCBrZXk/KSA9PiBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgb3B0aW9ucywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiZGVmaW5lTWV0YWRhdGFcIiwgZGVmaW5lTWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluIGhhcyB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBrZXkgd2FzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3Qgb3IgaXRzIHByb3RvdHlwZSBjaGFpbjsgb3RoZXJ3aXNlLCBgZmFsc2VgLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNQcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5oYXNNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc01ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZS5wcm90b3R5cGUsIFwibWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICAgICAgICAgIGlmICghSXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICBpZiAoIUlzVW5kZWZpbmVkKHByb3BlcnR5S2V5KSlcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUtleSA9IFRvUHJvcGVydHlLZXkocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydGVyKFwiaGFzTWV0YWRhdGFcIiwgaGFzTWV0YWRhdGEpO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFyZ2V0IG9iamVjdCBoYXMgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbWV0YWRhdGEga2V5IHdhcyBkZWZpbmVkIG9uIHRoZSB0YXJnZXQgb2JqZWN0OyBvdGhlcndpc2UsIGBmYWxzZWAuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0Lmhhc093bk1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJoYXNPd25NZXRhZGF0YVwiLCBoYXNPd25NZXRhZGF0YSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIG1ldGFkYXRhIGtleSBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGtleSBpZiBmb3VuZDsgb3RoZXJ3aXNlLCBgdW5kZWZpbmVkYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImdldE1ldGFkYXRhXCIsIGdldE1ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgbWV0YWRhdGEga2V5IG9uIHRoZSB0YXJnZXQgb2JqZWN0LlxuICAgICAgICAgKiBAcGFyYW0gbWV0YWRhdGFLZXkgQSBrZXkgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSB2YWx1ZSBmb3IgdGhlIG1ldGFkYXRhIGtleSBpZiBmb3VuZDsgb3RoZXJ3aXNlLCBgdW5kZWZpbmVkYC5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY01ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShcImN1c3RvbTphbm5vdGF0aW9uXCIsIEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImdldE93bk1ldGFkYXRhXCIsIGdldE93bk1ldGFkYXRhKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGtleXMgZGVmaW5lZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBvciBpdHMgcHJvdG90eXBlIGNoYWluLlxuICAgICAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBkZWZpbmVkLlxuICAgICAgICAgKiBAcGFyYW0gcHJvcGVydHlLZXkgKE9wdGlvbmFsKSBUaGUgcHJvcGVydHkga2V5IGZvciB0aGUgdGFyZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgbWV0YWRhdGEga2V5cy5cbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIGNsYXNzIEV4YW1wbGUge1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5IGRlY2xhcmF0aW9ucyBhcmUgbm90IHBhcnQgb2YgRVM2LCB0aG91Z2ggdGhleSBhcmUgdmFsaWQgaW4gVHlwZVNjcmlwdDpcbiAgICAgICAgICogICAgICAgICAvLyBzdGF0aWMgc3RhdGljUHJvcGVydHk7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgICAgY29uc3RydWN0b3IocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgc3RhdGljIHN0YXRpY01ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgICAgICBtZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICB9XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXMoRXhhbXBsZSk7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcInByb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljTWV0aG9kXCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gbWV0aG9kIChvbiBwcm90b3R5cGUpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyhFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICByZXR1cm4gT3JkaW5hcnlNZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwb3J0ZXIoXCJnZXRNZXRhZGF0YUtleXNcIiwgZ2V0TWV0YWRhdGFLZXlzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIHVuaXF1ZSBtZXRhZGF0YSBrZXlzIGRlZmluZWQgb24gdGhlIHRhcmdldCBvYmplY3QuXG4gICAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGFkYXRhIGlzIGRlZmluZWQuXG4gICAgICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSAoT3B0aW9uYWwpIFRoZSBwcm9wZXJ0eSBrZXkgZm9yIHRoZSB0YXJnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXF1ZSBtZXRhZGF0YSBrZXlzLlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgY2xhc3MgRXhhbXBsZSB7XG4gICAgICAgICAqICAgICAgICAgLy8gcHJvcGVydHkgZGVjbGFyYXRpb25zIGFyZSBub3QgcGFydCBvZiBFUzYsIHRob3VnaCB0aGV5IGFyZSB2YWxpZCBpbiBUeXBlU2NyaXB0OlxuICAgICAgICAgKiAgICAgICAgIC8vIHN0YXRpYyBzdGF0aWNQcm9wZXJ0eTtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvcihwKSB7IH1cbiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljTWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIG1ldGhvZChwKSB7IH1cbiAgICAgICAgICogICAgIH1cbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyhFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUsIFwic3RhdGljUHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBwcm9wZXJ0eSAob24gcHJvdG90eXBlKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZS5wcm90b3R5cGUsIFwicHJvcGVydHlcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIGNvbnN0cnVjdG9yKVxuICAgICAgICAgKiAgICAgcmVzdWx0ID0gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKEV4YW1wbGUucHJvdG90eXBlLCBcIm1ldGhvZFwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgaWYgKCFJc1VuZGVmaW5lZChwcm9wZXJ0eUtleSkpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlLZXkgPSBUb1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImdldE93bk1ldGFkYXRhS2V5c1wiLCBnZXRPd25NZXRhZGF0YUtleXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVsZXRlcyB0aGUgbWV0YWRhdGEgZW50cnkgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBwcm92aWRlZCBrZXkuXG4gICAgICAgICAqIEBwYXJhbSBtZXRhZGF0YUtleSBBIGtleSB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YS5cbiAgICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCBvbiB3aGljaCB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZC5cbiAgICAgICAgICogQHBhcmFtIHByb3BlcnR5S2V5IChPcHRpb25hbCkgVGhlIHByb3BlcnR5IGtleSBmb3IgdGhlIHRhcmdldC5cbiAgICAgICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBtZXRhZGF0YSBlbnRyeSB3YXMgZm91bmQgYW5kIGRlbGV0ZWQ7IG90aGVyd2lzZSwgZmFsc2UuXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICBjbGFzcyBFeGFtcGxlIHtcbiAgICAgICAgICogICAgICAgICAvLyBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVTNiwgdGhvdWdoIHRoZXkgYXJlIHZhbGlkIGluIFR5cGVTY3JpcHQ6XG4gICAgICAgICAqICAgICAgICAgLy8gc3RhdGljIHN0YXRpY1Byb3BlcnR5O1xuICAgICAgICAgKiAgICAgICAgIC8vIHByb3BlcnR5O1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgICAgIGNvbnN0cnVjdG9yKHApIHsgfVxuICAgICAgICAgKiAgICAgICAgIHN0YXRpYyBzdGF0aWNNZXRob2QocCkgeyB9XG4gICAgICAgICAqICAgICAgICAgbWV0aG9kKHApIHsgfVxuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIHByb3BlcnR5IChvbiBjb25zdHJ1Y3RvcilcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLCBcInN0YXRpY1Byb3BlcnR5XCIpO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgLy8gcHJvcGVydHkgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgIC8vIG1ldGhvZCAob24gY29uc3RydWN0b3IpXG4gICAgICAgICAqICAgICByZXN1bHQgPSBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhKFwiY3VzdG9tOmFubm90YXRpb25cIiwgRXhhbXBsZSwgXCJzdGF0aWNNZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAvLyBtZXRob2QgKG9uIHByb3RvdHlwZSlcbiAgICAgICAgICogICAgIHJlc3VsdCA9IFJlZmxlY3QuZGVsZXRlTWV0YWRhdGEoXCJjdXN0b206YW5ub3RhdGlvblwiLCBFeGFtcGxlLnByb3RvdHlwZSwgXCJtZXRob2RcIik7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgICAgICAgICAgaWYgKCFJc09iamVjdCh0YXJnZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQocHJvcGVydHlLZXkpKVxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5ID0gVG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgcHJvcGVydHlLZXksIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIW1ldGFkYXRhTWFwLmRlbGV0ZShtZXRhZGF0YUtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhTWFwLnNpemUgPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgdmFyIHRhcmdldE1ldGFkYXRhID0gTWV0YWRhdGEuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICB0YXJnZXRNZXRhZGF0YS5kZWxldGUocHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgaWYgKHRhcmdldE1ldGFkYXRhLnNpemUgPiAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgTWV0YWRhdGEuZGVsZXRlKHRhcmdldCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRlcihcImRlbGV0ZU1ldGFkYXRhXCIsIGRlbGV0ZU1ldGFkYXRhKTtcbiAgICAgICAgZnVuY3Rpb24gRGVjb3JhdGVDb25zdHJ1Y3RvcihkZWNvcmF0b3JzLCB0YXJnZXQpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlY29yYXRvciA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGRlY29yYXRlZCA9IGRlY29yYXRvcih0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZGVjb3JhdGVkKSAmJiAhSXNOdWxsKGRlY29yYXRlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc0NvbnN0cnVjdG9yKGRlY29yYXRlZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGRlY29yYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIERlY29yYXRlUHJvcGVydHkoZGVjb3JhdG9ycywgdGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdG9yID0gZGVjb3JhdG9yc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgZGVjb3JhdGVkID0gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIGlmICghSXNVbmRlZmluZWQoZGVjb3JhdGVkKSAmJiAhSXNOdWxsKGRlY29yYXRlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChkZWNvcmF0ZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZGVjb3JhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgQ3JlYXRlKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQoTyk7XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQodGFyZ2V0TWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFDcmVhdGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgX01hcCgpO1xuICAgICAgICAgICAgICAgIE1ldGFkYXRhLnNldChPLCB0YXJnZXRNZXRhZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSB0YXJnZXRNZXRhZGF0YS5nZXQoUCk7XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFDcmVhdGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFNYXAgPSBuZXcgX01hcCgpO1xuICAgICAgICAgICAgICAgIHRhcmdldE1ldGFkYXRhLnNldChQLCBtZXRhZGF0YU1hcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFNYXA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjEuMSBPcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWhhc21ldGFkYXRhXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgIHZhciBoYXNPd24gPSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgICAgICAgICAgIGlmIChoYXNPd24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKTtcbiAgICAgICAgICAgIGlmICghSXNOdWxsKHBhcmVudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjIuMSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWhhc293bm1ldGFkYXRhXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgIHZhciBtZXRhZGF0YU1hcCA9IEdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgLypDcmVhdGUqLyBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoSXNVbmRlZmluZWQobWV0YWRhdGFNYXApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBUb0Jvb2xlYW4obWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4xLjMuMSBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKVxuICAgICAgICAvLyBodHRwczovL3JidWNrdG9uLmdpdGh1Yi5pby9yZWZsZWN0LW1ldGFkYXRhLyNvcmRpbmFyeWdldG1ldGFkYXRhXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgICAgICAgICAgIHZhciBoYXNPd24gPSBPcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgICAgICAgICAgIGlmIChoYXNPd24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTyk7XG4gICAgICAgICAgICBpZiAoIUlzTnVsbChwYXJlbnQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuNC4xIE9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5Z2V0b3dubWV0YWRhdGFcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCkge1xuICAgICAgICAgICAgdmFyIG1ldGFkYXRhTWFwID0gR2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCAvKkNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChJc1VuZGVmaW5lZChtZXRhZGF0YU1hcCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMS41LjEgT3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUClcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnlkZWZpbmVvd25tZXRhZGF0YVxuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gdHJ1ZSk7XG4gICAgICAgICAgICBtZXRhZGF0YU1hcC5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuMS42LjEgT3JkaW5hcnlNZXRhZGF0YUtleXMoTywgUClcbiAgICAgICAgLy8gaHR0cHM6Ly9yYnVja3Rvbi5naXRodWIuaW8vcmVmbGVjdC1tZXRhZGF0YS8jb3JkaW5hcnltZXRhZGF0YWtleXNcbiAgICAgICAgZnVuY3Rpb24gT3JkaW5hcnlNZXRhZGF0YUtleXMoTywgUCkge1xuICAgICAgICAgICAgdmFyIG93bktleXMgPSBPcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBPcmRpbmFyeUdldFByb3RvdHlwZU9mKE8pO1xuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gb3duS2V5cztcbiAgICAgICAgICAgIHZhciBwYXJlbnRLZXlzID0gT3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRLZXlzLmxlbmd0aCA8PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBvd25LZXlzO1xuICAgICAgICAgICAgaWYgKG93bktleXMubGVuZ3RoIDw9IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudEtleXM7XG4gICAgICAgICAgICB2YXIgc2V0ID0gbmV3IF9TZXQoKTtcbiAgICAgICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG93bktleXNfMSA9IG93bktleXM7IF9pIDwgb3duS2V5c18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBvd25LZXlzXzFbX2ldO1xuICAgICAgICAgICAgICAgIHZhciBoYXNLZXkgPSBzZXQuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBfYSA9IDAsIHBhcmVudEtleXNfMSA9IHBhcmVudEtleXM7IF9hIDwgcGFyZW50S2V5c18xLmxlbmd0aDsgX2ErKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwYXJlbnRLZXlzXzFbX2FdO1xuICAgICAgICAgICAgICAgIHZhciBoYXNLZXkgPSBzZXQuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuICAgICAgICAvLyAzLjEuNy4xIE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApXG4gICAgICAgIC8vIGh0dHBzOi8vcmJ1Y2t0b24uZ2l0aHViLmlvL3JlZmxlY3QtbWV0YWRhdGEvI29yZGluYXJ5b3dubWV0YWRhdGFrZXlzXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgICAgICB2YXIgbWV0YWRhdGFNYXAgPSBHZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIC8qQ3JlYXRlKi8gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKElzVW5kZWZpbmVkKG1ldGFkYXRhTWFwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgICAgIHZhciBrZXlzT2JqID0gbWV0YWRhdGFNYXAua2V5cygpO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gR2V0SXRlcmF0b3Ioa2V5c09iaik7XG4gICAgICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5sZW5ndGggPSBrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG5leHRWYWx1ZSA9IEl0ZXJhdG9yVmFsdWUobmV4dCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAga2V5c1trXSA9IG5leHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gNiBFQ01BU2NyaXB0IERhdGEgVHlwMGVzIGFuZCBWYWx1ZXNcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1kYXRhLXR5cGVzLWFuZC12YWx1ZXNcbiAgICAgICAgZnVuY3Rpb24gVHlwZSh4KSB7XG4gICAgICAgICAgICBpZiAoeCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gMSAvKiBOdWxsICovO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgeCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjogcmV0dXJuIDAgLyogVW5kZWZpbmVkICovO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6IHJldHVybiAyIC8qIEJvb2xlYW4gKi87XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiByZXR1cm4gMyAvKiBTdHJpbmcgKi87XG4gICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOiByZXR1cm4gNCAvKiBTeW1ib2wgKi87XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOiByZXR1cm4gNSAvKiBOdW1iZXIgKi87XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiByZXR1cm4geCA9PT0gbnVsbCA/IDEgLyogTnVsbCAqLyA6IDYgLyogT2JqZWN0ICovO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiA2IC8qIE9iamVjdCAqLztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA2LjEuMSBUaGUgVW5kZWZpbmVkIFR5cGVcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcy11bmRlZmluZWQtdHlwZVxuICAgICAgICBmdW5jdGlvbiBJc1VuZGVmaW5lZCh4KSB7XG4gICAgICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIDYuMS4yIFRoZSBOdWxsIFR5cGVcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcy1udWxsLXR5cGVcbiAgICAgICAgZnVuY3Rpb24gSXNOdWxsKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIDYuMS41IFRoZSBTeW1ib2wgVHlwZVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzLXN5bWJvbC10eXBlXG4gICAgICAgIGZ1bmN0aW9uIElzU3ltYm9sKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyA2LjEuNyBUaGUgT2JqZWN0IFR5cGVcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LXR5cGVcbiAgICAgICAgZnVuY3Rpb24gSXNPYmplY3QoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiID8geCAhPT0gbnVsbCA6IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4xIFR5cGUgQ29udmVyc2lvblxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10eXBlLWNvbnZlcnNpb25cbiAgICAgICAgLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4gICAgICAgIGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0LCBQcmVmZXJyZWRUeXBlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKFR5cGUoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwIC8qIFVuZGVmaW5lZCAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIGNhc2UgMSAvKiBOdWxsICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgY2FzZSAyIC8qIEJvb2xlYW4gKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgICAgICBjYXNlIDMgLyogU3RyaW5nICovOiByZXR1cm4gaW5wdXQ7XG4gICAgICAgICAgICAgICAgY2FzZSA0IC8qIFN5bWJvbCAqLzogcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIGNhc2UgNSAvKiBOdW1iZXIgKi86IHJldHVybiBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBoaW50ID0gUHJlZmVycmVkVHlwZSA9PT0gMyAvKiBTdHJpbmcgKi8gPyBcInN0cmluZ1wiIDogUHJlZmVycmVkVHlwZSA9PT0gNSAvKiBOdW1iZXIgKi8gPyBcIm51bWJlclwiIDogXCJkZWZhdWx0XCI7XG4gICAgICAgICAgICB2YXIgZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCB0b1ByaW1pdGl2ZVN5bWJvbCk7XG4gICAgICAgICAgICBpZiAoZXhvdGljVG9QcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZXhvdGljVG9QcmltLmNhbGwoaW5wdXQsIGhpbnQpO1xuICAgICAgICAgICAgICAgIGlmIChJc09iamVjdChyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBPcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSBcImRlZmF1bHRcIiA/IFwibnVtYmVyXCIgOiBoaW50KTtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjEuMS4xIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxuICAgICAgICBmdW5jdGlvbiBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpIHtcbiAgICAgICAgICAgIGlmIChoaW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nXzEgPSBPLnRvU3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHRvU3RyaW5nXzEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0b1N0cmluZ18xLmNhbGwoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZU9mID0gTy52YWx1ZU9mO1xuICAgICAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHZhbHVlT2YpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZU9mLmNhbGwoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlT2YgPSBPLnZhbHVlT2Y7XG4gICAgICAgICAgICAgICAgaWYgKElzQ2FsbGFibGUodmFsdWVPZikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlT2YuY2FsbChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFJc09iamVjdChyZXN1bHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nXzIgPSBPLnRvU3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmIChJc0NhbGxhYmxlKHRvU3RyaW5nXzIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0b1N0cmluZ18yLmNhbGwoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSXNPYmplY3QocmVzdWx0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMS4yIFRvQm9vbGVhbihhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLzIwMTYvI3NlYy10b2Jvb2xlYW5cbiAgICAgICAgZnVuY3Rpb24gVG9Cb29sZWFuKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gISFhcmd1bWVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjEuMTIgVG9TdHJpbmcoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvc3RyaW5nXG4gICAgICAgIGZ1bmN0aW9uIFRvU3RyaW5nKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIGFyZ3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMS4xNCBUb1Byb3BlcnR5S2V5KGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG4gICAgICAgIGZ1bmN0aW9uIFRvUHJvcGVydHlLZXkoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBUb1ByaW1pdGl2ZShhcmd1bWVudCwgMyAvKiBTdHJpbmcgKi8pO1xuICAgICAgICAgICAgaWYgKElzU3ltYm9sKGtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIHJldHVybiBUb1N0cmluZyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDcuMiBUZXN0aW5nIGFuZCBDb21wYXJpc29uIE9wZXJhdGlvbnNcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGVzdGluZy1hbmQtY29tcGFyaXNvbi1vcGVyYXRpb25zXG4gICAgICAgIC8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbiAgICAgICAgZnVuY3Rpb24gSXNBcnJheShhcmd1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXlcbiAgICAgICAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoYXJndW1lbnQpXG4gICAgICAgICAgICAgICAgOiBhcmd1bWVudCBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50IGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSBcIltvYmplY3QgQXJyYXldXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4yLjMgSXNDYWxsYWJsZShhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxuICAgICAgICBmdW5jdGlvbiBJc0NhbGxhYmxlKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYXMgd2UgY2Fubm90IGNoZWNrIGZvciBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4yLjQgSXNDb25zdHJ1Y3Rvcihhcmd1bWVudClcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxuICAgICAgICBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYXMgd2UgY2Fubm90IGNoZWNrIGZvciBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjIuNyBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc3Byb3BlcnR5a2V5XG4gICAgICAgIGZ1bmN0aW9uIElzUHJvcGVydHlLZXkoYXJndW1lbnQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoVHlwZShhcmd1bWVudCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDMgLyogU3RyaW5nICovOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDQgLyogU3ltYm9sICovOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy4zIE9wZXJhdGlvbnMgb24gT2JqZWN0c1xuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcGVyYXRpb25zLW9uLW9iamVjdHNcbiAgICAgICAgLy8gNy4zLjkgR2V0TWV0aG9kKFYsIFApXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxuICAgICAgICBmdW5jdGlvbiBHZXRNZXRob2QoViwgUCkge1xuICAgICAgICAgICAgdmFyIGZ1bmMgPSBWW1BdO1xuICAgICAgICAgICAgaWYgKGZ1bmMgPT09IHVuZGVmaW5lZCB8fCBmdW5jID09PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIUlzQ2FsbGFibGUoZnVuYykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy40IE9wZXJhdGlvbnMgb24gSXRlcmF0b3IgT2JqZWN0c1xuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcGVyYXRpb25zLW9uLWl0ZXJhdG9yLW9iamVjdHNcbiAgICAgICAgZnVuY3Rpb24gR2V0SXRlcmF0b3Iob2JqKSB7XG4gICAgICAgICAgICB2YXIgbWV0aG9kID0gR2V0TWV0aG9kKG9iaiwgaXRlcmF0b3JTeW1ib2wpO1xuICAgICAgICAgICAgaWYgKCFJc0NhbGxhYmxlKG1ldGhvZCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBmcm9tIENhbGxcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG1ldGhvZC5jYWxsKG9iaik7XG4gICAgICAgICAgICBpZiAoIUlzT2JqZWN0KGl0ZXJhdG9yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNy40LjQgSXRlcmF0b3JWYWx1ZShpdGVyUmVzdWx0KVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvMjAxNi8jc2VjLWl0ZXJhdG9ydmFsdWVcbiAgICAgICAgZnVuY3Rpb24gSXRlcmF0b3JWYWx1ZShpdGVyUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlclJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjQuNSBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpXG4gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yc3RlcFxuICAgICAgICBmdW5jdGlvbiBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyBmYWxzZSA6IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pdGVyYXRvcmNsb3NlXG4gICAgICAgIGZ1bmN0aW9uIEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBmID0gaXRlcmF0b3JbXCJyZXR1cm5cIl07XG4gICAgICAgICAgICBpZiAoZilcbiAgICAgICAgICAgICAgICBmLmNhbGwoaXRlcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDkuMSBPcmRpbmFyeSBPYmplY3QgSW50ZXJuYWwgTWV0aG9kcyBhbmQgSW50ZXJuYWwgU2xvdHNcbiAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXG4gICAgICAgIC8vIDkuMS4xLjEgT3JkaW5hcnlHZXRQcm90b3R5cGVPZihPKVxuICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcmRpbmFyeWdldHByb3RvdHlwZW9mXG4gICAgICAgIGZ1bmN0aW9uIE9yZGluYXJ5R2V0UHJvdG90eXBlT2YoTykge1xuICAgICAgICAgICAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBPICE9PSBcImZ1bmN0aW9uXCIgfHwgTyA9PT0gZnVuY3Rpb25Qcm90b3R5cGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgICAgICAgICAgLy8gVHlwZVNjcmlwdCBkb2Vzbid0IHNldCBfX3Byb3RvX18gaW4gRVM1LCBhcyBpdCdzIG5vbi1zdGFuZGFyZC5cbiAgICAgICAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuIENvbXBhdGlibGUgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgICAvLyBtdXN0IGVpdGhlciBzZXQgX19wcm90b19fIG9uIGEgc3ViY2xhc3MgY29uc3RydWN0b3IgdG8gdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IsXG4gICAgICAgICAgICAvLyBvciBlbnN1cmUgZWFjaCBjbGFzcyBoYXMgYSB2YWxpZCBgY29uc3RydWN0b3JgIHByb3BlcnR5IG9uIGl0cyBwcm90b3R5cGUgdGhhdFxuICAgICAgICAgICAgLy8gcG9pbnRzIGJhY2sgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgRnVuY3Rpb24uW1tQcm90b3R5cGVdXSwgdGhlbiB0aGlzIGlzIGRlZmluYXRlbHkgaW5oZXJpdGVkLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGluIEVTNiBvciB3aGVuIHVzaW5nIF9fcHJvdG9fXyBpbiBhIGNvbXBhdGlibGUgYnJvd3Nlci5cbiAgICAgICAgICAgIGlmIChwcm90byAhPT0gZnVuY3Rpb25Qcm90b3R5cGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHN1cGVyIHByb3RvdHlwZSBpcyBPYmplY3QucHJvdG90eXBlLCBudWxsLCBvciB1bmRlZmluZWQsIHRoZW4gd2UgY2Fubm90IGRldGVybWluZSB0aGUgaGVyaXRhZ2UuXG4gICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gTy5wcm90b3R5cGU7XG4gICAgICAgICAgICB2YXIgcHJvdG90eXBlUHJvdG8gPSBwcm90b3R5cGUgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgICAgICAgICBpZiAocHJvdG90eXBlUHJvdG8gPT0gbnVsbCB8fCBwcm90b3R5cGVQcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgICAgICAvLyBJZiB0aGUgY29uc3RydWN0b3Igd2FzIG5vdCBhIGZ1bmN0aW9uLCB0aGVuIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGhlcml0YWdlLlxuICAgICAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvdG90eXBlUHJvdG8uY29uc3RydWN0b3I7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBzb21lIGtpbmQgb2Ygc2VsZi1yZWZlcmVuY2UsIHRoZW4gd2UgY2Fubm90IGRldGVybWluZSB0aGUgaGVyaXRhZ2UuXG4gICAgICAgICAgICBpZiAoY29uc3RydWN0b3IgPT09IE8pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvO1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHByZXR0eSBnb29kIGd1ZXNzIGF0IHRoZSBoZXJpdGFnZS5cbiAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBuYWl2ZSBNYXAgc2hpbVxuICAgICAgICBmdW5jdGlvbiBDcmVhdGVNYXBQb2x5ZmlsbCgpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZVNlbnRpbmVsID0ge307XG4gICAgICAgICAgICB2YXIgYXJyYXlTZW50aW5lbCA9IFtdO1xuICAgICAgICAgICAgdmFyIE1hcEl0ZXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1hcEl0ZXJhdG9yKGtleXMsIHZhbHVlcywgc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0ga2V5cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcbiAgICAgICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcbiAgICAgICAgICAgICAgICBNYXBJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5fa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9zZWxlY3Rvcih0aGlzLl9rZXlzW2luZGV4XSwgdGhpcy5fdmFsdWVzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuX2tleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlLnRocm93ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IGFycmF5U2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgTWFwSXRlcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSBhcnJheVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gYXJyYXlTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXBJdGVyYXRvcjtcbiAgICAgICAgICAgIH0oKSk7XG4gICAgICAgICAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBjYWNoZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gLTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2tleXMubGVuZ3RoOyB9LFxuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHRoaXMuX2ZpbmQoa2V5LCAvKmluc2VydCovIGZhbHNlKSA+PSAwOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kKGtleSwgLyppbnNlcnQqLyBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5fdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZChrZXksIC8qaW5zZXJ0Ki8gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9rZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleCArIDE7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzW2kgLSAxXSA9IHRoaXMuX2tleXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2kgLSAxXSA9IHRoaXMuX3ZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleXMubGVuZ3RoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMubGVuZ3RoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSB0aGlzLl9jYWNoZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gY2FjaGVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gLTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGNhY2hlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlSW5kZXggPSAtMjtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBNYXBJdGVyYXRvcih0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMsIGdldEtleSk7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgTWFwSXRlcmF0b3IodGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzLCBnZXRWYWx1ZSk7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IE1hcEl0ZXJhdG9yKHRoaXMuX2tleXMsIHRoaXMuX3ZhbHVlcywgZ2V0RW50cnkpOyB9O1xuICAgICAgICAgICAgICAgIE1hcC5wcm90b3R5cGVbXCJAQGl0ZXJhdG9yXCJdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbnRyaWVzKCk7IH07XG4gICAgICAgICAgICAgICAgTWFwLnByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVudHJpZXMoKTsgfTtcbiAgICAgICAgICAgICAgICBNYXAucHJvdG90eXBlLl9maW5kID0gZnVuY3Rpb24gKGtleSwgaW5zZXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUtleSAhPT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gdGhpcy5fa2V5cy5pbmRleE9mKHRoaXMuX2NhY2hlS2V5ID0ga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVJbmRleCA8IDAgJiYgaW5zZXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZUluZGV4ID0gdGhpcy5fa2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlSW5kZXg7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWFwO1xuICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEtleShrZXksIF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VmFsdWUoXywgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRFbnRyeShrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtrZXksIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBuYWl2ZSBTZXQgc2hpbVxuICAgICAgICBmdW5jdGlvbiBDcmVhdGVTZXRQb2x5ZmlsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gU2V0KCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAgPSBuZXcgX01hcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2V0LnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAuc2l6ZTsgfSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRoaXMuX21hcC5oYXModmFsdWUpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0aGlzLl9tYXAuc2V0KHZhbHVlLCB2YWx1ZSksIHRoaXM7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRoaXMuX21hcC5kZWxldGUodmFsdWUpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7IHRoaXMuX21hcC5jbGVhcigpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX21hcC5rZXlzKCk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9tYXAudmFsdWVzKCk7IH07XG4gICAgICAgICAgICAgICAgU2V0LnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbWFwLmVudHJpZXMoKTsgfTtcbiAgICAgICAgICAgICAgICBTZXQucHJvdG90eXBlW1wiQEBpdGVyYXRvclwiXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMua2V5cygpOyB9O1xuICAgICAgICAgICAgICAgIFNldC5wcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5rZXlzKCk7IH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNldDtcbiAgICAgICAgICAgIH0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmFpdmUgV2Vha01hcCBzaGltXG4gICAgICAgIGZ1bmN0aW9uIENyZWF0ZVdlYWtNYXBQb2x5ZmlsbCgpIHtcbiAgICAgICAgICAgIHZhciBVVUlEX1NJWkUgPSAxNjtcbiAgICAgICAgICAgIHZhciBrZXlzID0gSGFzaE1hcC5jcmVhdGUoKTtcbiAgICAgICAgICAgIHZhciByb290S2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XG4gICAgICAgICAgICByZXR1cm4gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleSA9IENyZWF0ZVVuaXF1ZUtleSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBXZWFrTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZSAhPT0gdW5kZWZpbmVkID8gSGFzaE1hcC5oYXModGFibGUsIHRoaXMuX2tleSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBIYXNoTWFwLmdldCh0YWJsZSwgdGhpcy5fa2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgLypjcmVhdGUqLyB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGFibGVbdGhpcy5fa2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gR2V0T3JDcmVhdGVXZWFrTWFwVGFibGUodGFyZ2V0LCAvKmNyZWF0ZSovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlICE9PSB1bmRlZmluZWQgPyBkZWxldGUgdGFibGVbdGhpcy5fa2V5XSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgV2Vha01hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IG5vdCBhIHJlYWwgY2xlYXIsIGp1c3QgbWFrZXMgdGhlIHByZXZpb3VzIGRhdGEgdW5yZWFjaGFibGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fa2V5ID0gQ3JlYXRlVW5pcXVlS2V5KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gV2Vha01hcDtcbiAgICAgICAgICAgIH0oKSk7XG4gICAgICAgICAgICBmdW5jdGlvbiBDcmVhdGVVbmlxdWVLZXkoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleTtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBcIkBAV2Vha01hcEBAXCIgKyBDcmVhdGVVVUlEKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKEhhc2hNYXAuaGFzKGtleXMsIGtleSkpO1xuICAgICAgICAgICAgICAgIGtleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIEdldE9yQ3JlYXRlV2Vha01hcFRhYmxlKHRhcmdldCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNPd24uY2FsbCh0YXJnZXQsIHJvb3RLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3JlYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcm9vdEtleSwgeyB2YWx1ZTogSGFzaE1hcC5jcmVhdGUoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtyb290S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGxSYW5kb21CeXRlcyhidWZmZXIsIHNpemUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDB4ZmYgfCAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBHZW5SYW5kb21CeXRlcyhzaXplKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShzaXplKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbXNDcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KHNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGxSYW5kb21CeXRlcyhuZXcgVWludDhBcnJheShzaXplKSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxsUmFuZG9tQnl0ZXMobmV3IEFycmF5KHNpemUpLCBzaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIENyZWF0ZVVVSUQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBHZW5SYW5kb21CeXRlcyhVVUlEX1NJWkUpO1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgcmFuZG9tIC0gUkZDIDQxMjIgwqcgNC40XG4gICAgICAgICAgICAgICAgZGF0YVs2XSA9IGRhdGFbNl0gJiAweDRmIHwgMHg0MDtcbiAgICAgICAgICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSAmIDB4YmYgfCAweDgwO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IFVVSURfU0laRTsgKytvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGUgPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDQgfHwgb2Zmc2V0ID09PSA2IHx8IG9mZnNldCA9PT0gOClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIi1cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPCAxNilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXNlcyBhIGhldXJpc3RpYyB1c2VkIGJ5IHY4IGFuZCBjaGFrcmEgdG8gZm9yY2UgYW4gb2JqZWN0IGludG8gZGljdGlvbmFyeSBtb2RlLlxuICAgICAgICBmdW5jdGlvbiBNYWtlRGljdGlvbmFyeShvYmopIHtcbiAgICAgICAgICAgIG9iai5fXyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmouX187XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgfSk7XG59KShSZWZsZWN0IHx8IChSZWZsZWN0ID0ge30pKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9yZWZsZWN0LW1ldGFkYXRhL1JlZmxlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIFNpZ25hdHVyZSBQYWQgdjIuMy4yXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3ppbWVrL3NpZ25hdHVyZV9wYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNyBTenltb24gTm93YWtcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICpcbiAqIFRoZSBtYWluIGlkZWEgYW5kIHNvbWUgcGFydHMgb2YgdGhlIGNvZGUgKGUuZy4gZHJhd2luZyB2YXJpYWJsZSB3aWR0aCBCw6l6aWVyIGN1cnZlKSBhcmUgdGFrZW4gZnJvbTpcbiAqIGh0dHA6Ly9jb3JuZXIuc3F1YXJldXAuY29tLzIwMTIvMDcvc21vb3RoZXItc2lnbmF0dXJlcy5odG1sXG4gKlxuICogSW1wbGVtZW50YXRpb24gb2YgaW50ZXJwb2xhdGlvbiB1c2luZyBjdWJpYyBCw6l6aWVyIGN1cnZlcyBpcyB0YWtlbiBmcm9tOlxuICogaHR0cDovL2Jlbmtub3dzY29kZS53b3JkcHJlc3MuY29tLzIwMTIvMDkvMTQvcGF0aC1pbnRlcnBvbGF0aW9uLXVzaW5nLWN1YmljLWJlemllci1hbmQtY29udHJvbC1wb2ludC1lc3RpbWF0aW9uLWluLWphdmFzY3JpcHRcbiAqXG4gKiBBbGdvcml0aG0gZm9yIGFwcHJveGltYXRlZCBsZW5ndGggb2YgYSBCw6l6aWVyIGN1cnZlIGlzIHRha2VuIGZyb206XG4gKiBodHRwOi8vd3d3LmxlbW9kYS5uZXQvbWF0aHMvYmV6aWVyLWxlbmd0aC9pbmRleC5odG1sXG4gKlxuICovXG5cbmZ1bmN0aW9uIFBvaW50KHgsIHksIHRpbWUpIHtcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbiAgdGhpcy50aW1lID0gdGltZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuUG9pbnQucHJvdG90eXBlLnZlbG9jaXR5RnJvbSA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gdGhpcy50aW1lICE9PSBzdGFydC50aW1lID8gdGhpcy5kaXN0YW5jZVRvKHN0YXJ0KSAvICh0aGlzLnRpbWUgLSBzdGFydC50aW1lKSA6IDE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGlzdGFuY2VUbyA9IGZ1bmN0aW9uIChzdGFydCkge1xuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMueCAtIHN0YXJ0LngsIDIpICsgTWF0aC5wb3codGhpcy55IC0gc3RhcnQueSwgMikpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICByZXR1cm4gdGhpcy54ID09PSBvdGhlci54ICYmIHRoaXMueSA9PT0gb3RoZXIueSAmJiB0aGlzLnRpbWUgPT09IG90aGVyLnRpbWU7XG59O1xuXG5mdW5jdGlvbiBCZXppZXIoc3RhcnRQb2ludCwgY29udHJvbDEsIGNvbnRyb2wyLCBlbmRQb2ludCkge1xuICB0aGlzLnN0YXJ0UG9pbnQgPSBzdGFydFBvaW50O1xuICB0aGlzLmNvbnRyb2wxID0gY29udHJvbDE7XG4gIHRoaXMuY29udHJvbDIgPSBjb250cm9sMjtcbiAgdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50O1xufVxuXG4vLyBSZXR1cm5zIGFwcHJveGltYXRlZCBsZW5ndGguXG5CZXppZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0ZXBzID0gMTA7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgcHggPSB2b2lkIDA7XG4gIHZhciBweSA9IHZvaWQgMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdGVwczsgaSArPSAxKSB7XG4gICAgdmFyIHQgPSBpIC8gc3RlcHM7XG4gICAgdmFyIGN4ID0gdGhpcy5fcG9pbnQodCwgdGhpcy5zdGFydFBvaW50LngsIHRoaXMuY29udHJvbDEueCwgdGhpcy5jb250cm9sMi54LCB0aGlzLmVuZFBvaW50LngpO1xuICAgIHZhciBjeSA9IHRoaXMuX3BvaW50KHQsIHRoaXMuc3RhcnRQb2ludC55LCB0aGlzLmNvbnRyb2wxLnksIHRoaXMuY29udHJvbDIueSwgdGhpcy5lbmRQb2ludC55KTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIHZhciB4ZGlmZiA9IGN4IC0gcHg7XG4gICAgICB2YXIgeWRpZmYgPSBjeSAtIHB5O1xuICAgICAgbGVuZ3RoICs9IE1hdGguc3FydCh4ZGlmZiAqIHhkaWZmICsgeWRpZmYgKiB5ZGlmZik7XG4gICAgfVxuICAgIHB4ID0gY3g7XG4gICAgcHkgPSBjeTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMsIHNwYWNlLWluLXBhcmVucyAqL1xuQmV6aWVyLnByb3RvdHlwZS5fcG9pbnQgPSBmdW5jdGlvbiAodCwgc3RhcnQsIGMxLCBjMiwgZW5kKSB7XG4gIHJldHVybiBzdGFydCAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSAqICgxLjAgLSB0KSArIDMuMCAqIGMxICogKDEuMCAtIHQpICogKDEuMCAtIHQpICogdCArIDMuMCAqIGMyICogKDEuMCAtIHQpICogdCAqIHQgKyBlbmQgKiB0ICogdCAqIHQ7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNzA3ODQwMS84MTU1MDdcbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIGxhdGVyID0gZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IERhdGUubm93KCk7XG4gICAgdGltZW91dCA9IG51bGw7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgIHZhciByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZVBhZChjYW52YXMsIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCA9IG9wdHMudmVsb2NpdHlGaWx0ZXJXZWlnaHQgfHwgMC43O1xuICB0aGlzLm1pbldpZHRoID0gb3B0cy5taW5XaWR0aCB8fCAwLjU7XG4gIHRoaXMubWF4V2lkdGggPSBvcHRzLm1heFdpZHRoIHx8IDIuNTtcbiAgdGhpcy50aHJvdHRsZSA9ICd0aHJvdHRsZScgaW4gb3B0cyA/IG9wdHMudGhyb3R0bGUgOiAxNjsgLy8gaW4gbWlsaXNlY29uZHNcbiAgdGhpcy5taW5EaXN0YW5jZSA9ICdtaW5EaXN0YW5jZScgaW4gb3B0cyA/IG9wdHMubWluRGlzdGFuY2UgOiA1O1xuXG4gIGlmICh0aGlzLnRocm90dGxlKSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IHRocm90dGxlKFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSwgdGhpcy50aHJvdHRsZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc3Ryb2tlTW92ZVVwZGF0ZSA9IFNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZTtcbiAgfVxuXG4gIHRoaXMuZG90U2l6ZSA9IG9wdHMuZG90U2l6ZSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB9O1xuICB0aGlzLnBlbkNvbG9yID0gb3B0cy5wZW5Db2xvciB8fCAnYmxhY2snO1xuICB0aGlzLmJhY2tncm91bmRDb2xvciA9IG9wdHMuYmFja2dyb3VuZENvbG9yIHx8ICdyZ2JhKDAsMCwwLDApJztcbiAgdGhpcy5vbkJlZ2luID0gb3B0cy5vbkJlZ2luO1xuICB0aGlzLm9uRW5kID0gb3B0cy5vbkVuZDtcblxuICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gIHRoaXMuX2N0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICB0aGlzLmNsZWFyKCk7XG5cbiAgLy8gV2UgbmVlZCBhZGQgdGhlc2UgaW5saW5lIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSB0byB1bmJpbmQgd2hpbGUgc3RpbGwgaGF2aW5nXG4gIC8vIGFjY2VzcyB0byAnc2VsZicgd2UgY291bGQgdXNlIF8uYmluZCBidXQgaXQncyBub3Qgd29ydGggYWRkaW5nIGEgZGVwZW5kZW5jeS5cbiAgdGhpcy5faGFuZGxlTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LndoaWNoID09PSAxKSB7XG4gICAgICBzZWxmLl9tb3VzZUJ1dHRvbkRvd24gPSB0cnVlO1xuICAgICAgc2VsZi5fc3Ryb2tlQmVnaW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoc2VsZi5fbW91c2VCdXR0b25Eb3duKSB7XG4gICAgICBzZWxmLl9zdHJva2VNb3ZlVXBkYXRlKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlTW91c2VVcCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC53aGljaCA9PT0gMSAmJiBzZWxmLl9tb3VzZUJ1dHRvbkRvd24pIHtcbiAgICAgIHNlbGYuX21vdXNlQnV0dG9uRG93biA9IGZhbHNlO1xuICAgICAgc2VsZi5fc3Ryb2tlRW5kKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICBzZWxmLl9zdHJva2VCZWdpbih0b3VjaCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB2YXIgdG91Y2ggPSBldmVudC50YXJnZXRUb3VjaGVzWzBdO1xuICAgIHNlbGYuX3N0cm9rZU1vdmVVcGRhdGUodG91Y2gpO1xuICB9O1xuXG4gIHRoaXMuX2hhbmRsZVRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHdhc0NhbnZhc1RvdWNoZWQgPSBldmVudC50YXJnZXQgPT09IHNlbGYuX2NhbnZhcztcbiAgICBpZiAod2FzQ2FudmFzVG91Y2hlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNlbGYuX3N0cm9rZUVuZChldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEVuYWJsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnQgaGFuZGxlcnNcbiAgdGhpcy5vbigpO1xufVxuXG4vLyBQdWJsaWMgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcblxuICBjdHguZmlsbFN0eWxlID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3I7XG4gIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgdGhpcy5fZGF0YSA9IFtdO1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLl9pc0VtcHR5ID0gdHJ1ZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGFVUkwgPSBmdW5jdGlvbiAoZGF0YVVybCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgdmFyIHJhdGlvID0gb3B0aW9ucy5yYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHRoaXMuX2NhbnZhcy53aWR0aCAvIHJhdGlvO1xuICB2YXIgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgdGhpcy5fY2FudmFzLmhlaWdodCAvIHJhdGlvO1xuXG4gIHRoaXMuX3Jlc2V0KCk7XG4gIGltYWdlLnNyYyA9IGRhdGFVcmw7XG4gIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfdGhpcy5fY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG4gIHRoaXMuX2lzRW1wdHkgPSBmYWxzZTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhVVJMID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdmFyIF9jYW52YXM7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW1hZ2Uvc3ZnK3htbCc6XG4gICAgICByZXR1cm4gdGhpcy5fdG9TVkcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG9wdGlvbnMgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIG9wdGlvbnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKF9jYW52YXMgPSB0aGlzLl9jYW52YXMpLnRvRGF0YVVSTC5hcHBseShfY2FudmFzLCBbdHlwZV0uY29uY2F0KG9wdGlvbnMpKTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5faGFuZGxlTW91c2VFdmVudHMoKTtcbiAgdGhpcy5faGFuZGxlVG91Y2hFdmVudHMoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcblxuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faXNFbXB0eTtcbn07XG5cbi8vIFByaXZhdGUgbWV0aG9kc1xuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlQmVnaW4gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdGhpcy5fZGF0YS5wdXNoKFtdKTtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5fc3Ryb2tlVXBkYXRlKGV2ZW50KTtcblxuICBpZiAodHlwZW9mIHRoaXMub25CZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25CZWdpbihldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX3N0cm9rZVVwZGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICB2YXIgeCA9IGV2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnQuY2xpZW50WTtcblxuICB2YXIgcG9pbnQgPSB0aGlzLl9jcmVhdGVQb2ludCh4LCB5KTtcbiAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICB2YXIgbGFzdFBvaW50ID0gbGFzdFBvaW50R3JvdXAgJiYgbGFzdFBvaW50R3JvdXBbbGFzdFBvaW50R3JvdXAubGVuZ3RoIC0gMV07XG4gIHZhciBpc0xhc3RQb2ludFRvb0Nsb3NlID0gbGFzdFBvaW50ICYmIHBvaW50LmRpc3RhbmNlVG8obGFzdFBvaW50KSA8IHRoaXMubWluRGlzdGFuY2U7XG5cbiAgLy8gU2tpcCB0aGlzIHBvaW50IGlmIGl0J3MgdG9vIGNsb3NlIHRvIHRoZSBwcmV2aW91cyBvbmVcbiAgaWYgKCEobGFzdFBvaW50ICYmIGlzTGFzdFBvaW50VG9vQ2xvc2UpKSB7XG4gICAgdmFyIF9hZGRQb2ludCA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQuY3VydmUsXG4gICAgICAgIHdpZHRocyA9IF9hZGRQb2ludC53aWR0aHM7XG5cbiAgICBpZiAoY3VydmUgJiYgd2lkdGhzKSB7XG4gICAgICB0aGlzLl9kcmF3Q3VydmUoY3VydmUsIHdpZHRocy5zdGFydCwgd2lkdGhzLmVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdLnB1c2goe1xuICAgICAgeDogcG9pbnQueCxcbiAgICAgIHk6IHBvaW50LnksXG4gICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgY29sb3I6IHRoaXMucGVuQ29sb3JcbiAgICB9KTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciBjYW5EcmF3Q3VydmUgPSB0aGlzLnBvaW50cy5sZW5ndGggPiAyO1xuICB2YXIgcG9pbnQgPSB0aGlzLnBvaW50c1swXTsgLy8gUG9pbnQgaW5zdGFuY2VcblxuICBpZiAoIWNhbkRyYXdDdXJ2ZSAmJiBwb2ludCkge1xuICAgIHRoaXMuX2RyYXdEb3QocG9pbnQpO1xuICB9XG5cbiAgaWYgKHBvaW50KSB7XG4gICAgdmFyIGxhc3RQb2ludEdyb3VwID0gdGhpcy5fZGF0YVt0aGlzLl9kYXRhLmxlbmd0aCAtIDFdO1xuICAgIHZhciBsYXN0UG9pbnQgPSBsYXN0UG9pbnRHcm91cFtsYXN0UG9pbnRHcm91cC5sZW5ndGggLSAxXTsgLy8gcGxhaW4gb2JqZWN0XG5cbiAgICAvLyBXaGVuIGRyYXdpbmcgYSBkb3QsIHRoZXJlJ3Mgb25seSBvbmUgcG9pbnQgaW4gYSBncm91cCwgc28gd2l0aG91dCB0aGlzIGNoZWNrXG4gICAgLy8gc3VjaCBncm91cCB3b3VsZCBlbmQgdXAgd2l0aCBleGFjdGx5IHRoZSBzYW1lIDIgcG9pbnRzLlxuICAgIGlmICghcG9pbnQuZXF1YWxzKGxhc3RQb2ludCkpIHtcbiAgICAgIGxhc3RQb2ludEdyb3VwLnB1c2goe1xuICAgICAgICB4OiBwb2ludC54LFxuICAgICAgICB5OiBwb2ludC55LFxuICAgICAgICB0aW1lOiBwb2ludC50aW1lLFxuICAgICAgICBjb2xvcjogdGhpcy5wZW5Db2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9uRW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5vbkVuZChldmVudCk7XG4gIH1cbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9tb3VzZUJ1dHRvbkRvd24gPSBmYWxzZTtcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5faGFuZGxlTW91c2VEb3duKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBQYXNzIHRvdWNoIGV2ZW50cyB0byBjYW52YXMgZWxlbWVudCBvbiBtb2JpbGUgSUUxMSBhbmQgRWRnZS5cbiAgdGhpcy5fY2FudmFzLnN0eWxlLm1zVG91Y2hBY3Rpb24gPSAnbm9uZSc7XG4gIHRoaXMuX2NhbnZhcy5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcblxuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQpO1xuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5faGFuZGxlVG91Y2hNb3ZlKTtcbiAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5faGFuZGxlVG91Y2hFbmQpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucG9pbnRzID0gW107XG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IDA7XG4gIHRoaXMuX2xhc3RXaWR0aCA9ICh0aGlzLm1pbldpZHRoICsgdGhpcy5tYXhXaWR0aCkgLyAyO1xuICB0aGlzLl9jdHguZmlsbFN0eWxlID0gdGhpcy5wZW5Db2xvcjtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2NyZWF0ZVBvaW50ID0gZnVuY3Rpb24gKHgsIHksIHRpbWUpIHtcbiAgdmFyIHJlY3QgPSB0aGlzLl9jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIG5ldyBQb2ludCh4IC0gcmVjdC5sZWZ0LCB5IC0gcmVjdC50b3AsIHRpbWUgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fYWRkUG9pbnQgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgdmFyIHBvaW50cyA9IHRoaXMucG9pbnRzO1xuICB2YXIgdG1wID0gdm9pZCAwO1xuXG4gIHBvaW50cy5wdXNoKHBvaW50KTtcblxuICBpZiAocG9pbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyBUbyByZWR1Y2UgdGhlIGluaXRpYWwgbGFnIG1ha2UgaXQgd29yayB3aXRoIDMgcG9pbnRzXG4gICAgLy8gYnkgY29weWluZyB0aGUgZmlyc3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZy5cbiAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMykgcG9pbnRzLnVuc2hpZnQocG9pbnRzWzBdKTtcblxuICAgIHRtcCA9IHRoaXMuX2NhbGN1bGF0ZUN1cnZlQ29udHJvbFBvaW50cyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdKTtcbiAgICB2YXIgYzIgPSB0bXAuYzI7XG4gICAgdG1wID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgIHZhciBjMyA9IHRtcC5jMTtcbiAgICB2YXIgY3VydmUgPSBuZXcgQmV6aWVyKHBvaW50c1sxXSwgYzIsIGMzLCBwb2ludHNbMl0pO1xuICAgIHZhciB3aWR0aHMgPSB0aGlzLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyhjdXJ2ZSk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCxcbiAgICAvLyBzbyB0aGF0IHdlIGFsd2F5cyBoYXZlIG5vIG1vcmUgdGhhbiA0IHBvaW50cyBpbiBwb2ludHMgYXJyYXkuXG4gICAgcG9pbnRzLnNoaWZ0KCk7XG5cbiAgICByZXR1cm4geyBjdXJ2ZTogY3VydmUsIHdpZHRoczogd2lkdGhzIH07XG4gIH1cblxuICByZXR1cm4ge307XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZUNvbnRyb2xQb2ludHMgPSBmdW5jdGlvbiAoczEsIHMyLCBzMykge1xuICB2YXIgZHgxID0gczEueCAtIHMyLng7XG4gIHZhciBkeTEgPSBzMS55IC0gczIueTtcbiAgdmFyIGR4MiA9IHMyLnggLSBzMy54O1xuICB2YXIgZHkyID0gczIueSAtIHMzLnk7XG5cbiAgdmFyIG0xID0geyB4OiAoczEueCArIHMyLngpIC8gMi4wLCB5OiAoczEueSArIHMyLnkpIC8gMi4wIH07XG4gIHZhciBtMiA9IHsgeDogKHMyLnggKyBzMy54KSAvIDIuMCwgeTogKHMyLnkgKyBzMy55KSAvIDIuMCB9O1xuXG4gIHZhciBsMSA9IE1hdGguc3FydChkeDEgKiBkeDEgKyBkeTEgKiBkeTEpO1xuICB2YXIgbDIgPSBNYXRoLnNxcnQoZHgyICogZHgyICsgZHkyICogZHkyKTtcblxuICB2YXIgZHhtID0gbTEueCAtIG0yLng7XG4gIHZhciBkeW0gPSBtMS55IC0gbTIueTtcblxuICB2YXIgayA9IGwyIC8gKGwxICsgbDIpO1xuICB2YXIgY20gPSB7IHg6IG0yLnggKyBkeG0gKiBrLCB5OiBtMi55ICsgZHltICogayB9O1xuXG4gIHZhciB0eCA9IHMyLnggLSBjbS54O1xuICB2YXIgdHkgPSBzMi55IC0gY20ueTtcblxuICByZXR1cm4ge1xuICAgIGMxOiBuZXcgUG9pbnQobTEueCArIHR4LCBtMS55ICsgdHkpLFxuICAgIGMyOiBuZXcgUG9pbnQobTIueCArIHR4LCBtMi55ICsgdHkpXG4gIH07XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9jYWxjdWxhdGVDdXJ2ZVdpZHRocyA9IGZ1bmN0aW9uIChjdXJ2ZSkge1xuICB2YXIgc3RhcnRQb2ludCA9IGN1cnZlLnN0YXJ0UG9pbnQ7XG4gIHZhciBlbmRQb2ludCA9IGN1cnZlLmVuZFBvaW50O1xuICB2YXIgd2lkdGhzID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgdmFyIHZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCAqIGVuZFBvaW50LnZlbG9jaXR5RnJvbShzdGFydFBvaW50KSArICgxIC0gdGhpcy52ZWxvY2l0eUZpbHRlcldlaWdodCkgKiB0aGlzLl9sYXN0VmVsb2NpdHk7XG5cbiAgdmFyIG5ld1dpZHRoID0gdGhpcy5fc3Ryb2tlV2lkdGgodmVsb2NpdHkpO1xuXG4gIHdpZHRocy5zdGFydCA9IHRoaXMuX2xhc3RXaWR0aDtcbiAgd2lkdGhzLmVuZCA9IG5ld1dpZHRoO1xuXG4gIHRoaXMuX2xhc3RWZWxvY2l0eSA9IHZlbG9jaXR5O1xuICB0aGlzLl9sYXN0V2lkdGggPSBuZXdXaWR0aDtcblxuICByZXR1cm4gd2lkdGhzO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlV2lkdGggPSBmdW5jdGlvbiAodmVsb2NpdHkpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGggLyAodmVsb2NpdHkgKyAxKSwgdGhpcy5taW5XaWR0aCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3UG9pbnQgPSBmdW5jdGlvbiAoeCwgeSwgc2l6ZSkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXG4gIGN0eC5tb3ZlVG8oeCwgeSk7XG4gIGN0eC5hcmMoeCwgeSwgc2l6ZSwgMCwgMiAqIE1hdGguUEksIGZhbHNlKTtcbiAgdGhpcy5faXNFbXB0eSA9IGZhbHNlO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZHJhd0N1cnZlID0gZnVuY3Rpb24gKGN1cnZlLCBzdGFydFdpZHRoLCBlbmRXaWR0aCkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuICB2YXIgd2lkdGhEZWx0YSA9IGVuZFdpZHRoIC0gc3RhcnRXaWR0aDtcbiAgdmFyIGRyYXdTdGVwcyA9IE1hdGguZmxvb3IoY3VydmUubGVuZ3RoKCkpO1xuXG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRyYXdTdGVwczsgaSArPSAxKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBCZXppZXIgKHgsIHkpIGNvb3JkaW5hdGUgZm9yIHRoaXMgc3RlcC5cbiAgICB2YXIgdCA9IGkgLyBkcmF3U3RlcHM7XG4gICAgdmFyIHR0ID0gdCAqIHQ7XG4gICAgdmFyIHR0dCA9IHR0ICogdDtcbiAgICB2YXIgdSA9IDEgLSB0O1xuICAgIHZhciB1dSA9IHUgKiB1O1xuICAgIHZhciB1dXUgPSB1dSAqIHU7XG5cbiAgICB2YXIgeCA9IHV1dSAqIGN1cnZlLnN0YXJ0UG9pbnQueDtcbiAgICB4ICs9IDMgKiB1dSAqIHQgKiBjdXJ2ZS5jb250cm9sMS54O1xuICAgIHggKz0gMyAqIHUgKiB0dCAqIGN1cnZlLmNvbnRyb2wyLng7XG4gICAgeCArPSB0dHQgKiBjdXJ2ZS5lbmRQb2ludC54O1xuXG4gICAgdmFyIHkgPSB1dXUgKiBjdXJ2ZS5zdGFydFBvaW50Lnk7XG4gICAgeSArPSAzICogdXUgKiB0ICogY3VydmUuY29udHJvbDEueTtcbiAgICB5ICs9IDMgKiB1ICogdHQgKiBjdXJ2ZS5jb250cm9sMi55O1xuICAgIHkgKz0gdHR0ICogY3VydmUuZW5kUG9pbnQueTtcblxuICAgIHZhciB3aWR0aCA9IHN0YXJ0V2lkdGggKyB0dHQgKiB3aWR0aERlbHRhO1xuICAgIHRoaXMuX2RyYXdQb2ludCh4LCB5LCB3aWR0aCk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3RG90ID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG4gIHZhciB3aWR0aCA9IHR5cGVvZiB0aGlzLmRvdFNpemUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmRvdFNpemUoKSA6IHRoaXMuZG90U2l6ZTtcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIHRoaXMuX2RyYXdQb2ludChwb2ludC54LCBwb2ludC55LCB3aWR0aCk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgY3R4LmZpbGwoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2Zyb21EYXRhID0gZnVuY3Rpb24gKHBvaW50R3JvdXBzLCBkcmF3Q3VydmUsIGRyYXdEb3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludEdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBncm91cCA9IHBvaW50R3JvdXBzW2ldO1xuXG4gICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIHJhd1BvaW50ID0gZ3JvdXBbal07XG4gICAgICAgIHZhciBwb2ludCA9IG5ldyBQb2ludChyYXdQb2ludC54LCByYXdQb2ludC55LCByYXdQb2ludC50aW1lKTtcbiAgICAgICAgdmFyIGNvbG9yID0gcmF3UG9pbnQuY29sb3I7XG5cbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBGaXJzdCBwb2ludCBpbiBhIGdyb3VwLiBOb3RoaW5nIHRvIGRyYXcgeWV0LlxuXG4gICAgICAgICAgLy8gQWxsIHBvaW50cyBpbiB0aGUgZ3JvdXAgaGF2ZSB0aGUgc2FtZSBjb2xvciwgc28gaXQncyBlbm91Z2ggdG8gc2V0XG4gICAgICAgICAgLy8gcGVuQ29sb3IganVzdCBhdCB0aGUgYmVnaW5uaW5nLlxuICAgICAgICAgIHRoaXMucGVuQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgICAgdGhpcy5fYWRkUG9pbnQocG9pbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGogIT09IGdyb3VwLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBNaWRkbGUgcG9pbnQgaW4gYSBncm91cC5cbiAgICAgICAgICB2YXIgX2FkZFBvaW50MiA9IHRoaXMuX2FkZFBvaW50KHBvaW50KSxcbiAgICAgICAgICAgICAgY3VydmUgPSBfYWRkUG9pbnQyLmN1cnZlLFxuICAgICAgICAgICAgICB3aWR0aHMgPSBfYWRkUG9pbnQyLndpZHRocztcblxuICAgICAgICAgIGlmIChjdXJ2ZSAmJiB3aWR0aHMpIHtcbiAgICAgICAgICAgIGRyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLCBjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIExhc3QgcG9pbnQgaW4gYSBncm91cC4gRG8gbm90aGluZy5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgdmFyIF9yYXdQb2ludCA9IGdyb3VwWzBdO1xuICAgICAgZHJhd0RvdChfcmF3UG9pbnQpO1xuICAgIH1cbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fdG9TVkcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHZhciBwb2ludEdyb3VwcyA9IHRoaXMuX2RhdGE7XG4gIHZhciBjYW52YXMgPSB0aGlzLl9jYW52YXM7XG4gIHZhciByYXRpbyA9IE1hdGgubWF4KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEsIDEpO1xuICB2YXIgbWluWCA9IDA7XG4gIHZhciBtaW5ZID0gMDtcbiAgdmFyIG1heFggPSBjYW52YXMud2lkdGggLyByYXRpbztcbiAgdmFyIG1heFkgPSBjYW52YXMuaGVpZ2h0IC8gcmF0aW87XG4gIHZhciBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuXG4gIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCBjYW52YXMud2lkdGgpO1xuICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsIGNhbnZhcy5oZWlnaHQpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocywgY29sb3IpIHtcbiAgICB2YXIgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3BhdGgnKTtcblxuICAgIC8vIE5lZWQgdG8gY2hlY2sgY3VydmUgZm9yIE5hTiB2YWx1ZXMsIHRoZXNlIHBvcCB1cCB3aGVuIGRyYXdpbmdcbiAgICAvLyBsaW5lcyBvbiB0aGUgY2FudmFzIHRoYXQgYXJlIG5vdCBjb250aW51b3VzLiBFLmcuIFNoYXJwIGNvcm5lcnNcbiAgICAvLyBvciBzdG9wcGluZyBtaWQtc3Ryb2tlIGFuZCB0aGFuIGNvbnRpbnVpbmcgd2l0aG91dCBsaWZ0aW5nIG1vdXNlLlxuICAgIGlmICghaXNOYU4oY3VydmUuY29udHJvbDEueCkgJiYgIWlzTmFOKGN1cnZlLmNvbnRyb2wxLnkpICYmICFpc05hTihjdXJ2ZS5jb250cm9sMi54KSAmJiAhaXNOYU4oY3VydmUuY29udHJvbDIueSkpIHtcbiAgICAgIHZhciBhdHRyID0gJ00gJyArIGN1cnZlLnN0YXJ0UG9pbnQueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuc3RhcnRQb2ludC55LnRvRml4ZWQoMykgKyAnICcgKyAoJ0MgJyArIGN1cnZlLmNvbnRyb2wxLngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLmNvbnRyb2wxLnkudG9GaXhlZCgzKSArICcgJykgKyAoY3VydmUuY29udHJvbDIueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuY29udHJvbDIueS50b0ZpeGVkKDMpICsgJyAnKSArIChjdXJ2ZS5lbmRQb2ludC54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5lbmRQb2ludC55LnRvRml4ZWQoMykpO1xuXG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGF0dHIpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsICh3aWR0aHMuZW5kICogMi4yNSkudG9GaXhlZCgzKSk7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgY29sb3IpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3JvdW5kJyk7XG5cbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICB9XG4gIH0sIGZ1bmN0aW9uIChyYXdQb2ludCkge1xuICAgIHZhciBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjaXJjbGUnKTtcbiAgICB2YXIgZG90U2l6ZSA9IHR5cGVvZiBfdGhpczIuZG90U2l6ZSA9PT0gJ2Z1bmN0aW9uJyA/IF90aGlzMi5kb3RTaXplKCkgOiBfdGhpczIuZG90U2l6ZTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdyJywgZG90U2l6ZSk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnY3gnLCByYXdQb2ludC54KTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeScsIHJhd1BvaW50LnkpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCByYXdQb2ludC5jb2xvcik7XG5cbiAgICBzdmcuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgfSk7XG5cbiAgdmFyIHByZWZpeCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCc7XG4gIHZhciBoZWFkZXIgPSAnPHN2ZycgKyAnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIicgKyAnIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiJyArICgnIHZpZXdCb3g9XCInICsgbWluWCArICcgJyArIG1pblkgKyAnICcgKyBtYXhYICsgJyAnICsgbWF4WSArICdcIicpICsgKCcgd2lkdGg9XCInICsgbWF4WCArICdcIicpICsgKCcgaGVpZ2h0PVwiJyArIG1heFkgKyAnXCInKSArICc+JztcbiAgdmFyIGJvZHkgPSBzdmcuaW5uZXJIVE1MO1xuXG4gIC8vIElFIGhhY2sgZm9yIG1pc3NpbmcgaW5uZXJIVE1MIHByb3BlcnR5IG9uIFNWR0VsZW1lbnRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBkdW1teSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2R1bW15Jyk7XG4gICAgdmFyIG5vZGVzID0gc3ZnLmNoaWxkTm9kZXM7XG4gICAgZHVtbXkuaW5uZXJIVE1MID0gJyc7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBkdW1teS5hcHBlbmRDaGlsZChub2Rlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH1cblxuICAgIGJvZHkgPSBkdW1teS5pbm5lckhUTUw7XG4gIH1cblxuICB2YXIgZm9vdGVyID0gJzwvc3ZnPic7XG4gIHZhciBkYXRhID0gaGVhZGVyICsgYm9keSArIGZvb3RlcjtcblxuICByZXR1cm4gcHJlZml4ICsgYnRvYShkYXRhKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuZnJvbURhdGEgPSBmdW5jdGlvbiAocG9pbnRHcm91cHMpIHtcbiAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgdGhpcy5jbGVhcigpO1xuXG4gIHRoaXMuX2Zyb21EYXRhKHBvaW50R3JvdXBzLCBmdW5jdGlvbiAoY3VydmUsIHdpZHRocykge1xuICAgIHJldHVybiBfdGhpczMuX2RyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLnN0YXJ0LCB3aWR0aHMuZW5kKTtcbiAgfSwgZnVuY3Rpb24gKHJhd1BvaW50KSB7XG4gICAgcmV0dXJuIF90aGlzMy5fZHJhd0RvdChyYXdQb2ludCk7XG4gIH0pO1xuXG4gIHRoaXMuX2RhdGEgPSBwb2ludEdyb3Vwcztcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUudG9EYXRhID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fZGF0YTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNpZ25hdHVyZVBhZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zaWduYXR1cmVfcGFkL2Rpc3Qvc2lnbmF0dXJlX3BhZC5tanNcbi8vIG1vZHVsZSBpZCA9IDEzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlLCBJU3VydmV5RGF0YSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuXG4vKipcbiAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIGlzIGEgd2F5IHRvIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gU3VydmV5IENyZWF0b3IuXG4gKiBJdCBoYXMgdHdvIG1haW4gcHJvcGVydGllczogbmFtZSBhbmQgZXhwcmVzc2lvbi4gQmFzZWQgb24gZXhwcmVzc2lvbiB0aGUgdmFsdWUgcmVhZC1vbmx5IHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC5cbiAqIFRoZSBuYW1lIHByb3BlcnR5IHNob3VsZCBiZSB1bmlxdWUgdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqIEl0IHVzZXMgc3VydmV5LmdldFZhcmlhYmxlL3NlcnV2ZXkuc2V0VmFyaWFibGUgZnVuY3Rpb25zIHRvIGdldC9zZXQgaXRzIHZhbHVlLiBUaGUgY2xhc3MgZG8gbm90IHN0b3JlIGl0cyB2YWx1ZSBpbnRlcm5hbGx5LlxuICogWW91IG1heSBzZXQgaW5jbHVkZUludG9SZXN1bHQgcHJvcGVydHkgdG8gdHJ1ZSB0byBzdG9yZSB0aGlzIGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlZFZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgZGF0YTogSVN1cnZleURhdGE7XG4gIHByaXZhdGUgZXhwcmVzc2lvbklzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IG51bGwsIGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGlmICghIWV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRPd25lcihkYXRhOiBJU3VydmV5RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2FsY3VsYXRlZCB2YWx1ZSBuYW1lLiBJdCBzaG91bGQgYmUgbm9uIGVtcHR5IGFuZCB1bmlxdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaW5jbHVkZSB0aGUgbm9uLWVtcHR5IGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LCBzdXJ2ZXkuZGF0YSBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZUludG9SZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImluY2x1ZGVJbnRvUmVzdWx0XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGluY2x1ZGVJbnRvUmVzdWx0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImluY2x1ZGVJbnRvUmVzdWx0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBFeHByZXNzaW9uIHRoYXQgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSBzdGFuZGFyZCBvcGVyYXRvcnMgbGlrZSArLCAtLCAqIGFuZCAvLCBzcXVhcmVzICgpLiBIZXJlIGlzIHRoZSBleGFtcGxlIG9mIGFjY2Vzc2luZyB0aGUgcXVlc3Rpb24gdmFsdWUge3F1ZXN0aW9ubmFtZX0uXG4gICAqIDxici8+RXhhbXBsZTogXCIoe3F1YW50aXR5fSAqIHtwcmljZX0pICogKDEwMCAtIHtkaXNjb3VudH0pIC8gMTAwXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgICB0aGlzLnJlcnVuRXhwcmVzc2lvbigpO1xuICB9XG4gIHB1YmxpYyBsb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB1bmxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaXNDYWxjdWxhdGVkID0gZmFsc2U7XG4gIHB1YmxpYyByZXNldENhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuaXNDYWxjdWxhdGVkID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGRvQ2FsY3VsYXRpb24oXG4gICAgY2FsY3VsYXRlZFZhbHVlczogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICh0aGlzLmlzQ2FsY3VsYXRlZCkgcmV0dXJuO1xuICAgIHRoaXMucnVuRXhwcmVzc2lvbkNvcmUoY2FsY3VsYXRlZFZhbHVlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLmlzQ2FsY3VsYXRlZCA9IHRydWU7XG4gIH1cbiAgcHVibGljIHJ1bkV4cHJlc3Npb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB0aGlzLnJ1bkV4cHJlc3Npb25Db3JlKG51bGwsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0VmFyaWFibGUodGhpcy5uYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YS5zZXRWYXJpYWJsZSh0aGlzLm5hbWUsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY2FuUnVuRXhwcmVzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLmRhdGEgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmXG4gICAgICAhIXRoaXMuZXhwcmVzc2lvbiAmJlxuICAgICAgIXRoaXMuZXhwcmVzc2lvbklzUnVubmluZyAmJlxuICAgICAgISF0aGlzLm5hbWVcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVydW5FeHByZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5jYW5SdW5FeHByZXNzaW9uKSByZXR1cm47XG4gICAgdGhpcy5ydW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCksXG4gICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcnVuRXhwcmVzc2lvbkNvcmUoXG4gICAgY2FsY3VsYXRlZFZhbHVlczogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5jYW5SdW5FeHByZXNzaW9uKSByZXR1cm47XG4gICAgdGhpcy5lbnN1cmVFeHByZXNzaW9uKHZhbHVlcyk7XG4gICAgdGhpcy5sb2NDYWxjdWxhdGlvbigpO1xuICAgIGlmICghIWNhbGN1bGF0ZWRWYWx1ZXMpIHtcbiAgICAgIHRoaXMucnVuRGVwZW5kZW50RXhwcmVzc2lvbnMoY2FsY3VsYXRlZFZhbHVlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgdGhpcy5leHByZXNzaW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRGVwZW5kZW50RXhwcmVzc2lvbnMoXG4gICAgY2FsY3VsYXRlZFZhbHVlczogQXJyYXk8Q2FsY3VsYXRlZFZhbHVlPixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIHZhciB2YXJpYWJsZXMgPSB0aGlzLmV4cHJlc3Npb25SdW5uZXIuZ2V0VmFyaWFibGVzKCk7XG4gICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxjSXRlbSA9IGNhbGN1bGF0ZWRWYWx1ZXNbaV07XG4gICAgICBpZiAoY2FsY0l0ZW0gPT09IHRoaXMgfHwgdmFyaWFibGVzLmluZGV4T2YoY2FsY0l0ZW0ubmFtZSkgPCAwKSBjb250aW51ZTtcbiAgICAgIGNhbGNJdGVtLmRvQ2FsY3VsYXRpb24oY2FsY3VsYXRlZFZhbHVlcywgdmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIHZhbHVlc1tjYWxjSXRlbS5uYW1lXSA9IGNhbGNJdGVtLnZhbHVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGVuc3VyZUV4cHJlc3Npb24odmFsdWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghIXRoaXMuZXhwcmVzc2lvblJ1bm5lcikgcmV0dXJuO1xuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgdGhpcy5leHByZXNzaW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVubG9jQ2FsY3VsYXRpb24oKTtcbiAgICB9O1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gIFtcIiFuYW1lXCIsIFwiZXhwcmVzc2lvbjpleHByZXNzaW9uXCIsIFwiaW5jbHVkZUludG9SZXN1bHQ6Ym9vbGVhblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxjdWxhdGVkVmFsdWUoKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2FsY3VsYXRlZFZhbHVlLnRzIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkl0ZW0gZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyO1xuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvbml0ZW1cIjtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBleHByZXNzaW9uIHByb3BlcnR5LiBJZiB0aGlzIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGVuIHN1cnZleSB3aWxsIHVzZSBodG1sIHByb3BlcnR5IHRvIHNob3cgb24gY29tcGxldGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY093bmVyID8gdGhpcy5sb2NPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBjb250YWlucyBleHByZXNzaW9uIGFuZCBodG1sIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gaHRtbCBvZiB0aGlzIGl0ZW0gdXNlcyBpbnN0ZWFkIG9mIHN1cnZleS5jb21wbGV0ZWRIdG1sIHByb3BlcnR5XG4gKiBAc2VlIFN1cnZleU1vZGVsLmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBIdG1sQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgaHRtbDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuaHRtbCA9IGh0bWw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaHRtbCB0aGF0IHNob3dzIG9uIGNvbXBsZXRlZCAoJ1RoYW5rIHlvdScpIHBhZ2UuIFRoZSBleHByZXNzaW9uIHNob3VsZCByZXR1cm4gdHJ1ZVxuICAgKiBAc2VlIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgdXJsIHByb3BldGllcy4gSXQgdXNlcyBpbiBzdXJ2ZXkubmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uIGFycmF5LlxuICogSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gdXJsIG9mIHRoaXMgaXRlbSB1c2VzIGluc3RlYWQgb2Ygc3VydmV5Lm5hdmlnYXRlVG9VcmwgcHJvcGVydHlcbiAqIEBzZWUgU3VydmV5TW9kZWwubmF2aWdhdGVUb1VybFxuICovXG5leHBvcnQgY2xhc3MgVXJsQ29uZGl0aW9uSXRlbSBleHRlbmRzIEV4cHJlc3Npb25JdGVtIHtcbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbCwgdXJsOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInVybFwiLCB0aGlzKTtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInVybGNvbmRpdGlvbml0ZW1cIjtcbiAgfVxuICAvKipcbiAgICogVGhlIHVybCB0aGF0IHN1cnZleSBuYXZpZ2F0ZXMgdG8gb24gY29tcGxldGluZyB0aGUgc3VydmV5LiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgcmV0dXJuIHRydWVcbiAgICogQHNlZSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInVybFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NVcmwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidXJsXCIpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbml0ZW1cIixcbiAgW1wiZXhwcmVzc2lvbjpjb25kaXRpb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkl0ZW0oKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiaHRtbGNvbmRpdGlvbml0ZW1cIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sQ29uZGl0aW9uSXRlbSgpO1xuICB9LFxuICBcImV4cHJlc3Npb25pdGVtXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwidXJsY29uZGl0aW9uaXRlbVwiLFxuICBbeyBuYW1lOiBcInVybDpzdHJpbmdcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1VybFwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFVybENvbmRpdGlvbkl0ZW0oKTtcbiAgfSxcbiAgXCJleHByZXNzaW9uaXRlbVwiXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2V4cHJlc3Npb25JdGVtcy50cyIsIi8vIHRzbGludDpkaXNhYmxlOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4vLyB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1zaG9ydGhhbmRcbi8vIHRzbGludDpkaXNhYmxlOnRyYWlsaW5nLWNvbW1hXG4vLyB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbi8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc2VjdXRpdmUtYmxhbmstbGluZXNcbi8vIHRzbGludDpkaXNhYmxlOmFsaWduXG5cblxuLy8gR2VuZXJhdGVkIGJ5IFBFRy5qcyB2LiAwLjEwLjAgKHRzLXBlZ2pzIHBsdWdpbiB2LiAwLjIuNiApXG4vL1xuLy8gaHR0cHM6Ly9wZWdqcy5vcmcvICAgaHR0cHM6Ly9naXRodWIuY29tL21ldGFkZXZwcm8vdHMtcGVnanNcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7XG5Db25zdCxcbkJpbmFyeU9wZXJhbmQsXG5WYXJpYWJsZSxcbk9wZXJhbmQsXG5VbmFyeU9wZXJhbmQsXG5GdW5jdGlvbk9wZXJhbmQsXG5BcnJheU9wZXJhbmRcbn0gZnJvbSBcIi4vZXhwcmVzc2lvbnNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVQb3NpdGlvbiB7XG4gIG9mZnNldDogbnVtYmVyO1xuICBsaW5lOiBudW1iZXI7XG4gIGNvbHVtbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlUmFuZ2Uge1xuICBzdGFydDogSUZpbGVQb3NpdGlvbjtcbiAgZW5kOiBJRmlsZVBvc2l0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaXRlcmFsRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImxpdGVyYWxcIjtcbiAgdGV4dDogc3RyaW5nO1xuICBpZ25vcmVDYXNlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDbGFzc1BhcnRzIGV4dGVuZHMgQXJyYXk8c3RyaW5nIHwgSUNsYXNzUGFydHM+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsYXNzRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImNsYXNzXCI7XG4gIHBhcnRzOiBJQ2xhc3NQYXJ0cztcbiAgaW52ZXJ0ZWQ6IGJvb2xlYW47XG4gIGlnbm9yZUNhc2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFueUV4cGVjdGF0aW9uIHtcbiAgdHlwZTogXCJhbnlcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW5kRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImVuZFwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPdGhlckV4cGVjdGF0aW9uIHtcbiAgdHlwZTogXCJvdGhlclwiO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBFeHBlY3RhdGlvbiA9IElMaXRlcmFsRXhwZWN0YXRpb24gfCBJQ2xhc3NFeHBlY3RhdGlvbiB8IElBbnlFeHBlY3RhdGlvbiB8IElFbmRFeHBlY3RhdGlvbiB8IElPdGhlckV4cGVjdGF0aW9uO1xuXG5leHBvcnQgY2xhc3MgU3ludGF4RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRNZXNzYWdlKGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdLCBmb3VuZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIGZ1bmN0aW9uIGhleChjaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpdGVyYWxFc2NhcGUoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBzXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIilcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICBcIlxcXFxcXFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXDAvZywgXCJcXFxcMFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgXCJcXFxcclwiKVxuICAgICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICAgIChjaCkgPT4gXCJcXFxceDBcIiArIGhleChjaCkgKVxuICAgICAgICAucmVwbGFjZSgvW1xceDEwLVxceDFGXFx4N0YtXFx4OUZdL2csIChjaCkgPT4gXCJcXFxceFwiICArIGhleChjaCkgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGFzc0VzY2FwZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAucmVwbGFjZSgvXFxdL2csIFwiXFxcXF1cIilcbiAgICAgICAgLnJlcGxhY2UoL1xcXi9nLCBcIlxcXFxeXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tL2csICBcIlxcXFwtXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXDAvZywgXCJcXFxcMFwiKVxuICAgICAgICAucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgXCJcXFxcclwiKVxuICAgICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICAgIChjaCkgPT4gXCJcXFxceDBcIiArIGhleChjaCkgKVxuICAgICAgICAucmVwbGFjZSgvW1xceDEwLVxceDFGXFx4N0YtXFx4OUZdL2csIChjaCkgPT4gXCJcXFxceFwiICArIGhleChjaCkgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uOiBFeHBlY3RhdGlvbikge1xuICAgICAgc3dpdGNoIChleHBlY3RhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICAgICAgcmV0dXJuIFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShleHBlY3RhdGlvbi50ZXh0KSArIFwiXFxcIlwiO1xuICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICBjb25zdCBlc2NhcGVkUGFydHMgPSBleHBlY3RhdGlvbi5wYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnQpXG4gICAgICAgICAgICAgID8gY2xhc3NFc2NhcGUocGFydFswXSBhcyBzdHJpbmcpICsgXCItXCIgKyBjbGFzc0VzY2FwZShwYXJ0WzFdIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgOiBjbGFzc0VzY2FwZShwYXJ0KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBcIltcIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/IFwiXlwiIDogXCJcIikgKyBlc2NhcGVkUGFydHMgKyBcIl1cIjtcbiAgICAgICAgY2FzZSBcImFueVwiOlxuICAgICAgICAgIHJldHVybiBcImFueSBjaGFyYWN0ZXJcIjtcbiAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgIHJldHVybiBcImVuZCBvZiBpbnB1dFwiO1xuICAgICAgICBjYXNlIFwib3RoZXJcIjpcbiAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24uZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZDE6IEV4cGVjdGF0aW9uW10pIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IGV4cGVjdGVkMS5tYXAoZGVzY3JpYmVFeHBlY3RhdGlvbik7XG4gICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgbGV0IGo6IG51bWJlcjtcblxuICAgICAgZGVzY3JpcHRpb25zLnNvcnQoKTtcblxuICAgICAgaWYgKGRlc2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoaSA9IDEsIGogPSAxOyBpIDwgZGVzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGRlc2NyaXB0aW9uc1tpIC0gMV0gIT09IGRlc2NyaXB0aW9uc1tpXSkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2pdID0gZGVzY3JpcHRpb25zW2ldO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZXNjcmlwdGlvbnMubGVuZ3RoID0gajtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdICsgXCIgb3IgXCIgKyBkZXNjcmlwdGlvbnNbMV07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICsgXCIsIG9yIFwiXG4gICAgICAgICAgICArIGRlc2NyaXB0aW9uc1tkZXNjcmlwdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGb3VuZChmb3VuZDE6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3VuZDEgPyBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZm91bmQxKSArIFwiXFxcIlwiIDogXCJlbmQgb2YgaW5wdXRcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJFeHBlY3RlZCBcIiArIGRlc2NyaWJlRXhwZWN0ZWQoZXhwZWN0ZWQpICsgXCIgYnV0IFwiICsgZGVzY3JpYmVGb3VuZChmb3VuZCkgKyBcIiBmb3VuZC5cIjtcbiAgfVxuXG4gIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG4gIHB1YmxpYyBleHBlY3RlZDogRXhwZWN0YXRpb25bXTtcbiAgcHVibGljIGZvdW5kOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgbG9jYXRpb246IElGaWxlUmFuZ2U7XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBleHBlY3RlZDogRXhwZWN0YXRpb25bXSwgZm91bmQ6IHN0cmluZyB8IG51bGwsIGxvY2F0aW9uOiBJRmlsZVJhbmdlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgICB0aGlzLmZvdW5kID0gZm91bmQ7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIHRoaXMubmFtZSA9IFwiU3ludGF4RXJyb3JcIjtcblxuICAgIGlmICh0eXBlb2YgKEVycm9yIGFzIGFueSkuY2FwdHVyZVN0YWNrVHJhY2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKEVycm9yIGFzIGFueSkuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU3ludGF4RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDYWNoZWQge1xuICBuZXh0UG9zOiBudW1iZXI7XG4gIHJlc3VsdDogYW55O1xufVxuXG5mdW5jdGlvbiBwZWckcGFyc2UoaW5wdXQ6IHN0cmluZywgb3B0aW9ucz86IElQYXJzZU9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMgOiB7fTtcblxuICBjb25zdCBwZWckRkFJTEVEOiBSZWFkb25seTx7fT4gPSB7fTtcblxuICBjb25zdCBwZWckc3RhcnRSdWxlRnVuY3Rpb25zOiB7W2lkOiBzdHJpbmddOiBhbnl9ID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gIGxldCBwZWckc3RhcnRSdWxlRnVuY3Rpb246ICgpID0+IGFueSA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG5cbiAgY29uc3QgcGVnJGMwID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgICAgcmV0dXJuIGJ1aWxkQmluYXJ5T3BlcmFuZChoZWFkLCB0YWlsLCB0cnVlKTtcbiAgICB9O1xuICBjb25zdCBwZWckYzEgPSBcInx8XCI7XG4gIGNvbnN0IHBlZyRjMiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ8fFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMyA9IFwib3JcIjtcbiAgY29uc3QgcGVnJGM0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm9yXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzUgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJvclwiOyB9O1xuICBjb25zdCBwZWckYzYgPSBcIiYmXCI7XG4gIGNvbnN0IHBlZyRjNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCImJlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjOCA9IFwiYW5kXCI7XG4gIGNvbnN0IHBlZyRjOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbmRcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJhbmRcIjsgfTtcbiAgY29uc3QgcGVnJGMxMSA9IGZ1bmN0aW9uKGhlYWQ6IGFueSwgdGFpbDogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCk7XG4gICAgfTtcbiAgY29uc3QgcGVnJGMxMiA9IFwiPD1cIjtcbiAgY29uc3QgcGVnJGMxMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8PVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQgPSBcImxlc3NvcmVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc29yZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJsZXNzb3JlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzE3ID0gXCI+PVwiO1xuICBjb25zdCBwZWckYzE4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj49XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxOSA9IFwiZ3JlYXRlcm9yZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJncmVhdGVyb3JlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyMSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJvcmVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjIgPSBcIj1cIjtcbiAgY29uc3QgcGVnJGMyMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMyNCA9IFwiZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMyNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMjcgPSBcIiE9XCI7XG4gIGNvbnN0IHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiIT1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzI5ID0gXCJub3RlcXVhbFwiO1xuICBjb25zdCBwZWckYzMwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVxdWFsXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzMxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZXF1YWxcIjsgfTtcbiAgY29uc3QgcGVnJGMzMiA9IFwiPFwiO1xuICBjb25zdCBwZWckYzMzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjxcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM0ID0gXCJsZXNzXCI7XG4gIGNvbnN0IHBlZyRjMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibGVzc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMzNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImxlc3NcIjsgfTtcbiAgY29uc3QgcGVnJGMzNyA9IFwiPlwiO1xuICBjb25zdCBwZWckYzM4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIj5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzM5ID0gXCJncmVhdGVyXCI7XG4gIGNvbnN0IHBlZyRjNDAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlclwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM0MSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImdyZWF0ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM0MiA9IFwiK1wiO1xuICBjb25zdCBwZWckYzQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIitcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ0ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicGx1c1wiOyAgfTtcbiAgY29uc3QgcGVnJGM0NSA9IFwiLVwiO1xuICBjb25zdCBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0OCA9IFwiKlwiO1xuICBjb25zdCBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibXVsXCI7IH07XG4gIGNvbnN0IHBlZyRjNTEgPSBcIi9cIjtcbiAgY29uc3QgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImRpdlwiOyB9O1xuICBjb25zdCBwZWckYzU0ID0gXCIlXCI7XG4gIGNvbnN0IHBlZyRjNTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgY29uc3QgcGVnJGM1NyA9IFwiXlwiO1xuICBjb25zdCBwZWckYzU4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzU5ID0gXCJwb3dlclwiO1xuICBjb25zdCBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzYxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicG93ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM2MiA9IFwiKj1cIjtcbiAgY29uc3QgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIqPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNjQgPSBcImNvbnRhaW5zXCI7XG4gIGNvbnN0IHBlZyRjNjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29udGFpbnNcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNjYgPSBcImNvbnRhaW5cIjtcbiAgY29uc3QgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzY4ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiY29udGFpbnNcIjsgfTtcbiAgY29uc3QgcGVnJGM2OSA9IFwibm90Y29udGFpbnNcIjtcbiAgY29uc3QgcGVnJGM3MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3MSA9IFwibm90Y29udGFpblwiO1xuICBjb25zdCBwZWckYzcyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGNvbnRhaW5cIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNzMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICBjb25zdCBwZWckYzc0ID0gXCJhbnlvZlwiO1xuICBjb25zdCBwZWckYzc1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc2ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbnlvZlwiOyB9O1xuICBjb25zdCBwZWckYzc3ID0gXCJhbGxvZlwiO1xuICBjb25zdCBwZWckYzc4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFsbG9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc5ID0gZnVuY3Rpb24oKTogYW55IHtyZXR1cm4gXCJhbGxvZlwiOyB9O1xuICBjb25zdCBwZWckYzgwID0gXCIoXCI7XG4gIGNvbnN0IHBlZyRjODEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiKFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjODIgPSBcIilcIjtcbiAgY29uc3QgcGVnJGM4MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIpXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4NCA9IGZ1bmN0aW9uKGV4cHI6IGFueSk6IGFueSB7IHJldHVybiBleHByOyB9O1xuICBjb25zdCBwZWckYzg1ID0gZnVuY3Rpb24obmFtZTogYW55LCBwYXJhbXM6IGFueSk6IGFueSB7IHJldHVybiBuZXcgRnVuY3Rpb25PcGVyYW5kKG5hbWUsIHBhcmFtcyk7IH07XG4gIGNvbnN0IHBlZyRjODYgPSBcIiFcIjtcbiAgY29uc3QgcGVnJGM4NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIhXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4OCA9IFwibmVnYXRlXCI7XG4gIGNvbnN0IHBlZyRjODkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibmVnYXRlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzkwID0gZnVuY3Rpb24oZXhwcjogYW55KTogYW55IHsgcmV0dXJuIG5ldyBVbmFyeU9wZXJhbmQoZXhwciwgXCJuZWdhdGVcIik7IH07XG4gIGNvbnN0IHBlZyRjOTEgPSBmdW5jdGlvbihleHByOiBhbnksIG9wOiBhbnkpOiBhbnkgeyByZXR1cm4gbmV3IFVuYXJ5T3BlcmFuZChleHByLCBvcCk7IH07XG4gIGNvbnN0IHBlZyRjOTIgPSBcImVtcHR5XCI7XG4gIGNvbnN0IHBlZyRjOTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW1wdHlcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTQgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJlbXB0eVwiOyB9O1xuICBjb25zdCBwZWckYzk1ID0gXCJub3RlbXB0eVwiO1xuICBjb25zdCBwZWckYzk2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGVtcHR5XCIsIHRydWUpO1xuICBjb25zdCBwZWckYzk3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibm90ZW1wdHlcIjsgfTtcbiAgY29uc3QgcGVnJGM5OCA9IFwidW5kZWZpbmVkXCI7XG4gIGNvbnN0IHBlZyRjOTkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwidW5kZWZpbmVkXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDAgPSBcIm51bGxcIjtcbiAgY29uc3QgcGVnJGMxMDEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibnVsbFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTAyID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIG51bGw7IH07XG4gIGNvbnN0IHBlZyRjMTAzID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgQ29uc3QodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwNCA9IFwie1wiO1xuICBjb25zdCBwZWckYzEwNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDYgPSBcIn1cIjtcbiAgY29uc3QgcGVnJGMxMDcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTA4ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBuZXcgVmFyaWFibGUodmFsdWUpOyB9O1xuICBjb25zdCBwZWckYzEwOSA9IFwiJ1wiO1xuICBjb25zdCBwZWckYzExMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTEgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHsgcmV0dXJuIHZhbHVlOyB9O1xuICBjb25zdCBwZWckYzExMiA9IFwiXFxcIlwiO1xuICBjb25zdCBwZWckYzExMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTQgPSBcIltcIjtcbiAgY29uc3QgcGVnJGMxMTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiW1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTE2ID0gXCJdXCI7XG4gIGNvbnN0IHBlZyRjMTE3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzExOCA9IGZ1bmN0aW9uKHNlcXVlbmNlOiBhbnkpOiBhbnkgeyByZXR1cm4gc2VxdWVuY2U7IH07XG4gIGNvbnN0IHBlZyRjMTE5ID0gXCIsXCI7XG4gIGNvbnN0IHBlZyRjMTIwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIixcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEyMSA9IGZ1bmN0aW9uKGV4cHI6IGFueSwgdGFpbDogYW55KTogYW55IHtcbiAgICAgIGlmIChleHByID09IG51bGwpXG4gICAgICAgIHJldHVybiBuZXcgQXJyYXlPcGVyYW5kKFtdKTtcblxuICAgICAgdmFyIGFycmF5ID0gW2V4cHJdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFpbCkpIHtcbiAgICAgICAgdmFyIGZsYXR0ZW4gPSBmbGF0dGVuQXJyYXkodGFpbCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgZmxhdHRlbi5sZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgIGFycmF5LnB1c2goZmxhdHRlbltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBBcnJheU9wZXJhbmQoYXJyYXkpO1xuICAgIH07XG4gIGNvbnN0IHBlZyRjMTIyID0gXCJ0cnVlXCI7XG4gIGNvbnN0IHBlZyRjMTIzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInRydWVcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTI0ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHRydWU7IH07XG4gIGNvbnN0IHBlZyRjMTI1ID0gXCJmYWxzZVwiO1xuICBjb25zdCBwZWckYzEyNiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJmYWxzZVwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMxMjcgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gZmFsc2U7IH07XG4gIGNvbnN0IHBlZyRjMTI4ID0gXCIweFwiO1xuICBjb25zdCBwZWckYzEyOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIweFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTMwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHBhcnNlSW50KHRleHQoKSwgMTYpOyB9O1xuICBjb25zdCBwZWckYzEzMSA9IC9eW1xcLV0vO1xuICBjb25zdCBwZWckYzEzMiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIi1cIl0sIGZhbHNlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTMzID0gZnVuY3Rpb24oc2lnbjogYW55LCBudW06IGFueSk6IGFueSB7IHJldHVybiBzaWduID09IG51bGwgPyBudW0gOiAtbnVtOyB9O1xuICBjb25zdCBwZWckYzEzNCA9IFwiLlwiO1xuICBjb25zdCBwZWckYzEzNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIuXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMzYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gcGFyc2VGbG9hdCh0ZXh0KCkpOyB9O1xuICBjb25zdCBwZWckYzEzNyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBwYXJzZUludCh0ZXh0KCksIDEwKTsgfTtcbiAgY29uc3QgcGVnJGMxMzggPSBcIjBcIjtcbiAgY29uc3QgcGVnJGMxMzkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiMFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIDA7IH07XG4gIGNvbnN0IHBlZyRjMTQxID0gZnVuY3Rpb24oY2hhcnM6IGFueSk6IGFueSB7IHJldHVybiBjaGFycy5qb2luKFwiXCIpOyB9O1xuICBjb25zdCBwZWckYzE0MiA9IFwiXFxcXCdcIjtcbiAgY29uc3QgcGVnJGMxNDMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXFxcXCdcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0NCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIidcIjsgfTtcbiAgY29uc3QgcGVnJGMxNDUgPSBcIlxcXFxcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXFxcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNDcgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJcXFwiXCI7IH07XG4gIGNvbnN0IHBlZyRjMTQ4ID0gL15bXlwiJ3t9XS87XG4gIGNvbnN0IHBlZyRjMTQ5ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxcIlwiLCBcIidcIiwgXCJ7XCIsIFwifVwiXSwgdHJ1ZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1MCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiB0ZXh0KCk7IH07XG4gIGNvbnN0IHBlZyRjMTUxID0gL15bXnt9XS87XG4gIGNvbnN0IHBlZyRjMTUyID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wie1wiLCBcIn1cIl0sIHRydWUsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTMgPSAvXlswLTldLztcbiAgY29uc3QgcGVnJGMxNTQgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1NSA9IC9eWzEtOV0vO1xuICBjb25zdCBwZWckYzE1NiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCIxXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTU3ID0gL15bYS16QS1aXS87XG4gIGNvbnN0IHBlZyRjMTU4ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXV0sIGZhbHNlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTU5ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJ3aGl0ZXNwYWNlXCIpO1xuICBjb25zdCBwZWckYzE2MCA9IC9eWyBcXHRcXG5cXHJdLztcbiAgY29uc3QgcGVnJGMxNjEgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIgXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxyXCJdLCBmYWxzZSwgZmFsc2UpO1xuXG4gIGxldCBwZWckY3VyclBvcyA9IDA7XG4gIGxldCBwZWckc2F2ZWRQb3MgPSAwO1xuICBjb25zdCBwZWckcG9zRGV0YWlsc0NhY2hlID0gW3sgbGluZTogMSwgY29sdW1uOiAxIH1dO1xuICBsZXQgcGVnJG1heEZhaWxQb3MgPSAwO1xuICBsZXQgcGVnJG1heEZhaWxFeHBlY3RlZDogRXhwZWN0YXRpb25bXSA9IFtdO1xuICBsZXQgcGVnJHNpbGVudEZhaWxzID0gMDtcblxuICBjb25zdCBwZWckcmVzdWx0c0NhY2hlOiB7W2lkOiBudW1iZXJdOiBJQ2FjaGVkfSA9IHt9O1xuXG4gIGxldCBwZWckcmVzdWx0O1xuXG4gIGlmIChvcHRpb25zLnN0YXJ0UnVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCEob3B0aW9ucy5zdGFydFJ1bGUgaW4gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHN0YXJ0IHBhcnNpbmcgZnJvbSBydWxlIFxcXCJcIiArIG9wdGlvbnMuc3RhcnRSdWxlICsgXCJcXFwiLlwiKTtcbiAgICB9XG5cbiAgICBwZWckc3RhcnRSdWxlRnVuY3Rpb24gPSBwZWckc3RhcnRSdWxlRnVuY3Rpb25zW29wdGlvbnMuc3RhcnRSdWxlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYXRpb24oKTogSUZpbGVSYW5nZSB7XG4gICAgcmV0dXJuIHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbjogc3RyaW5nLCBsb2NhdGlvbjE/OiBJRmlsZVJhbmdlKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb24xXG4gICAgICA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG5cbiAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoXG4gICAgICBbcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pXSxcbiAgICAgIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKSxcbiAgICAgIGxvY2F0aW9uMVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGxvY2F0aW9uMT86IElGaWxlUmFuZ2UpIHtcbiAgICBsb2NhdGlvbjEgPSBsb2NhdGlvbjEgIT09IHVuZGVmaW5lZFxuICAgICAgPyBsb2NhdGlvbjFcbiAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcblxuICAgIHRocm93IHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uMSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQxOiBzdHJpbmcsIGlnbm9yZUNhc2U6IGJvb2xlYW4pOiBJTGl0ZXJhbEV4cGVjdGF0aW9uIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImxpdGVyYWxcIiwgdGV4dDogdGV4dDEsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzOiBJQ2xhc3NQYXJ0cywgaW52ZXJ0ZWQ6IGJvb2xlYW4sIGlnbm9yZUNhc2U6IGJvb2xlYW4pOiBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJjbGFzc1wiLCBwYXJ0czogcGFydHMsIGludmVydGVkOiBpbnZlcnRlZCwgaWdub3JlQ2FzZTogaWdub3JlQ2FzZSB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGFueUV4cGVjdGF0aW9uKCk6IElBbnlFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJhbnlcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGVuZEV4cGVjdGF0aW9uKCk6IElFbmRFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IElPdGhlckV4cGVjdGF0aW9uIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvczogbnVtYmVyKSB7XG4gICAgbGV0IGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc107XG4gICAgbGV0IHA7XG5cbiAgICBpZiAoZGV0YWlscykge1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAgPSBwb3MgLSAxO1xuICAgICAgd2hpbGUgKCFwZWckcG9zRGV0YWlsc0NhY2hlW3BdKSB7XG4gICAgICAgIHAtLTtcbiAgICAgIH1cblxuICAgICAgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcF07XG4gICAgICBkZXRhaWxzID0ge1xuICAgICAgICBsaW5lOiBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuXG4gICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY29tcHV0ZUxvY2F0aW9uKHN0YXJ0UG9zOiBudW1iZXIsIGVuZFBvczogbnVtYmVyKTogSUZpbGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHN0YXJ0UG9zKTtcbiAgICBjb25zdCBlbmRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKGVuZFBvcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgb2Zmc2V0OiBzdGFydFBvcyxcbiAgICAgICAgbGluZTogc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogZW5kUG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGVuZFBvc0RldGFpbHMuY29sdW1uXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRmYWlsKGV4cGVjdGVkMTogRXhwZWN0YXRpb24pIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZTogc3RyaW5nLCBsb2NhdGlvbjE6IElGaWxlUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UsIFtdLCBcIlwiLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSwgZm91bmQ6IHN0cmluZyB8IG51bGwsIGxvY2F0aW9uMTogSUZpbGVSYW5nZSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UoZXhwZWN0ZWQxLCBmb3VuZCksXG4gICAgICBleHBlY3RlZDEsXG4gICAgICBmb3VuZCxcbiAgICAgIGxvY2F0aW9uMVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHByZXNzaW9uKCk6IE9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gW107XG4gICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUxvZ2ljT3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICAgIHM0ID0gczU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMChzMiwgczMpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VPclNpZ24oKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxKSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMykge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMik7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljT3IoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZUFuZFNpZ24oKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUxvZ2ljQW5kKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUxvZ2ljQW5kKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQW5kU2lnbigpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzYpIHtcbiAgICAgIHMxID0gcGVnJGM2O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM4KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTAoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljQW5kKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlQ29tcE9wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQ29tcE9wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTEoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTIpIHtcbiAgICAgIHMxID0gcGVnJGMxMjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxNCkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE2KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTcpIHtcbiAgICAgICAgczEgPSBwZWckYzE3O1xuICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTQpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTQpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDE0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzIxKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMjI7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMjQpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzI2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMyNykge1xuICAgICAgICAgICAgczEgPSBwZWckYzI3O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI4KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMjkpIHtcbiAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMzEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYwKSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMzMjtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMzKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMzQpIHtcbiAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM1KTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMzNigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYyKSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzM3O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzOCk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzM5KSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDApOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM0MSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcE9wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVBsdXNNaW51c09wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZVBsdXNNaW51c09wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA3O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mykge1xuICAgICAgczEgPSBwZWckYzQyO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzQ0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgICBzMSA9IHBlZyRjNDU7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Nik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzQ3KCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c09wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDg7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZU11bERpdk9wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZU11bERpdlNpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZU11bERpdlNpZ25zKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU11bERpdk9wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdlNpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mikge1xuICAgICAgczEgPSBwZWckYzQ4O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nykge1xuICAgICAgICBzMSA9IHBlZyRjNTE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1Mik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzUzKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzcpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjNTQ7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzU1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM1NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTXVsRGl2T3BzKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUJpbmFyeUZ1bmNPcCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUJpbmFyeUZ1bmNPcCgpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlUG93ZXJTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQb3dlclNpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTQpIHtcbiAgICAgIHMxID0gcGVnJGM1NztcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1OCk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzU5KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzYxKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUZhY3RvcigpO1xuICAgICAgICAgICAgaWYgKHM3ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMShzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM2Mikge1xuICAgICAgczEgPSBwZWckYzYyO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNjQpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2Nikge1xuICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjcpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM2OCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDExKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzY5KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDExO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzApOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzEpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzczKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzQpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM3NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM3Nykge1xuICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc4KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzc5KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGYWN0b3IoKTogT3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7XG4gICAgICBzMSA9IHBlZyRjODA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjODI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGM4NChzMyk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckcGFyc2VGdW5jdGlvbk9wKCk7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckcGFyc2VVbmFyeUZ1bmN0aW9uT3AoKTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRwYXJzZUFycmF5T3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGdW5jdGlvbk9wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTGV0dGVyc0FuZERpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgICBzMiA9IHBlZyRjODA7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVNlcXVlbmNlKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDEpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGM4MjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjODUoczEsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE2O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzMykge1xuICAgICAgczEgPSBwZWckYzg2O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjODgpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM5MChzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZUF0b20oKTtcbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VVbkZ1bmN0aW9ucygpO1xuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjOTEoczEsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVW5GdW5jdGlvbnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE3O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM5Mikge1xuICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzk0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM5NSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Nik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzk3KCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUF0b20oKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA5KSA9PT0gcGVnJGM5OCkge1xuICAgICAgICBzMiA9IHBlZyRjOTg7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KSA9PT0gcGVnJGMxMDApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjMTAwO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDEpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEwMigpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbnN0VmFsdWUoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEwMyhzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgICAgICAgczIgPSBwZWckYzEwNDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDUpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VWYWx1ZUlucHV0KCk7XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjMTA2O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDcpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwOChzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbnN0VmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTk7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckcGFyc2VMb2dpY1ZhbHVlKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJHBhcnNlTGV0dGVyc0FuZERpZ2l0cygpO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMDk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEwKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlQW55SW5wdXQoKTtcbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM5KSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckYzEwOTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEwKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTEoczIpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTEyO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEzKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlQW55SW5wdXQoKTtcbiAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzExMjtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTMpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTExKHMyKTtcbiAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQXJyYXlPcCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyMDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTEpIHtcbiAgICAgIHMxID0gcGVnJGMxMTQ7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE1KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlU2VxdWVuY2UoKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkzKSB7XG4gICAgICAgICAgczMgPSBwZWckYzExNjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE3KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMTgoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTZXF1ZW5jZSgpOiBBcnJheU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjMTE5O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRjMTE5O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyMCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEyMShzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMjIpIHtcbiAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTI0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxMjUpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTI2KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTI3KCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFyaXRobWV0aWNWYWx1ZSgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIzO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTI4KSB7XG4gICAgICBzMSA9IHBlZyRjMTI4O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyOSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMwKCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChwZWckYzEzMS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzMik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VOdW1iZXIoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEzMyhzMSwgczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VOdW1iZXIoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nikge1xuICAgICAgICBzMiA9IHBlZyRjMTM0O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMzYoKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTM3KCk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDgpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTM4O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMzkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzE0MCgpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmFsdWVJbnB1dCgpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQxKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFueUlucHV0KCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNlQW55Q2hhcmFjdGVycygpO1xuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUNoYXJhY3RlcnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE0MShzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzE0Mikge1xuICAgICAgczEgPSBwZWckYzE0MjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDMpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQ0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTQ1KSB7XG4gICAgICAgIHMxID0gcGVnJGMxNDU7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxNDcoKTtcbiAgICAgIH1cbiAgICAgIHMwID0gczE7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKHBlZyRjMTQ4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTUwKCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYWx1ZUNoYXJhY3RlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKHBlZyRjMTUxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTIpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzQW5kRGlnaXRzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IFtdO1xuICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBbXTtcbiAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW3M0LCBzNV07XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZURpZ2l0cygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IFtzNCwgczVdO1xuICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1MCgpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZURpZ2l0cygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNTMudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1NCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE1My50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTQpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vblplcm9EaWdpdHMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMxO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNTUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VMZXR0ZXJzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE1Ny50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU4KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgaWYgKHBlZyRjMTU3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1OCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlXygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNjAudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MSk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE2MC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU5KTsgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZDogT3BlcmFuZCwgdGFpbDogQXJyYXk8YW55PiwgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRhaWwucmVkdWNlKFxuICAgICAgICBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlPcGVyYW5kKGVsZW1lbnRzWzFdLCByZXN1bHQsIGVsZW1lbnRzWzNdLCBpc0FyaXRobWV0aWNPcCk7XG4gICAgICAgIH0sIFxuICAgICAgICBoZWFkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbGF0dGVuQXJyYXkoYXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGFycmF5KTtcbiAgICB9XG5cblxuICBwZWckcmVzdWx0ID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uKCk7XG5cbiAgaWYgKHBlZyRyZXN1bHQgIT09IHBlZyRGQUlMRUQgJiYgcGVnJGN1cnJQb3MgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZWckcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICBwZWckZmFpbChwZWckZW5kRXhwZWN0YXRpb24oKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCxcbiAgICAgIHBlZyRtYXhGYWlsUG9zIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckF0KHBlZyRtYXhGYWlsUG9zKSA6IG51bGwsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aFxuICAgICAgICA/IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zICsgMSlcbiAgICAgICAgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcylcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnNlT3B0aW9ucyB7XG4gIGZpbGVuYW1lPzogc3RyaW5nO1xuICBzdGFydFJ1bGU/OiBzdHJpbmc7XG4gIHRyYWNlcj86IGFueTtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHR5cGUgUGFyc2VGdW5jdGlvbiA9IChpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykgPT4gYW55O1xuZXhwb3J0IGNvbnN0IHBhcnNlOiBQYXJzZUZ1bmN0aW9uID0gcGVnJHBhcnNlO1xuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZXhwcmVzc2lvbnMvZXhwcmVzc2lvblBhcnNlci50cyIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgSVF1ZXN0aW9uIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbi8qKlxuICogVGhlIGZsb3cgcGFuZWwgb2JqZWN0LiBJdCBpcyBhIGNvbnRhaW5lciB3aXRoIGZsb3cgbGF5b3V0IHdoZXJlIHlvdSBjYW4gbWl4IHF1ZXN0aW9ucyB3aXRoIG1hcmRvd24gdGV4dC5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBGbG93UGFuZWxNb2RlbCBleHRlbmRzIFBhbmVsTW9kZWwge1xuICBzdGF0aWMgY29udGVudEVsZW1lbnROYW1lUHJlZml4ID0gXCJlbGVtZW50OlwiO1xuICBwdWJsaWMgY29udGVudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIG9uR2V0SHRtbEZvclF1ZXN0aW9uOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBzdHJpbmc7XG4gIHB1YmxpYyBvbkN1c3RvbUh0bWxQcm9kdWNpbmc6ICgpID0+IHN0cmluZztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb250ZW50XCIsIHRoaXMsIHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29udGVudFwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub25Db250ZW50Q2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZmxvd3BhbmVsXCI7XG4gIH1cbiAgZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZmxvd1wiO1xuICB9XG4gIG9uU3VydmV5TG9hZCgpOiBhbnkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIHRoaXMub25Db250ZW50Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbnRlbnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb250ZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NDb250ZW50KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbnRlbnRcIik7XG4gIH1cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImh0bWxcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBodG1sKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaHRtbFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvbkNvbnRlbnRDaGFuZ2VkKCk6IGFueSB7XG4gICAgdmFyIGh0bWwgPSBcIlwiO1xuICAgIGlmICghIXRoaXMub25DdXN0b21IdG1sUHJvZHVjaW5nKSB7XG4gICAgICBodG1sID0gdGhpcy5vbkN1c3RvbUh0bWxQcm9kdWNpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbCA9IHRoaXMucHJvZHVjZUh0bWwoKTtcbiAgICB9XG4gICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuY29udGVudENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIHB1YmxpYyBwcm9kdWNlSHRtbCgpOiBzdHJpbmcge1xuICAgIHZhciBodG1sID0gW107XG4gICAgLy9jb250ZW50RWxlbWVudE5hbWVQcmVmaXhcbiAgICB2YXIgcmVnRXggPSAveyguKj8oZWxlbWVudDopW14kXS4qPyl9L2c7XG4gICAgdmFyIHN0ciA9IHRoaXMuY29udGVudDtcbiAgICB2YXIgc3RhcnRJbmRleCA9IDA7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgd2hpbGUgKChyZXMgPSByZWdFeC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICBpZiAocmVzLmluZGV4ID4gc3RhcnRJbmRleCkge1xuICAgICAgICBodG1sLnB1c2goc3RyLnN1YnN0cihzdGFydEluZGV4LCByZXMuaW5kZXggLSBzdGFydEluZGV4KSk7XG4gICAgICAgIHN0YXJ0SW5kZXggPSByZXMuaW5kZXg7XG4gICAgICB9XG4gICAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFF1ZXN0aW9uRnJvbVRleHQocmVzWzBdKTtcbiAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgIGh0bWwucHVzaCh0aGlzLmdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5wdXNoKFxuICAgICAgICAgIHN0ci5zdWJzdHIoc3RhcnRJbmRleCwgcmVzLmluZGV4ICsgcmVzWzBdLmxlbmd0aCAtIHN0YXJ0SW5kZXgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGFydEluZGV4ID0gcmVzLmluZGV4ICsgcmVzWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0SW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgICBodG1sLnB1c2goc3RyLnN1YnN0cihzdGFydEluZGV4LCBzdHIubGVuZ3RoIC0gc3RhcnRJbmRleCkpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbC5qb2luKFwiXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIjxicj5cIiwgXCJnXCIpLCBcIjxici8+XCIpO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21UZXh0KHN0cjogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHN0ciA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCwgXCJcIikudHJpbSgpO1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKHN0cik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEh0bWxGb3JRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMub25HZXRIdG1sRm9yUXVlc3Rpb24pIHJldHVybiB0aGlzLm9uR2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25IdG1sSWQocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJfXCIgKyBxdWVzdGlvbi5pZDtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgc3VwZXIub25BZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICB0aGlzLmFkZEVsZW1lbnRUb0NvbnRlbnQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5yZW5kZXJXaWR0aCA9IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHZhciBzZWFyY2hTdHIgPSB0aGlzLmdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50KTtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZShzZWFyY2hTdHIsIFwiXCIpO1xuICAgIHN1cGVyLm9uUmVtb3ZlRWxlbWVudChlbGVtZW50KTtcbiAgfVxuICBkcmFnRHJvcE1vdmVFbGVtZW50KHNyYzogSUVsZW1lbnQsIHRhcmdldDogSUVsZW1lbnQsIHRhcmdldEluZGV4OiBudW1iZXIpIHt9XG4gIHByaXZhdGUgYWRkRWxlbWVudFRvQ29udGVudChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHRleHQgPSB0aGlzLmdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50KTtcbiAgICBpZiAoIXRoaXMuaW5zZXJ0VGV4dEF0Q3Vyc29yKHRleHQpKSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQgKyB0ZXh0O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGluc2VydFRleHRBdEN1cnNvcih0ZXh0OiBzdHJpbmcsIHByZXZOYW1lOiBzdHJpbmcgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSB8fCAoIXdpbmRvdyAmJiAhd2luZG93LmdldFNlbGVjdGlvbikpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWwuZ2V0UmFuZ2VBdCAmJiBzZWwucmFuZ2VDb3VudCkge1xuICAgICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgICB2YXIgc2VsZiA9IDxhbnk+dGhpcztcbiAgICAgIGlmIChzZWxmLmdldENvbnRlbnQpIHtcbiAgICAgICAgdmFyIHN0ciA9IHNlbGYuZ2V0Q29udGVudChwcmV2TmFtZSk7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHN0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRDb250ZW50VGV4dChlbGVtZW50OiBJRWxlbWVudCkge1xuICAgIHJldHVybiBcIntcIiArIEZsb3dQYW5lbE1vZGVsLmNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCArIGVsZW1lbnQubmFtZSArIFwifVwiO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZmxvd3BhbmVsXCIsXG4gIFt7IG5hbWU6IFwiY29udGVudDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb250ZW50XCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRmxvd1BhbmVsTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbFwiXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Zsb3dwYW5lbC50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYXJhYmljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItin2YTYs9in2KjZglwiLFxuICBwYWdlTmV4dFRleHQ6IFwi2KfZhNiq2KfZhNmKXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLYp9mG2YfYp9ihLSDYqtmFXCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MX0g2LXZgdit2KkgezB9INmF2YZcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLZhti1INii2K7YsVwiLFxuICBlbXB0eVN1cnZleTogXCLZhNinINiq2YjYrNivINi12YHYrdipINmF2LHYptmK2Kkg2KPZiCDYs9ik2KfZhCDZgdmKINin2YTZhdiz2K1cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLYtNmD2LHYpyDZhNmDINmE2KfYs9iq2YPZhdin2YQg2KfZhNin2LPYqtio2YrYp9mGIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIi4uLtmK2KrZhSDYqtit2YXZitmEINin2YTYp9iz2KrYqNmK2KfZhlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCIuLi7Yp9iu2KrYsVwiLFxuICByZXF1aXJlZEVycm9yOiBcIi7Zitix2KzZiSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KfZhNiz2KTYp9mEXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYo9iz2KbZhNipINmB2Yog2KzZhdmK2Lkg2KfZhNi12YHZiNmBXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDYp9mE2YLZitmF2Kkg2KfZhNix2YLZhdmK2KkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YXYpyDZhNinINmK2YLZhCDYudmGIHswfSDYrdix2YFcIixcbiAgdGV4dE1heExlbmd0aDogXCLYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDYo9mC2YQg2YXZhiB7MH0g2K3YsdmBXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YrYsdis2Ykg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHswfSDZiNij2YLZhCDZhdmGIHsxfSDYrdix2YFcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLZitix2KzZiSDZhdmE2KEg2YXYpyDZhNinINmK2YLZhCDYudmGIHswfSDYp9mE2LXZgdmI2YFcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi2YrYsdis2Ykg2KrYrdiv2YrYryDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLZitix2KzZiSDYqtit2K/ZitivINmF2Kcg2YTYpyDZitiy2YrYryDYudmGIHswfSDYp9mE2YXYqti62YrYsdin2KpcIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZg9ir2LEg2YXZhiB7MX0g2YjZitiz2KfZiNmKINij2Ygg2KPZgtmEINmF2YYgezJ92KdcIixcbiAgbnVtZXJpY01pbjogXCLZiCd7MH0nINmK2KzYqCDYo9mGINiq2YPZiNmGINmF2LPYp9mI2YrYqSDYo9mIINij2YPYq9ixINmF2YYgezF92KdcIixcbiAgbnVtZXJpY01heDogXCLZiCd7MH0nINmK2KzYqCDYo9mGINiq2YPZiNmGINmF2LPYp9mI2YrYqSDYo9mIINij2YLZhCDZhdmGIHsxfdinXCIsXG4gIGludmFsaWRFbWFpbDogXCLYsdis2KfYoSDZgtmFINio2KXYr9iu2KfZhCDYqNix2YrYryDYp9mE2YPYqtix2YjZhtmKINi12K3ZititXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLYt9mE2Kgg2KXYsdis2KfYuSDYrti32KMgJ3swfScuIHsxfdinXCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLYudin2K8g2LfZhNioINio2YrYp9mG2KfYqiDZgdin2LHYutipINij2YggJ9in2YTZhdiz2KfYsScg2YXZhdiq2YTZg9in2Kog2LrZitixINi12K3Zitit2KkgXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi2YjZitmG2KjYutmKINij2YTYpyDZitiq2KzYp9mI2LIg2K3YrNmFINin2YTZhdmE2YEgezB92KdcIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINmC2YrZhdipINij2K7YsdmJXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi2KfZhNmF2YTZgSDYp9mE2K7Yp9i1INio2YMg2KrYrdmF2YrZhC4g2YrYsdis2Ykg2KfZhNin2YbYqti42KfYsSDYudiv2Kkg2KvZiNin2YYg2YjYrdin2YjZhCDZhdix2Kkg2KPYrtix2YlcIixcbiAgYWRkUm93OiBcItin2LbYp9mB2Kkg2LXZgVwiLFxuICByZW1vdmVSb3c6IFwi2KXYstin2YTYqSDYtdmBXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiYXJcIl0gPSBhcmFiaWNTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiYXJcIl0gPSBcItin2YTYudix2KjZitipXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2FyYWJpYy50cyIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYnVsZ2FyaWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCd0LDQt9Cw0LRcIixcbiAgcGFnZU5leHRUZXh0OiBcItCd0LDQv9GA0LXQtFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JrRgNCw0LlcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCd0LDRh9Cw0LvQvlwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L4gKNC+0L/QuNGI0LXRgtC1KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QuNGC0L4g0LXQtNC40L1cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0JLRgdC40YfQutC4XCIsXG4gIHByb2dyZXNzVGV4dDogXCLRgdGC0YAuIHswfSwg0L7QsdGJ0L4g0YHRgtGALiB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0JDQvdC60LXRgtCw0YLQsCDQvdC1INGB0YrQtNGK0YDQttCwINCy0LjQtNC40LzQuCDRgdGC0YDQsNC90LjRhtC4INC40LvQuCDQstGK0L/RgNC+0YHQuC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQkdC70LDQs9C+0LTQsNGA0LjQvCDQstC4INC30LAg0YPRh9Cw0YHRgtC40LXRgtC+INCyINCw0L3QutC10YLQsNGC0LAhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQmNC30LPQu9C10LbQtNCwLCDRh9C1INCy0LjQtSDQstC10YfQtSDRgdGC0LUg0L/QvtC/0YrQu9C90LjQu9C4INCw0L3QutC10YLQsNGC0LAuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC60LXRgtCw0YLQsC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLQmNC30LHQtdGA0LXRgtC1Li4uXCIsXG4gIHZhbHVlOiBcInZhbHVlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi0JzQvtC70Y8sINC+0YLQs9C+0LLQvtGA0LXRgtC1INC90LAg0YHQu9C10LTQvdC40Y8g0LLRitC/0YDQvtGBLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQnNC+0LvRjywg0L7RgtCz0L7QstC+0YDQtdGC0LUg0L/QvtC90LUg0L3QsCDQtdC00LjQvSDQvtGCINCy0YrQv9GA0L7RgdC40YLQtS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQnNC+0LvRjywg0L7RgtCz0L7QstC+0YDQtdGC0LUg0L3QsCDQstGK0L/RgNC+0YHQuNGC0LUg0L3QsCDQstGB0LjRh9C60Lgg0YDQtdC00L7QstC1LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YfQuNGB0LvQvi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQnNC+0LvRjywg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQv9C+0L3QtSB7MH0g0YHQuNC80LLQvtC70LAuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0JzQvtC70Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L3QtSDQv9C+0LLQtdGH0LUg0L7RgiB7MH0g0YHQuNC80LLQvtC70LAuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0JzQvtC70Y8sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INC4INC/0L4t0LzQsNC70LrQviDQvtGCIHsxfSDRgdC40LzQstC+0LvQsC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQnNC+0LvRjywg0L/QvtC/0YrQu9C90LXRgtC1INC/0L7QvdC1IHswfSDRgNC10LTQsC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JzQvtC70Y8sINC40LfQsdC10YDQtdGC0LUg0L/QvtC90LUgezB9INCy0LDRgNC40LDQvdGC0LAuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC90LUg0L/QvtCy0LXRh9C1INC+0YIgezB9INCy0LDRgNC40LDQvdGC0LAuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdCz0L7Qu9GP0LzQsCDQvtGCIHsxfSDQuCDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdCz0L7Qu9GP0LzQsCDQvtGCIHsxfVwiLFxuICBudW1lcmljTWF4OiBcItCh0YLQvtC50L3QvtGB0YLRgtCwICd7MH0nINGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INGA0LDQstC90LAg0LjQu9C4INC/0L4t0LzQsNC70LrQsCDQvtGCIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LLQsNC70LjQtNC10L0g0LDQtNGA0LXRgSDQvdCwINC10LvQtdC60YLRgNC+0L3QvdCwINC/0L7RidCwLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQmNC30YDQsNC30YrRgjogezB9INGC0YDRj9Cx0LLQsCDQtNCwINC00LDQstCwINGA0LXQt9GD0LvRgtCw0YIgJ3RydWUnICjQuNGB0YLQuNC90LApLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JfQsNGP0LLQutCw0YLQsCDQstC+0LTQuCDQtNC+INCz0YDQtdGI0LrQsCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCX0LDRj9Cy0LrQsNGC0LAg0L3QtSDQstGA0YrRidCwINC00LDQvdC90Lgg0LjQu9C4INGH0LDRgdGC0YLQsCAncGF0aCcgKNC/0YrRgiDQtNC+INGC0YrRgNGB0LXQvdC40Y8g0YDQtdGB0YPRgNGBINC90LAg0YHRitGA0LLRitGA0LApINC1INC90LXQv9GA0LDQstC40LvQvdC+INC30LDQtNCw0LTQtdC90LBcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YDRitGCINC90LAg0YTQsNC50LvQsCDRgdC70LXQtNCy0LAg0LTQsCDQvdC1INC/0YDQtdCy0LjRiNCw0LLQsCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQnNC+0LvRjywg0LLRitCy0LXQtNC10YLQtSDQtNGA0YPQs9Cw0YLQsCDRgdGC0L7QudC90L7RgdGCLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGI0LjRgiDRhNCw0LnQuyDRgdC1INC30LDRgNC10LbQtNCwINC90LAg0YHRitGA0LLRitGA0LAuINCc0L7Qu9GPLCDQuNC30YfQsNC60LDQudGC0LUg0L3Rj9C60L7Qu9C60L4g0YHQtdC60YPQvdC00Lgg0Lgg0YLQvtCz0LDQstCwINC+0L/QuNGC0LLQsNC50YLQtSDQvtGC0L3QvtCy0L4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCX0LDRgNC10LbQtNCw0L3QtS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50Lso0L7QstC1KS4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCW0LXQu9Cw0LXRgtC1INC70Lgg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQv9C40YHQsD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRg9C90LjQutCw0LvQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7Qu9C+0L3QsFwiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtFwiLFxuICByZW1vdmVSb3c6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgNC10LRcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQvdC10LtcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQtdC70LXQvNC10L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0YHQtSDQt9Cw0L/QsNC30LLQsNGCINC90LAg0YHRitGA0LLRitGA0LAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCf0L7RgNCw0LTQuCDQstGK0LfQvdC40LrQvdCw0LvQsCDQs9GA0LXRiNC60LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvdC1INC80L7QttCw0YXQsCDQtNCwINCx0YrQtNCw0YIg0LfQsNC/0LDQt9C10L3QuC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDQsdGP0YXQsCDQt9Cw0L/QsNC30LXQvdC4INGD0YHQv9C10YjQvdC+IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0J3QvtCyINC+0L/QuNGCXCIsXG4gIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwINC4INC+0LHRidC+IHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSDQvtCx0YnQviB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQktC40LUg0LjQt9C/0L7Qt9Cy0LDRhdGC0LUgezB9INC+0YIgezF9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsCDQuCDQvtCx0YnQviB7Mn0g0L7RgiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1IHswfSDQvtGCIHsxfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUg0L7QsdGJ0L4gezB9INC+0YIgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi0JjQt9GH0LjRgdGC0LLQsNC90LVcIixcbiAgY2xlYXJDYXB0aW9uOiBcItCd0LDRh9Cw0LvQvdC+INGB0YrRgdGC0L7Rj9C90LjQtVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGE0LDQudC70LBcIlxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImJnXCJdID0gYnVsZ2FyaWFuU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImJnXCJdID0gXCJCdWxnYXJpYW5cIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vYnVsZ2FyaWFuLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBjYXRhbGFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWfDvGVudFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlVuIGFsdHJlIChkZXNjcmlndWkpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6BnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGkgaGEgY2FwIHDDoGdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGEgbCdlbnF1ZXN0YS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJHcsOgY2llcyBwZXIgY29tcGxldGFyIGwnZW5xdWVzdGEhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTCdlbnF1ZXN0YSBzJ2VzdMOgIGNhcnJlZ2FudCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uYSAuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJTaSB1cyBwbGF1IGNvbnRlc3RpIGxhIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpIHVzIHBsYXUgY29udGVzdGkgbGVzIHByZWd1bnRlcyBkZSBjYWRhIGZpbGVyYS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkwnZXN0aW1hY2nDsyBoYSBkZSBzZXIgbnVtw6hyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgYWxtZW55cyB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtZW55cyBkZSB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtw6lzIGRlIHswfSBpIG1lbnlzIGRlIHsxfSBzw61tYm9scy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaSB1cyBwbGF1IG9tcGxpIGFsbWVueXMgezB9IGZpbGVyZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpIHVzIHBsYXUgc2VsZWNjaW9uaSBhbG1lbnlzIHswfSB2YXJpYW50cy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIG5vIG3DqXMgZGUgezB9IHZhcmlhbnRzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRldSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfSBpIGlndWFsIG8gbWVueXMgZGUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiRWwgJ3swfScgaGEgZGUgc2VyIGlndWFsIG8gbcOpcyBkZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtZW55cyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IHVuIGNvcnJldSBlbGVjdHLDsm5pYyB2w6BsaWQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29swrdsaWNpdHVkIHZhIHRvcm5hciBidWlkYSBkZSBkYXRlcyBvIGxhIHByb3BpZXRhdCAndHJhamVjdMOycmlhJyBubyDDqXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSBtaWRhIGRlIGwnYXJ4aXUgbm8gcG90IGV4Y2VkaXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2kgdXMgcGxhdSBhZmVnaXUgbCdhbHRyYSBlc3RpbWFjacOzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRWwgc2V1IGFyeGl1IHMnZXN0w6AgcHVqYW50LiBTaSB1cyBwbGF1IGVzcGVyaSB1bnMgc2Vnb25zIGkgaW50ZW50ZXUtaG8gZGUgbm91LlwiLFxuICBhZGRSb3c6IFwiQWZlZ2l1IHVuYSBmaWxlcmFcIixcbiAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBmaWxlcmFcIixcbiAgY2hvaWNlc19maXJzdEl0ZW06IFwicHJpbWVyIGFydGljbGVcIixcbiAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlZ29uIGFydGljbGVcIixcbiAgY2hvaWNlc190aGlyZEl0ZW06IFwidGVyY2VyIGFydGljbGVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiRmlsZXJhXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY2FcIl0gPSBjYXRhbGFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImNhXCJdID0gXCJjYXRhbMOgXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2NhdGFsYW4udHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlDFmWVkY2hvesOtXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcbiAgb3RoZXJJdGVtVGV4dDogXCJKaW7DoSBvZHBvdsSbxI8gKG5hcGnFoXRlKVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJQcsWvemt1bXUgbmVvYnNhaHVqZSDFvsOhZG7DqSBvdMOhemt5LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkTEm2t1amVtZSB6YSB2eXBsbsSbbsOtIHByxa96a3VtdSFcIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSBvdMOhemt1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxuICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IG1lbsWhw60gbmVibyByb3ZubyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5hZGF2ZWsgbmV2csOhdGlsIGRhdGEgbmVibyBjZXN0YSBqZSBuZXBsYXRuw6FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcbiAgYWRkUm93OiBcIlDFmWlkYXQgxZnDoWRla1wiLFxuICByZW1vdmVSb3c6IFwiT2RzdHJhbml0XCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3NcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjc1wiXSA9IFwixI1lxaF0aW5hXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2N6ZWNoLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBkYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVGlsYmFnZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVmlkZXJlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGw6ZyZGlnXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlZhbGdmcml0IHN2YXIuLi5cIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkluZ2VuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlbDpmxnIGFsbGVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGFmIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJEZXIgZXIgaW5nZW4gc3lubGlnZSBzcMO4cmdzbcOlbC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJNYW5nZSB0YWsgZm9yIGRpbiBiZXN2YXJlbHNlIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiVm9yZXMgZGF0YSB2aXNlciBhdCBkdSBhbGxlcmVkZSBoYXIgZ2VubmVtZsO4cnQgZGV0dGUgc3DDuHJnZXNrZW1hLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlNww7hyZ2Vza2VtYWV0IGhlbnRlcyBmcmEgc2VydmVyZW4uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiVsOmbGcuLi5cIixcbiAgdmFsdWU6IFwidsOmcmRpXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsZXQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkJlc3ZhciB2ZW5saWdzdCBtaW5kc3Qgw6l0IHNww7hyZ3Ntw6VsLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkJlc3ZhciB2ZW5saWdzdCBzcMO4cmdzbcOlbCBpIGFsbGUgcsOma2tlci5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkFuZ2l2IGV0IHRhbC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJBbmdpdiBtaW5kc3QgezB9IHRlZ24uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUGxlYXNlIGVudGVyIGxlc3MgdGhhbiB7MH0gY2hhcmFjdGVycy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJBbmdpdiBtZXJlIGVuZCB7MH0gb2cgbWluZHJlIGVuZCB7MX0gdGVnbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJVZGZ5bGQgbWluZHN0IHswfSByw6Zra2VyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWw6ZsZyB2ZW5saWdzdCBtaW5kc3QgezB9IHN2YXJtdWxpZ2hlZChlcikuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IGbDpnJyZSB7MH0gc3Zhcm11bGlnaGVkZXIoZXIpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfSBvZyBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIHN0w7hycmUgZW5kIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHNrYWwgdsOmcmUgbGlnIG1lZCBlbGxlciBtaW5kcmUgZW5kIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiQW5naXYgdmVubGlnc3QgZW4gZ3lsZGlnIGUtbWFpbCBhZHJlc3NlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVZHRyeWtrZXQ6IHswfSBza2FsIHJldHVybmVyZSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJGb3Jlc3DDuHJnc2xlbiByZXR1cm5lcmVkZSBmZWpsZW4gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJGb3Jlc3DDuHJnc2xlbiByZXR1cm5lcmVkZSBpbmdlbiBkYXRhIGVsbGVyICdwYXRoJyBwYXJhbWV0ZXJlbiBlciBmb3JrZXJ0XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmlsc3TDuHJyZWxzZW4gbcOlIGlra2Ugb3ZlcnN0aWdlIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFuZ2l2IGVuIHbDpnJkaSBmb3IgZGl0IHZhbGdmcmllIHN2YXIuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJEaW4gZmlsIGJsaXZlciB1cGxvYWRldC4gVmVudCBub2dsZSBzZWt1bmRlciBvZyBwcsO4diBldmVudHVlbHQgaWdlbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiSW5kbMOmc2VyLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVsOmbGcgZmlsKGVyKS4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZpbCBkdSBmamVybmUgZGVuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkRlbm5lIHbDpnJkaSBza2FsIHbDpnJlIHVuaWsuXCIsXG4gIGFkZENvbHVtbjogXCJUaWxmw7hqIGtvbG9ubmVcIixcbiAgYWRkUm93OiBcIlRpbGbDuGogcsOma2tlXCIsXG4gIHJlbW92ZVJvdzogXCJGamVyblwiLFxuICBhZGRQYW5lbDogXCJUaWxmw7hqIG55XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkZqZXJuXCIsXG4gIGNob2ljZXNfSXRlbTogXCJ2YWxnXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb25uZVwiLFxuICBtYXRyaXhfcm93OiBcIlLDpmtrZVwiLFxuICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZXJuZSBibGl2ZXIgZ2VtdCBww6Ugc2VydmVyZW4uLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRlciBvcHN0b2QgZW4gZmVqbCBvZyB2aSBrdW5uZSBpa2tlIGdlbW1lIHJlc3VsdGF0ZXQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlJlc3VsdGF0ZXQgYmxldiBnZW10IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDuHYgaWdlblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIGJydWd0IHswfSBww6UgZGVubmUgc2lkZSBvZyB7MX0gaSBhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciBicnVndCB7MH0gcMOlIGRlbm5lIHNpZGUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiRHUgaGFyIGJydWd0IHswfSBpIGFsdC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IHDDpSBkZW5uZSBzaWRlIG9nIHsyfSBhZiB7M30gaSBhbHQuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gYWYgezF9IGkgYWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuc1wiLFxuICBjbGVhckNhcHRpb246IFwiRmplcm5cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRmplcm4gZGVubmUgZmlsXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGFcIl0gPSBkYW5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZGFcIl0gPSBcImRhbnNrXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcbi8vTW9kaWZpZWQgb24gYmVoYWxmIFJvZWxhbmQgVmVyYmFrZWxcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVmVyemVuZGVuXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFuZGVycywgbmwuXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJHZWVuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVlciBBbGxlc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiR2VhbnR3b29yZCB7MH0vezF9IHZyYWdlblwiLFxuICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgdm9vciBoZXQgaW52dWxsZW4gdmFuIGRlIHZyYWdlbmxpanN0XCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgICBcIk9uemUgZ2VnZXZlbnMgdG9uZW4gYWFuIGRhdCBqZSBkZXplIHZyYWdlbmxpanN0IHJlZWRzIGJlYW50d29vcmQgaGVidC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcbiAgdmFsdWU6IFwid2FhcmRlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiRGl0IGlzIGVlbiB2ZXJlaXN0ZSB2cmFhZ1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJHZWxpZXZlIHRlbiBtaW5zdGUgZWVuIHZyYWFnIHRlIGJlYW50d29vcmRlbi5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkhldCBhbnR3b29yZCBtb2V0IGVlbiBnZXRhbCB6aWpuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVnVsIG1pbnN0ZW5zIHswfSBrYXJha3RlcnMgaW5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2VsZWN0ZWVyIG1pbmltdW0gezB9IGFudHdvb3JkZW5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2VsZWN0ZWVyIG5pZXQgbWVlciBkYW4gezB9IGFudHdvb3JkZW5cIixcbiAgdGV4dE1heExlbmd0aDogXCJHZWxpZXZlIG1pbmRlciBkYW4gezB9IGthcmFrdGVycyBpbiB0ZSB2dWxsZW4uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiR2VsaWV2ZSBtZWVyIGRhbiB7MH0gZW4gbWluZGVyIGRhbiB7MX0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJHZWxpZXZlIHRlbiBtaW5zdGUgezB9IHJpamVuIGluIHRlIHZ1bGxlbi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICAgIFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfSBlbiBrbGVpbmVyIG9mIGdlbGlqayBhYW4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlV3IGFudHdvb3JkICd7MH0nIG1vZXQgZ3JvdGVyIG9mIGdlbGlqayB6aWpuIGFhbiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZ1bCBlZW4gZ2VsZGlnIGUtbWFpbGFkcmVzIGluXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkRlIHVpdGRydWtraW5nOiB7MH0gbW9ldCAnd2FhcicgdGVydWdnZXZlbi5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkRlIHZyYWFnIGtlZXJkZSBlZW4gZm91dCB0ZXJ1ZyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICAgIFwiRGUgdnJhYWcgZ2FmIGVlbiBsZWVnIGFudHdvb3JkIHRlcnVnIG9mIGRlICdwYWQnIGVpZ2Vuc2NoYXAgaXMgbmlldCBjb3JyZWN0XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRGUgZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmQgbWFnIG5pZXQgZ3JvdGVyIHppam4gZGFuIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVnVsIGhldCB2ZWxkICdBbmRlcnMsIG5sLicgaW5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJEZXplIHZyYWFnIHZlcmVpc3Qgw6nDqW4gYW50d29vcmQgcGVyIHJpalwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgICAgXCJVdyBiZXN0YW5kIHdvcmR0IG9wZ2VsYWRlbi4gR2VsaWV2ZSBlbmtlbGUgc2Vjb25kZW4gdGUgd2FjaHRlbiBlbiBvcG5pZXV3IHRlIHByb2JlcmVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJPcGxhZGVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiS2llcyB1dyBiZXN0YW5kKGVuKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiR2VlbiBiZXN0YW5kIGdla296ZW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJXaWwgamUgZGV6ZSBnZWdldmVucyB2ZXJ3aWpkZXJlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXplIHdhYXJkZSBtb2V0IHVuaWVrIHppam4uXCIsXG4gIGFkZENvbHVtbjogXCJWb2VnIGtvbG9tIHRvZVwiLFxuICBhZGRSb3c6IFwiVm9lZyByaWogdG9lXCIsXG4gIHJlbW92ZVJvdzogXCJWZXJ3aWpkZXJcIixcbiAgYWRkUGFuZWw6IFwiTmlldXdlIHRvZXZvZWdlblwiLFxuICByZW1vdmVQYW5lbDogXCJWZXJ3aWpkZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9uZGVyd2VycFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9tXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlqXCIsXG4gIHNhdmluZ0RhdGE6IFwiRGUgcmVzdWx0YXRlbiB3b3JkZW4gYmV3YWFyZCBvcCBkZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVyIHdhcyBlZW4gcHJvYmxlZW0gZW4gd2Uga29uZGVuIGRlIHJlc3VsdGF0ZW4gbmlldCBiZXdhcmVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEZSByZXN1bHRhdGVuIHdlcmRlbiBzdWNjZXN2b2wgYmV3YWFyZCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb2JlZXIgb3BuaWV1d1wiLFxuICB0aW1lck1pbjogXCJtaW5pbXVtXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlUgaGVlZnQgezB9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hIGVuIHsxfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlUgaGVlZnQgezB9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlUgaGVlZnQgaW4gdG90YWFsIHswfSBnZXNwZW5kZWVyZC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBvcCBkZXplIHBhZ2luYSBnZXNwZW5kZWVyZCBlbiB7Mn0gdmFuIHszfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlUgaGVlZnQgezB9IHZhbiB7MX0gZ2VzcGVuZGVlcmQgb3AgZGV6ZSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBpbiBoZXQgdG90YWFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjbGVhckNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJHZWtvemVuIGJlc3RhbmRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVmVyd2lqZGVyIGRlemUgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWVuXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJlbnQgdSB6ZWtlciBkYXQgdSBkZXplIGZpbGUgd2lsdCB2ZXJ3aWpkZXJlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQmVudCB1IHpla2VyIGRhdCB1IGFsIGRlemUgZmlsZXMgd2lsdCB2ZXJ3aWpkZXJlbj9cIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5sXCJdID0gXCJuZWRlcmxhbmRzXCI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZXN0b25pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVGFnYXNpXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJFZGFzaVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiTMO1cGV0YVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQWx1c3RhXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTXV1ICh0w6Rwc3VzdGEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJNaXR0ZSBtaWRhZ2lcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmFsaSBrw7Vpa1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiTGVoZWvDvGxnIHswfS97MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIktpcmplIHswfS97MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlZhc3RhdHVkIHswfSBrw7xzaW11c3QgezF9LXN0XCIsXG4gIGVtcHR5U3VydmV5OiBcIlNlbGxlcyB1dXJpbmd1cyBlaSBvbGUgw7xodGtpIG7DpGh0YXZhdCBsZWhla8O8bGdlIHbDtWkga8O8c2ltdXN0LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFpdMOkaCwgZXQgdmFzdGFzaWQgYW5rZWVkaWxlIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTWVpZSBhbmRtZXRlbCBvbGVkIHNhIHNlbGxlbGUgYW5rZWVkaWxlIGp1YmEgdmFzdGFudWQuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGFlbiBhbmtlZXRpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZhbGkuLi5cIixcbiAgdmFsdWU6IFwidsOkw6RydHVzXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUGFsdW4gdmFzdGEga8O8c2ltdXNlbGUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBhbHVuIHZhc3RhIHbDpGhlbWFsdCDDvGhlbGUga8O8c2ltdXNlbGUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGFsdW4gYW5uYSB2YXN0dXMgaWdhbCByZWFsLlwiLFxuICBudW1lcmljRXJyb3I6IFwiU2VlIHBlYWtzIG9sZW1hIG51bWJyaWxpbmUgdsOkw6RydHVzLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBhbHVuIHNpc2VzdGEgdsOkaGVtYWx0IHswfSB0w6RoZW3DpHJraS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQYWx1biDDpHJhIHNpc2VzdGEgcm9oa2VtIGt1aSB7MH0gdMOkaGVtw6Rya2kuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2lzZXN0YSBwYWx1biB7MH0gLSB7MX0gdMOkaGVtw6Rya2kuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiU2lzZXN0YSBwbGF1biB2w6RoZW1hbHQgezB9IHJpZGEuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBhbHVuIHZhbGkgdsOkaGVtYWx0IHswfSB2YXJpYW50aS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGFsdW4gdmFsaSBrw7VpZ2Ugcm9oa2VtIHswfSB2YXJpYW50aS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJkbmUgdsO1aSBzdXVyZW0ga3VpIHsxfSBqYSB2w7VyZG5lIHbDtWkgdsOkaWtzZW0ga3VpIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJkbmUgdsO1aSBzdXVyZW0ga3VpIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJuZGUgdsO1aSB2w6Rpa3NlbSBrdWkgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJTaXNlc3RhIHBhbHVuIGtvcnJla3RuZSBlLXBvc3RpIGFhZHJlc3MuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmFpbGkgc3V1cnVzIGVpIHRvaGkgw7xsZXRhZGEgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2lzZXN0YSBwYWx1biBtdXUgdmFzdHVzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2ludSBmYWlsIGxhZWIgw7xsZXMuIFBhbHVuIG9vdGEgbcO1bmVkIHNla3VuZGlkIG5pbmcgcHJvb3ZpIHNlZWrDpHJlbCB1dWVzdGkuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxhZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWYWxpIGZhaWwoaWQpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJGYWlsaSBwb2xlIHZhbGl0dWRcIixcbiAgY29uZmlybURlbGV0ZTogXCJLYXMgdGFoYWQga2lyamUga3VzdHV0YWRhP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlNlZSB2w6TDpHJ0dXMgcGVhYiBvbGVtYSB1bmlrYWFsbmUuXCIsXG4gIGFkZENvbHVtbjogXCJMaXNhIHZlZXJnXCIsXG4gIGFkZFJvdzogXCJMaXNhIHJpZGFcIixcbiAgcmVtb3ZlUm93OiBcIkVlbWFsZGFcIixcbiAgYWRkUGFuZWw6IFwiTGlzYSB1dXNcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWVtYWxkYVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlZlZXJnXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlkYVwiLFxuICBzYXZpbmdEYXRhOiBcIlNhbHZlc3RhbiBhbmRtZWQgc2VydmVyaXMuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlRla2tpcyB2aWdhIG5pbmcgbWUgZWkgc2FhbnVkIHZhc3R1c2VpZCBzYWx2ZXN0YWRhLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJWYXN0dXN0ZSBzYWx2ZXN0YW1pbmUgw7VubmVzdHVzIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHJvb3ZpIHV1ZXN0aVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiT2xlZCB2ZWV0bnVkIHswfSBzZWxsZWwgbGVoZWwgbmluZyBrb2trdSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIk9sZWQgdmVldG51ZCB7MH0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9sZWQgdmVldG51ZCB7MH0ga29ra3UuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwgbmluZyB7Mn0gdsO1aW1hbGlrdXN0IHszfSBrb2trdS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiT2xlZCBrdWx1dGFudWQgezB9IHbDtWltYWxpa3VzdCB7MX0gc2VsbGVsIGxlaGVsLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIk9sZWQga3VsdXRhbnVkIHswfSB2w7VpbWFsaWt1c3QgezF9IGtvZ3VhamFzdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlB1aGFzdGFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaSBmYWlsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVlbWFsZGEgc2VlIGZhaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYWhcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkVpXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIk9sZWQgc2Ega2luZGVsLCBldCBzb292aWQgc2VsbGUgZmFpbGkgZWVtYWxkYWRhOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJPbGVkIHNhIGtpbmRlbCwgZXQgc29vdmlkIGVlbWFsZGFkYSBrw7VpayBmYWlsaWQ/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLw7xzaW11c2UgcGVhbGtpcmlcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJldFwiXSA9IGVzdG9uaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImV0XCJdID0gXCJlZXN0aSBrZWVsXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2VzdG9uaWFuLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmaW5uaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkVkZWxsaW5lblwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2V1cmFhdmFcIixcbiAgY29tcGxldGVUZXh0OiBcIlZhbG1pc1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk11dSAoa3V2YWlsZSlcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpdnUgezB9L3sxfVwiLFxuICBlbXB0eVN1cnZleTpcbiAgICBcIlTDpHNzw6Qga3lzZWx5c3PDpCBlaSBvbGUgeWh0w6Rrw6TDpG4gbsOka3l2aWxsw6Qgb2xldmFhIHNpdnVhIHRhaSBreXN5bXlzdMOkLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIktpaXRvcyBreXNlbHl5biB2YXN0YWFtaXNlc3RhIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkt5c2VsecOkIGxhZGF0YWFuIHBhbHZlbGltZWx0YS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpdHNlLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmFzdGFhIGt5c3lteWtzZWVuLCBraWl0b3MuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJBcnZvbiB0dWxlZSBvbGxhIG51bWVlcmluZW4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiT2xlIGh5dsOkIGphIHN5w7Z0w6QgdsOkaGludMOkw6RuIHswfSBtZXJra2nDpC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiT2xlIGh5dsOkIGphIHZhbGl0c2UgdsOkaGludMOkw6RuIHswfSB2YWlodG9laHRvYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiT2xlIGh5dsOkIGphIHZhbGl0c2UgZW5pbnTDpMOkbiB7MH0gdmFpaHRvZWh0b2EuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyB0w6R5dHl5IG9sbGEgZW5lbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezF9IGphIHbDpGhlbW3DpG4gdGFpIHlodMOkIHN1dXJpIGt1aW4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgdMOkeXR5eSBvbGxhIGVuZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHTDpHl0eXkgb2xsYSB2w6RoZW1tw6RuIHRhaSB5aHTDpCBzdXVyaSBrdWluIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiU3nDtnTDpCB2YWxpZGkgc8OkaGvDtnBvc3Rpb3NvaXRlLlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6ICdPbGUgaHl2w6QgamEgc3nDtnTDpCBcIk11dSAoa3V2YWlsZSlcIidcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmlcIl0gPSBmaW5uaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZpXCJdID0gXCJzdW9tYWxhaW5lblwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9maW5uaXNoLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBmcmVuY2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHLDqWPDqWRlbnRcIixcbiAgcGFnZU5leHRUZXh0OiBcIlN1aXZhbnRcIixcbiAgY29tcGxldGVUZXh0OiBcIlRlcm1pbmVyXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21tZW5jZXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBdXRyZSAocHLDqWNpc2VyKVwiLFxuICBub25lSXRlbVRleHQ6IFwiQXVjdW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVG91dCBzw6lsZWN0aW9ubmVyXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdlIHswfSBzdXIgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJFbnJlZ2lzdHJlbWVudCB7MH0gc3VyIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9L3sxfSBxdWVzdGlvbihzKSByw6lwb25kdWUocylcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiSWwgbid5IGEgbmkgcGFnZSB2aXNpYmxlIG5pIHF1ZXN0aW9uIHZpc2libGUgZGFucyBjZSBxdWVzdGlvbm5haXJlXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiTWVyY2kgZCdhdm9pciByw6lwb25kdSBhdSBxdWVzdGlvbm5haXJlICFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJOb3MgZG9ubsOpZXMgaW5kaXF1ZW50IHF1ZSB2b3VzIGF2ZXogZMOpasOgIHJlbXBsaSBjZSBxdWVzdGlvbm5haXJlLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkxlIHF1ZXN0aW9ubmFpcmUgZXN0IGVuIGNvdXJzIGRlIGNoYXJnZW1lbnQuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hvaXNpc3Nlei4uLlwiLFxuICB2YWx1ZTogXCJ2YWxldXJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJMYSByw6lwb25zZSDDoCBjZXR0ZSBxdWVzdGlvbiBlc3Qgb2JsaWdhdG9pcmUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1lcmNpIGRlIHLDqXBvbmRyZSBhdSBtb2lucyDDoCB1bmUgcXVlc3Rpb24uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVG91dGVzIGxlcyBsaWduZXMgc29udCBvYmxpZ2F0b2lyZXNcIixcbiAgbnVtZXJpY0Vycm9yOiBcIkxhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gbm9tYnJlLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBhdSBtb2lucyB7MH0gY2FyYWN0w6hyZXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIG1vaW5zIGRlIHswfSBjYXJhY3TDqHJlcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgZW50cmUgezB9IGV0IHsxfSBjYXJhY3TDqHJlcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNZXJjaSBkZSBjb21wbMOpdGVyIGF1IG1vaW5zIHswfSBsaWduZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgYXUgbWluaW11bSB7MH0gcsOpcG9uc2VzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIGF1IG1heGltdW0gezB9IHLDqXBvbnNlcy5cIixcbiAgbnVtZXJpY01pbk1heDogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIHN1cMOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX0gZXQgaW5mw6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsyfVwiLFxuICBudW1lcmljTWluOiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgc3Vww6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlZvdHJlIHLDqXBvbnNlICd7MH0nIGRvaXQgw6p0cmUgaW5mw6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiTWVyY2kgZCdlbnRyZXIgdW5lIGFkcmVzc2UgbWFpbCB2YWxpZGUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkwnZXhwcmVzc2lvbjogezB9IGRvaXQgcmV0b3VybmVyICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHJlcXXDqnRlIGEgcmVudm95w6kgdW5lIGVycmV1ciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJMYSByZXF1w6p0ZSBhIHJlbnZvecOpIGRlcyBkb25uw6llcyB2aWRlcyBvdSBsYSBwcm9wcmnDqXTDqSAncGF0aCcgZXN0IGluY29ycmVjdGVcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSB0YWlsbGUgZHUgZmljaGllciBuZSBkb2l0IHBhcyBleGPDqWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXJjaSBkZSBwcsOpY2lzZXIgbGUgY2hhbXAgJ0F1dHJlJy5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJWb3RyZSBmaWNoaWVyIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50LiBNZXJjaSBkJ2F0dGVuZHJlIHF1ZWxxdWVzIHNlY29uZGVzIGV0IGRlIHLDqWVzc2F5ZXIuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkNoYXJnZW1lbnQuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJBam91dGVyIGRlcyBmaWNoaWVycy4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiQXVjdW4gZmljaGllciBham91dMOpXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVm91bGV6LXZvdXMgc3VwcHJpbWVyIGNldCBlbnJlZ2lzdHJlbWVudCA/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQ2V0dGUgdmFsZXVyIGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICBhZGRDb2x1bW46IFwiQWpvdXRlciB1bmUgY29sb25uZVwiLFxuICBhZGRSb3c6IFwiQWpvdXRlciB1bmUgbGlnbmVcIixcbiAgcmVtb3ZlUm93OiBcIlN1cHByaW1lclwiLFxuICBhZGRQYW5lbDogXCJBam91dGVyXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlN1cHByaW1lclwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJMaWduZVwiLFxuICBzYXZpbmdEYXRhOiBcIkxlcyByw6lzdWx0YXRzIHNvbnQgZW4gY291cnMgZGUgc2F1dmVnYXJkZSBzdXIgbGUgc2VydmV1ci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVW5lIGVycmV1ciBlc3Qgc3VydmVudWUgZXQgYSBlbXDDqmNow6kgbGEgc2F1dmVnYXJkZSBkZXMgcsOpc3VsdGF0cy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiTGVzIHLDqXN1bHRhdHMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6lzICFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlLDqWVzc2F5ZXJcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciBjZXR0ZSBwYWdlIGV0IHsxfSBhdSB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIGNldHRlIHBhZ2UuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gYXUgdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIHsxfSBzdXIgY2V0dGUgcGFnZSBldCB7Mn0gc3VyIHszfSBhdSB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIHsxfSBzdXIgY2V0dGUgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgezF9IGF1IHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTmV0dG95ZXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlZpZGVyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkFqb3V0ZXIgdW4gZmljaGllclwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJFbmxldmVyIGNlIGZpY2hpZXJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJPdWlcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5vblwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLDinRlcy12b3VzIGNlcnRhaW5zIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGZpY2hpZXIgOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLDinRlcy12b3VzIGNlcnRhaW5zIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXMgbGVzIGZpY2hpZXJzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGl0cmUgZGUgbGEgcXVlc3Rpb25cIlxuXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZyXCJdID0gZnJlbmNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZyXCJdID0gXCJmcmFuw6dhaXNcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBnZW9yZ2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLhg6Phg5nhg5Dhg5xcIixcbiAgcGFnZU5leHRUZXh0OiBcIuGDqOGDlOGDm+GDk+GDlOGDklwiLFxuICBjb21wbGV0ZVRleHQ6IFwi4YOT4YOQ4YOh4YOg4YOj4YOa4YOU4YOR4YOQXCIsXG4gIHByb2dyZXNzVGV4dDogXCLhg5Lhg5Xhg5Thg6Dhg5Phg5ggezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIuGDkOGDoOGDquGDlOGDoOGDl+GDmCDhg5nhg5jhg5fhg67hg5Xhg5Ag4YOQ4YOgIOGDkOGDoOGDmOGDoS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLhg5Lhg5vhg5Dhg5Phg5rhg53hg5Hhg5cg4YOZ4YOY4YOX4YOu4YOV4YOQ4YOg4YOY4YOhIOGDqOGDlOGDleGDoeGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSFcIixcbiAgbG9hZGluZ1N1cnZleTogXCLhg6nhg5Dhg6Lhg5Xhg5jhg6Dhg5fhg5Xhg5Ag4YOh4YOU4YOg4YOV4YOU4YOg4YOY4YOT4YOQ4YOcLi4uXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi4YOh4YOu4YOV4YOQICjhg5Lhg5fhg67hg53hg5Xhg5cg4YOb4YOY4YOj4YOX4YOY4YOX4YOU4YOXKVwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLhg5Dhg6Dhg6nhg5Thg5Xhg5AuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOj4YOe4YOQ4YOh4YOj4YOu4YOU4YOXIOGDmeGDmOGDl+GDruGDleGDkOGDoS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIuGDnuGDkOGDoeGDo+GDruGDmCDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDoOGDmOGDquGDruGDleGDmC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIOGDkOGDoOGDkOGDnOGDkOGDmeGDmuGDlOGDkSB7MH0g4YOh4YOY4YOb4YOR4YOd4YOa4YOdLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDkOGDoOGDkOGDnOGDkOGDmeGDmuGDlOGDkSB7MH0g4YOV4YOQ4YOg4YOY4YOQ4YOc4YOi4YOYLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIOGDkOGDoOGDkOGDo+GDm+GDlOGDouGDlOGDoSB7MH0g4YOV4YOQ4YOg4YOY4YOQ4YOc4YOi4YOYLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg5vhg5Thg6Lhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCwg4YOV4YOY4YOT4YOg4YOUIHsxfSwg4YOT4YOQIOGDnOGDkOGDmeGDmuGDlOGDkeGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDm+GDlOGDouGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDhg6Phg5zhg5Phg5Ag4YOY4YOn4YOd4YOhIOGDnOGDkOGDmeGDmuGDlOGDkeGDmCDhg5Dhg5wg4YOi4YOd4YOa4YOYIOGDleGDmOGDk+GDoOGDlCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg53hg5cg4YOU4YOaLiDhg6Thg53hg6Hhg6Lhg5jhg6Eg4YOg4YOU4YOQ4YOa4YOj4YOg4YOYIOGDm+GDmOGDoeGDkOGDm+GDkOGDoOGDl+GDmC5cIixcbiAgb3RoZXJSZXF1aXJlZEVyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDkOGDleGDoeGDlOGDlyDhg5Xhg5Thg5rhg5ggJ+GDoeGDruGDleGDkCdcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJrYVwiXSA9IGdlb3JnaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImthXCJdID0gXCLhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5hcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ2VvcmdpYW4udHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdlcm1hblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJadXLDvGNrXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJXZWl0ZXJcIixcbiAgY29tcGxldGVUZXh0OiBcIkFic2NobGllw59lblwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJTb25zdGlnZXMgKEJlc2NocmVpYnVuZylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pY2h0c1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJBbGxlIGF1c3fDpGhsZW5cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNlaXRlIHswfSB2b24gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIkVzIGlzdCBrZWluZSBGcmFnZSB2b3JoYW5kZW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRGFua2UsIGRhc3MgU2llIGRpZSBVbWZyYWdlIGFiZ2VzY2hsb3NzZW4gaGFiZW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJXaXIgaGFiZW4gZmVzdGdlc3RlbGx0LCBkYXNzIFNpZSBkaWVzZSBVbWZyYWdlIGJlcmVpdHMgYWJnZXNjaGxvc3NlbiBoYWJlbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJGcmFnZWJvZ2VuIHdpcmQgZ2VsYWRlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJCaXR0ZSBhdXN3w6RobGVuLi4uXCIsXG4gIHZhbHVlOiBcIldlcnRcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgZGllc2UgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBtaW5kZXN0ZW5zIGVpbmUgRnJhZ2UuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIGFsbGUgRnJhZ2VuLlwiLFxuICBudW1lcmljRXJyb3I6IFwiRGVyIFdlcnQgbXVzcyBlaW5lIFphaGwgc2Vpbi5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJCaXR0ZSBnZWJlbiBzaWUgbWluZGVzdGVucyB7MH0gWmVpY2hlbiBlaW4uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiQml0dGUgZ2ViZW4gU2llIG5pY2h0IG1laHIgYWxzIHswfSBaZWljaGVuIGVpbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJCaXR0ZSBnZWJlbiBzaWUgbWluZGVzdGVucyB7MH0gdW5kIG1heGltYWwgezF9IFplaWNoZW4gZWluLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkJpdHRlIG1hY2hlbiBTaWUgaW4gbWluZGVzdGVucyB7MH0gWmVpbGVuIGVpbmUgRWluZ2FiZS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiQml0dGUgd8OkaGxlbiBTaWUgbWluZGVzdGVucyB7MH0gVmFyaWFudGUobikgYXVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBuaWNodCBtZWhyIGFscyB7MH0gVmFyaWFudGUobikgYXVzLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgbXVzcyBncsO2w59lciBvZGVyIGdsZWljaCB7MX0gdW5kIGtsZWluZXIgb2RlciBnbGVpY2ggezJ9IHNlaW5cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgbXVzcyBrbGVpbmVyIG9kZXIgZ2xlaWNoIHsxfSBzZWluXCIsXG4gIGludmFsaWRFbWFpbDogXCJCaXR0ZSBnZWJlbiBTaWUgZWluZSBnw7xsdGlnZSBFLU1haWwtQWRyZXNzZSBlaW4uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkRlciBBdXNkcnVjazogezB9IG11c3MgZGVuIFdlcnQgJ3dhaHInKHRydWUpIHp1csO8Y2tsaWVmZXJuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRGllIEFuZnJhZ2UgbGllZmVydGUgZGVuIGZvbGdlbmRlbiBGZWhsZXIgenVyw7xjayAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkRpZSBBbmZyYWdlIGxpZWZlcnRlIGxlZXJlIERhdGVuIHp1csO8Y2sgb2RlciBkZXIgV2VydCBkZXIgVmFyaWFibGUgJ3BhdGgnIGlzdCBmYWxzY2hcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEaWUgRGF0ZWlncsO2w59lIGRhcmYgezB9IG5pY2h0IMO8YmVyc2NocmVpdGVuLlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQml0dGUgZ2ViZW4gU2llIGRlbiBhbmRlcmVuIFdlcnQgZWluLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiSWhyZSBEYXRlaSB3aXJkIGhvY2hnZWxhZGVuLiBCaXR0ZSB3YXJ0ZW4gU2llIGVpbiBwYWFyIFNla3VuZGVuIHVuZCB2ZXJzdWNoZW4gU2llIGVzIGRhbm4gZXJuZXV0LlwiLFxuICBsb2FkaW5nRmlsZTogXCJXaXJkIGdlbGFkZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJEYXRlaShlbikgYXVzd8OkaGxlbi4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcIldvbGxlbiBTaWUgZGVuIEVpbnRyYWcgbMO2c2NoZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGllc2VyIFdlcnQgbXVzcyBlaW5kZXV0aWcgc2Vpbi5cIixcbiAgYWRkQ29sdW1uOiBcIlNwYWx0ZSBoaW56dWbDvGdlblwiLFxuICBhZGRSb3c6IFwiWmVpbGUgaGluenVmw7xnZW5cIixcbiAgcmVtb3ZlUm93OiBcIkVudGZlcm5lblwiLFxuICBhZGRQYW5lbDogXCJOZXUgaGluenVmw7xnZW5cIixcbiAgcmVtb3ZlUGFuZWw6IFwiRW50ZmVybmVuXCIsXG4gIGNob2ljZXNfSXRlbTogXCJFbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU3BhbHRlXCIsXG4gIG1hdHJpeF9yb3c6IFwiWmVpbGVcIixcbiAgc2F2aW5nRGF0YTogXCJEaWUgRXJnZWJuaXNzZSB3ZXJkZW4gYXVmIGRlbSBTZXJ2ZXIgZ2VzcGVpY2hlcnQuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVzIGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuLiBEaWUgRXJnZWJuaXNzZSBrb25udGVuIG5pY2h0IGdlc3BlaWNoZXJ0IHdlcmRlbi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiRGllIEVyZ2Vibmlzc2Ugd3VyZGVuIGdlc3BlaWNoZXJ0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXRcIixcbiAgdGltZXJNaW46IFwiTWluLlwiLFxuICB0aW1lclNlYzogXCJTZWsuXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiU2llIHdhcmVuIHswfSBhdWYgZGllc2VyIFNlaXRlIHVuZCBpbnNnZXNhbXQgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJTaWUgd2FyZW4gezB9IGF1ZiBkaWVzZXIgU2VpdGUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiU2llIGhhYmVuIGluc2dlc2FtdCB7MH0gYmVuw7Z0aWd0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiU2llIHdhcmVuIHswfSB2b24gezF9IGF1ZiBkaWVzZXIgU2VpdGUgdW5kIGluc2dlc2FtdCB7Mn0gdm9uIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiU2llIHdhcmVuIHswfSB2b24gezF9IGF1ZiBkaWVzZXIgU2VpdGUuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiU2llIGhhYmVuIGluc2dlc2FtdCB7MH0gdm9uIHsxfSBiZW7DtnRpZ3QuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJTYXViZXJcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkxlZXJlblwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJEYXRlaSBsw7ZzY2hlblwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWluXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkRhdGVpIHfDpGhsZW5cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlNpbmQgc2llIHNpY2hlciwgZGFzcyBzaWUgYWxsZSBEYXRlaWVuIGzDtnNjaGVuIG3DtmNodGVuP1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJTaW5kIHNpZSBzaWNoZXIsIGRhc3Mgc2llIGRpZXNlIERhdGVpIGzDtnNjaGVuIG3DtmNodGVuOiB7MH0/XCIsXG4gIG5vRmlsZUNob3NlbjogXCJLZWluZSBEYXRlaSBhdXNnZXfDpGhsdFwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiRWludHJhZyB7MH0gdm9uIHsxfVwiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiRnJhZ2V0aXRlbFwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiezB9IHZvbiB7MX0gRnJhZ2VuIGJlYW50d29ydGV0XCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRlXCJdID0gZ2VybWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImRlXCJdID0gXCJkZXV0c2NoXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsIi8vQ3JlYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYWdlbG9zcGFuYWdpb3Rha2lzXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdyZWVrU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIs6gz4HOv863zrPOv8+NzrzOtc69zr9cIixcbiAgcGFnZU5leHRUZXh0OiBcIs6Vz4DPjM68zrXOvc6/XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLOn867zr/Ous67zq7Pgc+Jz4POt1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIs6GzrvOu86/ICjPgM6xz4HOsc66zrHOu8+OIM60zrnOtc+FzrrPgc65zr3Or8+Dz4TOtSlcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIs6jzrXOu86vzrTOsSB7MH0gzrHPgM+MIHsxfVwiLFxuICBlbXB0eVN1cnZleTpcbiAgICBcIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOus6xzrzOr86xIM6/z4HOsc+Ezq4gz4POtc67zq/OtM6xIM6uIM6/z4HOsc+Ezq4gzrXPgc+Oz4TOt8+Dzrcgz4POtSDOsc+Fz4TPjCDPhM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6XG4gICAgXCLOlc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUgzrPOuc6xIM+EzrfOvSDPg8+FzrzPgM67zq7Pgc+Jz4POtyDOsc+Fz4TOv8+NIM+Ezr/PhSDOtc+Bz4nPhM63zrzOsc+Ezr/Ou86/zrPOr86/z4UhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwizqTOvyDOtc+Bz4nPhM63zrzOsc+Ezr/Ou8+MzrPOuc6/IM+Gzr/Pgc+Ez47Ovc61z4TOsc65IM6xz4DOvyDPhM6/IM60zrnOsc66zr/OvM65z4PPhM6uLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIs6Vz4DOuc67zq3Ovs+EzrUuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM6xz4DOsc69z4TOrs+Dz4TOtSDPg8+EzrfOvSDOtc+Bz47PhM63z4POty5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjpcbiAgICBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOuc+CIM61z4HPic+Ezq7Pg861zrnPgiDPg861IM+MzrvOtc+CIM+EzrnPgiDOs8+BzrHOvM68zq3Pgi5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIs6XIM+EzrnOvM6uIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrHPgc65zrjOvM63z4TOuc66zq4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+Dz43OvM6yzr/Ou86xLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDOs8+BzrHOvM68zq3Pgi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+AzrHPgc6xzrvOu86xzrPOrc+CLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgz4zPh865IM+AzrHPgc6xz4DOrM69z4kgzrHPgM6/IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIs6kzr8gJ3swfScgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM6vz4POvyDOriDOvM61zrPOsc67z43PhM61z4HOvyDOsc+Azr8gz4TOvyB7MX0gzrrOsc65IM6vz4POvyDOriDOvM65zrrPgc+Mz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrXOs86xzrvPjc+EzrXPgc6/IM6uIM65z4POvyDOvM61IM+Ezr8gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwizqTOvyAnezB9JyDPgM+Bzq3PgM61zrkgzr3OsSDOtc6vzr3Osc65IM68zrnOus+Bz4zPhM61z4HOvyDOriDOr8+Dzr8gzrHPgM6/IM+Ezr8gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzrzOuc6xIM6xz4DOv860zrXOus+Ezq4gzrTOuc61z43OuM+Fzr3Pg863IGUtbWFpbC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgz4PPhs6szrvOvM6xICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwizpcgzrHOr8+EzrfPg863IM61z4DOrc+Dz4TPgc61z4jOtSDOus61zr3OrCDOtM61zrTOv868zq3Ovc6xIM6uIM63IM65zrTOuc+Mz4TOt8+EzrEgJ868zr/Ovc6/z4DOrM+EzrkvcGF0aCcgzrXOr869zrHOuSDOtc+Dz4bOsc67zrzOrc69zrdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLOpM6/IM68zq3Os861zrjOv8+CIM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDPhc+AzrXPgc6yzrHOr869zrXOuSDPhM6xIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gz4PPhc68z4DOu863z4HPjs+Dz4TOtSDPhM63zr0gz4TOuc68zq4gzrPOuc6xIM+Ezr8gz4DOtc60zq/OvyAnzqzOu867zr8nLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwizqTOvyDOsc+Bz4fOtc6vzr8gz4POsc+CIM6xzr3Otc6yzrHOr869zrXOuS4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtSDOus6xz4DOv865zrEgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xIM66zrHOuSDOtM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwuXCIsXG4gIGFkZFJvdzogXCLOoM+Bzr/Pg864zq7Ous63IM6zz4HOsc68zrzOrs+CXCIsXG4gIHJlbW92ZVJvdzogXCLOkc+GzrHOr8+BzrXPg863XCJcbn07XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImdyXCJdID0gZ3JlZWtTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZ3JcIl0gPSBcIs61zrvOu863zr3Ouc66zqxcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ3JlZWsudHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGhlYnJld1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLXkNeX15XXqNeUXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLXp9eT15nXnteUXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLXodeZ15XXnVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi15PXoyB7MX0g157XqteV15ogezB9XCIsXG4gIGVtcHR5U3VydmV5OiBcIteQ15nXnyDXqdeQ15zXldeqXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi16rXldeT15Qg16LXnCDXnteZ15zXldeZINeU16nXkNec15XXnyFcIixcbiAgbG9hZGluZ1N1cnZleTogXCLXmNei15nXoNeUINee15TXqdeo16ouLi5cIixcbiAgb3RoZXJJdGVtVGV4dDogXCLXkNeX16ggKNeg15Ag15zXqteQ16gpXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIteR15fXqC4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIteQ16DXkCDXlNep15Eg16LXnCDXlNep15DXnNeUXCIsXG4gIG51bWVyaWNFcnJvcjogXCLXlNeq16nXldeR15Qg16bXqNeZ15vXlCDXnNeU15nXldeqINee16HXpNeoLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIteU15bXnyDXnNek15fXldeqIHswfSDXqteV15XXmdedLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLXkdeX16gg15zXpNeX15XXqiB7MH0g15DXpNep16jXldeZ15XXqi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi15HXl9eoINei15MgezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug15LXk9eV15wg154gezF9LCDXldep15XXldeUINecLSB7Mn0g15DXlSDXpNeX15XXqiDXni0ge319XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg15fXmdeZ15Eg15zXlNeZ15XXqiDXqdeV15XXlCDXkNeVINeS15PXldecINeeIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINeX15nXmdeRINec15TXmdeV16og16nXldeV15Qg15DXlSDXp9eY158g154gezF9XCIsXG4gIGludmFsaWRFbWFpbDogJ9eU15bXnyDXm9eq15XXkdeqINeT15XXkFwi15wg15fXlden15nXqi4nLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6ICfXoNeQINec15TXlteZ158g16DXqteV16DXmdedINeR16nXk9eUIFwi15DXl9eoXCInXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhlXCJdID0gaGVicmV3U3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImhlXCJdID0gXCLXoteR16jXmdeqXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2hlYnJldy50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaHVuZ2FyaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlZpc3N6YVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVG92w6FiYlwiLFxuICBjb21wbGV0ZVRleHQ6IFwiS8Opc3pcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJFZ3nDqWIgKGFkamEgbWVnKVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiezB9Li97MX0gb2xkYWxcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiS8O2c3rDtm5qw7xrLCBob2d5IGtpdMO2bHTDtnR0ZSBmZWxtw6lyw6lzw7xua2V0IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIk3DoXIga2l0w7ZsdMO2dHRlIGEgZmVsbcOpcsOpc3QuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRmVsbcOpcsOpcyBiZXTDtmx0w6lzZS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6FsYXNzem9uLi4uXCIsXG4gIHZhbHVlOiBcIsOpcnTDqWtcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJLw6lyasO8aywgdsOhbGFzem9samEgbWVnIGV6dCBhIGvDqXJkw6lzdCFcIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJLw6lyasO8ayBhZGpvbiB2w6FsYXN6dCBtaW5kZW4gc29yYmFuIVwiLFxuICBudW1lcmljRXJyb3I6IFwiQXogw6lydMOpayBzesOhbSBrZWxsLCBob2d5IGxlZ3llbiFcIixcbiAgdGV4dE1pbkxlbmd0aDogXCJBZGpvbiBtZWcgbGVnYWzDoWJiIHswfSBrYXJha3RlcnQhXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTGVnZmVsamViYiB7MH0ga2FyYWt0ZXJ0IGFkam9uIG1lZyFcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJBZGpvbiBtZWcgbGVnYWzDoWJiIHswfSwgZGUgbGVnZmVsamViYiB7MX0ga2FyYWt0ZXJ0IVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlTDtmx0c8O2biBraSBtaW5pbXVtIHswfSBzb3J0IVwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWw6FsYXNzem9uIGtpIGxlZ2Fsw6FiYiB7MH0gbGVoZXTFkXPDqWdldCFcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTmUgdsOhbGFzc3pvbiB0w7ZiYmV0LCBtaW50IHswfSBsZWhldMWRc8OpZyFcIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGxlZ3llbiBuYWd5b2JiLCB2YWd5IGVneWVubMWRLCBtaW50IHsxfSDDqXMga2lzZWJiLCB2YWd5IGVneWVubMWRLCBtaW50IHsyfSFcIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBsZWd5ZW4gbGVnYWzDoWJiIHsxfSFcIixcbiAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgbmUgbGVneWVuIG5hZ3lvYmIsIG1pbnQgezF9IVwiLFxuICBpbnZhbGlkRW1haWw6IFwiQWRqb24gbWVnIGVneSB2YWzDs3MgZW1haWwgY8OtbWV0IVwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQSBsZWvDqXJkZXrDqXMgaGliw6F2YWwgdMOpcnQgdmlzc3phOiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkEgbGVrw6lyZGV6w6lzIMO8cmVzIGFkYXR0YWwgdMOpcnQgdmlzc3phLCB2YWd5IGEgJ3BhdGgnIHBhcmFtw6l0ZXIgaGVseXRlbGVuLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIkEgbcOpcmV0IG5lbSBsZWhldCBuYWd5b2JiLCBtaW50IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkFkamEgbWVnIGF6IGVnecOpYiDDqXJ0w6lrZXQhXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGZWx0w7ZsdMOpcyBmb2x5YW1hdGJhbi4gVsOhcmpvbiBww6FyIG3DoXNvZHBlcmNldCwgbWFqZCBwcsOzYsOhbGphIMO6anJhLlwiLFxuICBjb25maXJtRGVsZXRlOiBcIlTDtnJsaSBlenQgYSByZWtvcmRvdD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJBeiDDqXJ0w6lrbmVrIGVneWVkaW5layBrZWxsIGxlbm5pZS5cIixcbiAgYWRkUm93OiBcIlNvciBob3p6w6FhZMOhc2FcIixcbiAgcmVtb3ZlUm93OiBcIkVsdMOhdm9sw610w6FzXCIsXG4gIGFkZFBhbmVsOiBcIsOaaiBob3p6w6FhZMOhc2FcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWx0w6F2b2zDrXTDoXNcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJPc3psb3BcIixcbiAgbWF0cml4X3JvdzogXCJTb3JcIixcbiAgc2F2aW5nRGF0YTogXCJFcmVkbcOpbnkgbWVudMOpc2UgYSBzemVydmVycmUuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVneSBoaWJhIGZvbHl0w6FuIG5lbSB0dWR0dWsgZWxtZW50ZW5pIGF6IGVyZWRtw6lueXQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkVyZWRtw6lueSBzaWtlcmVzZW4gbWVudHZlIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDs2LDoWxqYSDDumpyYVwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImh1XCJdID0gaHVuZ2FyaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImh1XCJdID0gXCJtYWd5YXJcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVGlsYmFrYVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiw4FmcmFtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJMb2tpw7BcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJIaW5uIChza8O9cmluZylcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlPDrcOwYSB7MH0gb2YgezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIsOeYcOwIGVyIGVuZ2lubiBzw63DsGEgZcOwYSBzcHVybmluZ2FyIMOtIMO+ZXNzYXJpIGvDtm5udW4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGFrayBmeXJpciBhw7AgZnlsbGphIMO6dCDDvmVzc2Ega8O2bm51biFcIixcbiAgbG9hZGluZ1N1cnZleTogXCJLw7ZubnVuaW4gZXIgYcOwIGhsYcOwYS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWZWxkdS4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIlZpbnNhbWxlZ2FzdCBzdmFyacOwIHNwdXJuaW5ndW5uaS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJWaW5zYW1sZWdhc3Qgc3ZhcmnDsCBzcHVybmluZ3VtIMOtIMO2bGx1bSByw7bDsHVtLlwiLFxuICBudW1lcmljRXJyb3I6IFwiw55ldHRhIGdpbGRpIHZlcsOwdXIgYcOwIHZlcmEgdGFsYS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLDnmHDsCDDpnR0aSBhw7AgdmVyYSBtaW5uc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIG1lc3QgezB9IHTDoWtuLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIGZsZWlyaSBlbiB7MH0gb2cgZsOmcnJpIGVuIHsxfSB0w6Frbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWaW5zYW1sZWdhc3QgZnlsbGnDsCDDunIgYcOwIG1pbm5zdGEga29zdGkgezB9IHJhw7Bpci5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmluc2FtbGVnYXN0IHZlbGppw7AgYcOwIG1pbm5zdGEga29zdGkgezB9IG3Dtmd1bGVpa2EuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZpbnNhbWxlZ2FzdCB2ZWxqacOwIGVra2kgZmxlaXJpIGVuIHswfSBtw7ZndWxlaWthLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWVpcmEgZW4gZcOwYSBqYWZudCBvZyB7MX0gbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJ7MH0nIMOmdHRpIGHDsCB2ZXJhIG1laXJhIGVuIGXDsGEgamFmbnQgb2cgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgw6Z0dGkgYcOwIHZlcmEgbWlubmEgZW4gZcOwYSBqYWZudCBvZyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZpbnNhbWxlZ2FzdCBzbMOhacOwIGlubiBnaWx0IG5ldGZhbmcuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJCZWnDsG5pbm4gc2tpbGHDsGkgZWZ0aXJmYXJhbmFkaSB2aWxsdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJCZWnDsG5pbm5nIHNraWxhw7BpIGVuZ3VtIGfDtmdudW0gZcOwYSBzbMOzw7Bpbm4gdmFyIHLDtm5nXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiU2tyw6Fpbm4gc2thbCBla2tpIHZlcmEgc3TDpnJyaSBlbiB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWaW5hbWxlZ2FzdCBmeWxsacOwIMO6dCBoaXR0IGdpbGRpw7AuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTa3LDoWlubiDDvsOtbiB2YXIgc2VuZC4gVmluc2FtbGVnYXN0IGLDrcOwacOwIMOtIG5va2tyYXIgc2Vrw7puZHVyIG9nIHJleW5pw7AgYWZ0dXIuXCIsXG4gIGFkZFJvdzogXCJCw6Z0YSB2acOwIHLDtsOwXCIsXG4gIHJlbW92ZVJvdzogXCJGamFybMOmZ2phXCIsXG4gIGNob2ljZXNfZmlyc3RJdGVtOiBcImZ5cnN0aSBobHV0dXJcIixcbiAgY2hvaWNlc19zZWNvbmRJdGVtOiBcImFubmFyIGhsdXR1clwiLFxuICBjaG9pY2VzX3RoaXJkSXRlbTogXCLDvnJpw7BqaSBobHV0dXJcIixcbiAgbWF0cml4X2NvbHVtbjogXCJEw6Fsa3VyXCIsXG4gIG1hdHJpeF9yb3c6IFwiUsO2w7BcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpc1wiXSA9IGljZWxhbmRpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJpc1wiXSA9IFwiw61zbGVuc2thXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2ljZWxhbmRpYy50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaW5kb25lc2lhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJTZWJlbHVtbnlhXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWxhbmp1dG55YVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiU2VsZXNhaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiTXVsYWlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJMYWlubnlhIChqZWxhc2thbilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIlRpZGFrIEFkYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJQaWxpaCBTZW11YVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiSGFsYW1hbiB7MH0gZGFyaSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGlkYWsgYWRhIGhhbGFtYW4gYXRhdSBwZXJ0YW55YWFuIGRhbGFtIHN1cnZlaS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJUZXJpbWEga2FzaWggdGVsYWggbWVueWVsZXNhaWthbiBzdXJ2ZWkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJDYXRhdGFuIGthbWkgbWVudW5qdWtrYW4gYmFod2EgQW5kYSB0ZWxhaCBtZW55ZWxlc2Fpa2FuIHN1cnZlaSBpbmkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTWVtdWF0IHN1cnZlaS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQaWxpaC4uLlwiLFxuICB2YWx1ZTogXCJuaWxhaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIGphd2FiIHBlcnRhbnlhYW4gYmVyaWt1dC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiU2lsYWhrYW4gamF3YWIgc2V0aWRha255YSBzYXR1IHBldGFueWFhbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJTaWxhaGthbiBqYXdhYiBwZXJ0YW55YWFuIHBhZGEgc2VtdWEgYmFyaXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJOaWxhaSBoYXJ1cyBiZXJ1cGEgYW5na2EuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4gc2V0aWRha255YSB7MH0ga2FyYWt0ZXIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2lsYWhrYW4gbWFzdWtrYW4ga3VyYW5nIHswfSBrYXJha3Rlci5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQU2lsYWhrYW4gbWFzdWtrYW4gbGViaWggZGFyaSB7MH0gZGFuIGt1cmFuZyBkYXJpIHsxfSBrYXJha3Rlci5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaWxhaGthbiBpc2kgc2V0aWRha255YSB7MH0gYmFyaXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpbGFoa2FuIHBpbGloIHNldGlkYWtueWEgezB9IHZhcmlhbi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2lsYWhrYW4gcGlsaWggdGlkYWsgbGViaWggZGFyaSB7MH0gdmFyaWFuLlwiLFxuICBudW1lcmljTWluTWF4OiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggZGFyaSB7MX0gZGFuIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUga3VyYW5nIGRhcmkgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBsZWJpaCBkYXJpIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUga3VyYW5nIGRhcmkgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJTaWxhaGthbiBtYXN1a2thbiBlLW1haWwgeWFuZyBiZW5hci5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRWtzcHJlc2k6IHswfSBoYXJ1cyBtZW5nZW1iYWxpa2FuICdiZW5hcicuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJQZXJtaW50YWFuIG1lbmdlbWJhbGlrYW4ga2VzYWxhaGFuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBlcm1pbnRhYW4gbWVuZ2VtYmFsaWthbiBkYXRhIGtvc29uZyBhdGF1IHByb3BlcnRpICdwYXRoJyBzYWxhaC5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJVa3VyYW4gYmVya2FzIHRpZGFrIGJvbGVoIG1lbGViaWhpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlNpbGFoa2FuIG1hc3Vra2FuIG5pbGFpIGxhaW5ubnlhLlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIkJlcmthcyBBbmRhIHNlZGFuZyBkaXVuZ2dhaC4gU2lsYWhrYW4gdHVuZ2d1IGJlYmVyYXBhIHNhYXQgYXRhdSBjb2JhIGxhZ2kuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIk1lbXVhdC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlBpbGloIGJlcmthcy4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcIkFwYWthaCBBbmRhIGluZ2luIG1lbmdoYXB1cyBjYXRhdGFuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIk5pbGFpIGhhcnVzIHVuaWsuXCIsXG4gIGFkZENvbHVtbjogXCJUYW1iYWgga29sb21cIixcbiAgYWRkUm93OiBcIlRhbWJhaCBiYXJpc1wiLFxuICByZW1vdmVSb3c6IFwiSGFwdXNcIixcbiAgYWRkUGFuZWw6IFwiVGFtYmFoIGJhcnVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiSGFwdXNcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2xvbVwiLFxuICBtYXRyaXhfcm93OiBcIkJhcmlzXCIsXG4gIHNhdmluZ0RhdGE6IFwiSGFzaWwgc2VkYW5nIGRpc2ltcGFuIHBhZGEgc2VydmVyLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJLZXNhbGFoYW4gdGVyamFkaSBkYW4ga2FtaSB0aWRhayBkYXBhdCBtZW55aW1wYW4gaGFzaWwuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkhhc2lsIHRlbGFoIHN1a3NlcyBkaXNpbXBhbiFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkNvYmEgbGFnaVwiLFxuICB0aW1lck1pbjogXCJtZW5pdFwiLFxuICB0aW1lclNlYzogXCJkZXRpa1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHBhZGEgaGFsYW1hbiBpbmkuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHNlY2FyYSBrZXNlbHVydWhhbi5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBkYXJpIHsxfSBwYWRhIGhhbGFtYW4gaW5pIGRhbiB7Mn0gZGFyaSB7M30gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gZGFyaSB7MX0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQmVyc2loa2FuXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJCZXJzaWhrYW5cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiSGFwdXMgYmVya2FzIGluaVwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImlkXCJdID0gaW5kb25lc2lhblN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJpZFwiXSA9IFwiQmFoYXNhIEluZG9uZXNpYVwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9pbmRvbmVzaWFuLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBpdGFsaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZWNlZGVudGVcIixcbiAgcGFnZU5leHRUZXh0OiBcIlN1Y2Nlc3Npdm9cIixcbiAgY29tcGxldGVUZXh0OiBcIlNhbHZhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJJbml6aW9cIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbHRybyAoZGVzY3JpdmkpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IGRpIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJOb24gY2kgc29ubyBwYWdpbmUgbyBkb21hbmRlIHZpc2liaWxpIG5lbCBxdWVzdGlvbmFyaW8uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhemllIHBlciBhdmVyIGNvbXBsZXRhdG8gaWwgcXVlc3Rpb25hcmlvIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlwiSSBub3N0cmkgcmVjb3JkcyBtb3N0cmFubyBjaGUgaGFpIGdpw6AgY29tcGxldGF0byBxdWVzdG8gcXVlc3Rpb25hcmlvLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkNhcmljYW1lbnRvIGRlbCBxdWVzdGlvbmFyaW8gaW4gY29yc28uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2NlZ2xpLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yZVwiLFxuICByZXF1aXJlZEVycm9yOiBcIkNhbXBvIG9iYmxpZ2F0b3Jpb1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQZXIgRmF2b3JlLCByaXNwb25kaSBhZCBhbG1lbm8gdW5hIGRvbWFuZGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQ29tcGxldGFyZSB0dXR0ZSBsZSByaWdoZVwiLFxuICBudW1lcmljRXJyb3I6IFwiSWwgdmFsb3JlIGRldmUgZXNzZXJlIG51bWVyaWNvXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiSW5zZXJpcmUgYWxtZW5vIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1heExlbmd0aDogXCJMdW5naGV6emEgbWFzc2ltYSBjb25zZW50aXRhIHswfSBjYXJhdHRlcmlcIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIkluc2VyaXJlIHVuYSBzdHJpbmdhIGNvbiBtaW5pbW8gezB9IGUgbWFzc2ltbyB7MX0gY2FyYXR0ZXJpXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiQ29tcGxldGFyZSBhbG1lbm8gezB9IHJpZ2hlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBhbG1lbm8gezB9IHZhcmlhbnRpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlemlvbmFyZSBtYXNzaW1vIHswfSB2YXJpYW50aS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfSBlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIHN1cGVyaW9yZSBhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGRldmUgZXNzZXJlIHVndWFsZSBvIGluZmVyaW9yZSBhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiSW5zZXJpcmUgaW5kaXJpenpvIG1haWwgdmFsaWRvXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSByaWNoaWVzdGEgaGEgcmlzcG9zdG8gY29uIHVuIGVycm9yZSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkxhIHJpY2hpZXN0YSBoYSByaXNwb3N0byBudWxsIG9wcHVyZSBpbCBwZXJjb3JzbyBub24gw6ggY29ycmV0dG9cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJJbCBmaWxlIG5vbiBwdcOyIGVjY2VkZXJlIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiSW5zZXJpcmUgaWwgdmFsb3JlICdhbHRybydcIixcbiAgdXBsb2FkaW5nRmlsZTogXCJGaWxlIGluIGNhcmljYW1lbnRvLiBBdHRlbmRpIGFsY3VuaSBzZWNvbmRpIGUgcmlwcm92YVwiLFxuICBsb2FkaW5nRmlsZTogXCJDYXJpY2FtZW50by4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlNlbGV6aW9uYXJlIGZpbGUocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lc3N1biBmaWxlIHNlbGV6aW9uYXRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSBpbCByZWNvcmQ/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiUXVlc3RvIHZhbG9yZSBkZXZlIGVzc2VyZSB1bml2b2NvLlwiLFxuICBhZGRSb3c6IFwiQWdnaXVuZ2kgcmlnYVwiLFxuICByZW1vdmVSb3c6IFwiUmltdW92aSByaWdhXCIsXG4gIGFkZFBhbmVsOiBcIkFnZ2l1bmdpIHJpZ2FcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWxpbWluYVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiRWxlbWVudG9cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvbm5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlnYVwiLFxuICBzYXZpbmdEYXRhOiBcIlNhbHZhdGFnZ2lvIGRhdGkgc3VsIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiU2kgw6ggdmVyaWZpY2F0byB1biBlcnJvcmUgZSBub24gw6ggc3RhdG8gcG9zc2liaWxlIHNhbHZhcmUgaSByaXN1bHRhdGkuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkkgcmlzdWx0YXRpIHNvbm8gc3RhdGkgc2FsdmF0aSBjb24gc3VjY2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJSaXByb3ZhXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJIYWkgaW1waWVnYXRvIHswfSBzdSBxdWVzdGEgcGFnaW5hIGUgezF9IGluIHRvdGFsZS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiSGFpIGltcGllZ2F0byB7MH0gc3UgcXVlc3RhIHBhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJIYWkgaW1waWVnYXRvIHswfSBpbiB0b3RhbGUuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gc3UgcXVlc3RhIHBhZ2luYSBlIHsyfSBkaSB7M30gaW4gdG90YWxlLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gc3UgcXVlc3RhIHBhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gaW4gdG90YWxlLlwiLFxuICBjbGVhbkNhcHRpb246IFwiUHVsaXNjaVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIHF1ZXN0byBmaWxlOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIHR1dHRpIGkgZmlsZXM/XCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaXRcIl0gPSBpdGFsaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIml0XCJdID0gXCJpdGFsaWFub1wiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9pdGFsaWFuLnRzIiwiLy8gVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcclxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCB2YXIgamFwYW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xyXG4gIHBhZ2VQcmV2VGV4dDogXCLliY3jga5cIixcclxuICBwYWdlTmV4dFRleHQ6IFwi5qyh44G4XCIsXHJcbiAgY29tcGxldGVUZXh0OiBcIuWujOS6hlwiLFxyXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLjgrnjgr/jg7zjg4hcIixcclxuICBvdGhlckl0ZW1UZXh0OiBcIuOBneOBruS7lu+8iOiqrOaYju+8iVwiLFxyXG4gIG5vbmVJdGVtVGV4dDogXCLjgarjgZdcIixcclxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLjgZnjgbnjgabpgbjmip5cIixcclxuICBwcm9ncmVzc1RleHQ6IFwiezB9L3sxfemggVwiLFxyXG4gIGVtcHR5U3VydmV5OiBcIuOBk+OBruiqv+afu+OBq+ihqOekuuOBp+OBjeOCi+ODmuODvOOCuOOChOizquWVj+OBr+OBguOCiuOBvuOBm+OCk1wiLFxyXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi6Kq/5p+744KS5a6M5LqG44GX44Gm44GP44KM44Gm44GC44KK44GM44Go44GG44GU44GW44GE44G+44GX44GfXCIsXHJcbiAgbG9hZGluZ1N1cnZleTogXCLoqr/mn7vjgpLjg4Djgqbjg7Pjg63jg7zjg4nkuK1cIixcclxuICBvcHRpb25zQ2FwdGlvbjogXCLpgbjmip5cIixcclxuICByZXF1aXJlZEVycm9yOiBcIuizquWVj+OBq+OBiuetlOOBiOS4i+OBleOBhFwiLFxyXG4gIG51bWVyaWNFcnJvcjogXCLmlbDlrZfjgafjgZToqJjlhaXkuIvjgZXjgYRcIixcclxuICB0ZXh0TWluTGVuZ3RoOiBcInswfSDmloflrZfku6XkuIrjgaflhaXlipvjgZfjgabkuIvjgZXjgYRcIixcclxuICBtaW5Sb3dDb3VudEVycm9yOiBcInswfeihjOS7peS4iuOBp+WFpeWKm+OBl+OBpuS4i+OBleOBhFwiLFxyXG4gIG1pblNlbGVjdEVycm9yOiBcInswfeeorumhnuS7peS4iuOCkumBuOaKnuOBl+OBpuS4i+OBleOBhFwiLFxyXG4gIG51bWVyaWNNaW46IFwiJ3swfScg44Gv5ZCM562J44GLezF944KI44KK5aSn44GN44GP44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTXCIsXHJcbiAgbnVtZXJpY01heDogXCInezB9JyDjga/lkIznrYnjgYt7MX3jgojjgorlsI/jgZXjgY/jgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpNcIixcclxuICBpbnZhbGlkRW1haWw6IFwi5pyJ5Yq544Gq44Oh44O844Or44Ki44OJ44Os44K544KS44GU6KiY5YWl5LiL44GV44GEXCIsXHJcbiAgZXhjZWVkTWF4U2l6ZTogXCLjg5XjgqHjgqTjg6vjga7jgrXjgqTjgrrjga97MH3jgpLotoXjgYjjgabjga/jgYTjgZHjgb7jgZvjgpNcIixcclxuICB1cGxvYWRpbmdGaWxlOlxyXG4gICAgXCLjg5XjgqHjgqTjg6vjgpLjgqLjg4Pjg5fjg63jg7zjg4nkuK3jgafjgZnjgILjgZfjgbDjgonjgY/jgZfjgabjgYvjgonlho3luqbjgYroqabjgZfkuIvjgZXjgYRcIixcclxuICBsb2FkaW5nRmlsZTogXCLoqq3jgb/ovrzjgb/kuK1cIixcclxuICBjaG9vc2VGaWxlOiBcIuODleOCoeOCpOODq+OCkumBuOaKnlwiLFxyXG4gIGNsZWFuQ2FwdGlvbjogXCLliYrpmaRcIixcclxuICBjbGVhckNhcHRpb246IFwi56m655m9XCIsXHJcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi44GT44Gu44OV44Kh44Kk44Or44KS5YmK6ZmkXCJcclxufTtcclxuXHJcbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImphXCJdID0gamFwYW5lc2VTdXJ2ZXlTdHJpbmdzO1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJqYVwiXSA9IFwi5pel5pys6KqeXCI7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vamFwYW5lc2UudHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGtvcmVhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLsnbTsoIRcIixcbiAgcGFnZU5leHRUZXh0OiBcIuuLpOydjFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi7JmE66OMXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLsi5zsnpFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLquLDtg4Ao7ISk66qFKVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi7Y6Y7J207KeAIHsxfSDspJEgezB9XCIsXG4gIGVtcHR5U3VydmV5OiBcIuyEpOusuOyngOyXkCDrs7Tsl6zsp4DripQg7Y6Y7J207KeA64KYIOyniOusuOydtCDsl4bsirXri4jri6RcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLshKTrrLgg7KGw7IKs66W8IOyZhOujjO2VtCDso7zshZTshJwg6rCQ7IKs7ZWp64uI64ukIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuq4sOuhneyXkCDrlLDrpbTrqbQg7J2066+4IOyEpOusuCDsobDsgqzrpbwg66eI7LmY7IWo7Iq164uI64ukLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuyEpOusuOyhsOyCrOqwgCDroZzrk5zspJHsnoXri4jri6QuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi7ISg7YOd7ZWY7Iut7Iuc7JikLi4uXCIsXG4gIHZhbHVlOiBcIuqwklwiLFxuICByZXF1aXJlZEVycm9yOiBcIuyniOusuOyXkCDri7XtlZjsi5zsmKQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIu2VmOuCmCDsnbTsg4HsnZgg7KeI66y47JeQIOuLte2VmOyLreyLnOyYpC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLrqqjrk6Ag7ZaJ7JeQIOyeiOuKlCDsp4jrrLjsl5Ag64u17ZWY7Iut7Iuc7JikLlwiLFxuICBudW1lcmljRXJyb3I6IFwi6rCS7J2AIOyIq+yekOyXrOyVvCDtlanri4jri6QuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi64u167OA7J2YIOq4uOydtOuKlCDstZzshowgezB97J6Q7Jes7JW8IOyeheuLiOuLpC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfeyekOulvCDstIjqs7wg7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi64u167OA7J2YIOq4uOydtOuKlCB7MH0gLSB7MX3snpAg7IKs7J207Jes7JW8IO2VqeuLiOuLpC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLstZzshowgezB96rCc7J2YIO2WieydhCDssYTsmrDsi63si5zsmKRcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi7LWc7IaMIHswfeqwnOydmCDrs4DsiJjrpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLstZzrjIAgezB96rCc7J2YIOuzgOyImOulvCDshKDtg53tlZjsi63si5zsmKQuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfSfsnYAgezF967O064ukIO2BrOqxsOuCmCDqsJnqs6AgezJ967O064ukIOyekeqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfSfsnYAgezF967O064ukIO2BrOqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfSfsnYAgezF967O064ukIOyekeqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIGludmFsaWRFbWFpbDogXCLsmKzrsJTrpbgg7J2066mU7J28IOyjvOyGjOulvCDsnoXroKXtlZjsi63si5zsmKQuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIu2RnO2YhOyLnTogezB97J2AICfssLgn7J207Ja07JW8IO2VqeuLiOuLpC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIid7MH0n7Jy866GcIOyemOuqu+uQnCDsmpTssq3snoXri4jri6QuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi67mE7Ja07J6I64qUIOuNsOydtO2EsOulvCDsmpTssq3tlojqsbDrgpgg7J6Y66q765CcIOyGjeyEseydmCDqsr3roZzsnoXri4jri6QuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi7YyM7J28IO2BrOq4sOqwgCB7MH3snYQg7LSI6rO8IO2VoCDsiJgg7JeG7Iq164uI64ukLlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi64uk66W4IOyniOusuOydhCDsnpHshLHtlZjsi63si5zsmKQuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi7YyM7J28IOyXheuhnOuTnCDspJHsnoXri4jri6QuIOyeoOyLnCDtm4Qg64uk7IucIOyLnOuPhO2VmOyLreyLnOyYpC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi66Gc65OcIOykkS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIu2MjOydvCDshKDtg50uLi5cIixcbiAgY29uZmlybURlbGV0ZTogXCLquLDroZ3snYQg7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIiDsnbQg6rCS7J2AIOqzoOycoO2VtOyVvO2VqeuLiOuLpC5cIixcbiAgYWRkQ29sdW1uOiBcIuyXtCDstpTqsIBcIixcbiAgYWRkUm93OiBcIu2WiSDstpTqsIBcIixcbiAgcmVtb3ZlUm93OiBcIuygnOqxsFwiLFxuICBhZGRQYW5lbDogXCLsg4jroa3qsowg7LaU6rCAXCIsXG4gIHJlbW92ZVBhbmVsOiBcIuygnOqxsFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi7ZWt66qpXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi7Je0XCIsXG4gIG1hdHJpeF9yb3c6IFwi7ZaJXCIsXG4gIHNhdmluZ0RhdGE6IFwi6rKw6rO86rCAIOyEnOuyhOyXkCDsoIDsnqUg7KSR7J6F64uI64ukLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLsmKTrpZjqsIAg67Cc7IOd7ZWY7JesIOqysOqzvOulvCDsoIDsnqXtlaAg7IiYIOyXhuyKteuLiOuLpC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi6rKw6rO86rCAIOyEseqzteyggeycvOuhnCDsoIDsnqXrkJjsl4jsirXri4jri6QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLri6Tsi5wg7Iuc64+E7ZWY7Iut7Iuc7JikXCIsXG4gIHRpbWVyTWluOiBcIuu2hFwiLFxuICB0aW1lclNlYzogXCLstIhcIixcbiAgdGltZXJTcGVudEFsbDogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfeydhCDshozsmpTtlbQg7LSdIHsxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezBd7J20IOqxuOuguOyKteuLiOuLpFwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIuy0nSB7MH3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIu2YhOyerCDtjpjsnbTsp4Dsl5DshJwgezB9L3sxfeydhCDshozsmpTtlbQg7LSdIHsyfS97M33snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfS97MX3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuy0nSB7MH0vezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIuuLpuq4sFwiLFxuICBjbGVhckNhcHRpb246IFwi7KeA7Jqw6riwXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wia29cIl0gPSBrb3JlYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wia29cIl0gPSBcIu2VnOq1reyWtFwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9rb3JlYW4udHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGxhdHZpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQXRwYWthxLxcIixcbiAgcGFnZU5leHRUZXh0OiBcIlTEgWzEgWtcIixcbiAgY29tcGxldGVUZXh0OiBcIlBhYmVpZ3RcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIkxhcHB1c2UgezB9IG5vIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJOYXYgbmV2aWVuYSBqYXV0xIFqdW1hLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlBhdGVpY2FtaWVzIEp1bXMgcGFyIGFua2V0YXMgYWl6cGlsZMSrxaFhbnUhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiSWVsxIFkZSBubyBzZXJ2ZXJhLi4uXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQ2l0cyAobMWrZHp1LCBhcHJha3N0aWV0ISlcIixcbiAgb3B0aW9uc0NhcHRpb246IFwiSXp2xJNsxJN0aWVzLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTMWrZHp1LCBhdGJpbGRpZXQgdXogamF1dMSBanVtdSFcIixcbiAgbnVtZXJpY0Vycm9yOiBcIkF0YmlsZGVpIGlyIGrEgWLFq3Qgc2thaXRsaW0uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTMWrZHp1LCBpZXZhZGlldCB2aXNtYXogezB9IHNpbWJvbHVzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyB2aXNtYXogezB9IHZhcmlhbnR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJMxatkenUsIGl6dsSTbGlldGllcyBuZSB2YWlyYWsgcGFyIHswfSB2YXJpYW50aWVtLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSBuZWvEgSB7MX0sIHVuIHZpZW7EgWRhbSB2YWkgbWF6xIFrYW0sIG5la8SBIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgasSBYsWrdCB2aWVuxIFkYW0gdmFpIGxpZWzEgWthbSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIkzFq2R6dSwgaWV2YWRpZXQgcGF0aWVzdSBlLXBhc3RhIGFkcmVzaSFcIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiAnTMWrZHp1LCBpZXZhZGlldCBkYXR1cyBsYXVrxIEgXCJDaXRzXCInXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImx2XCJdID0gbGF0dmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJsdlwiXSA9IFwibGF0dmllxaF1XCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2xhdHZpYW4udHMiLCIvL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGxpdGh1YW5pYVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBdGdhbFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVG9saWF1XCIsXG4gIGNvbXBsZXRlVGV4dDogXCJCYWlndGlcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlByYWTEl3RpXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiS2l0YSAoxK92ZXN0aSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk7El3JhXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlBhc2lyaW5rdGkgdmlzdXNcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlB1c2xhcGlzIHswfSBpxaEgezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIkFwa2xhdXNvamUgbsSXcmEgbWF0b21vIHB1c2xhcGlvIGFyIGtsYXVzaW1vLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkTEl2tvamFtZSB1xb4gZGFseXZhdmltxIUgYXBrbGF1c29qZSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk3Fq3PFsyDEr3JhxaFhaSByb2RvLCBrYWQgamF1IGF0bGlrb3RlIMWhacSFIGFwa2xhdXPEhS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcmHFoW9tZSBwYWxhdWt0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJQYXNpcmlua3RpLi4uXCIsXG4gIHZhbHVlOiBcInJlaWvFoW3El1wiLFxuICByZXF1aXJlZEVycm9yOiBcIkLFq3RpbmEgYXRzYWt5dGkgxK8gxaHEryBrbGF1c2ltxIUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIkLFq3RpbmEgYXRzYWt5dGkgYmVudCDEryB2aWVuxIUga2xhdXNpbcSFLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlByYcWhb21lIGF0c2FreXRpIMSvIGtsYXVzaW11cyB2aXNvc2UgZWlsdXTEl3NlLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVHVyaSBixat0aSBza2FpxI1pYWkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBiZW50IHswfSBzaW1ib2xpdXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJhxaFvbWUgc3V2ZXN0aSBtYcW+aWF1IG5laSB7MH0gc2ltYm9sacWzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlByYcWhb21lIHN1dmVzdGkgZGF1Z2lhdSBuZWkgezB9IGlyIG1hxb5pYXUgbmVpIHsxfSBzaW1ib2xpxbMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJhxaFvbWUgc3V2ZXN0aSBuZSBtYcW+aWF1IG5laSB7MH0gZWlsdcSNacWzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQcmHFoW9tZSBwYXNpcmlua3RpIGJlbnQgezB9IHZhcmlhbnTFsy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGFzaXJpbmtpdGUgbmUgZGF1Z2lhdSBrYWlwIHswfSB2YXJpYW50dXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyB0dXJpIGLFq3RpIGx5Z3VzIGFyYmEgZGlkZXNuaXMgbmVpIHsxfSBpciBseWd1cyBhcmJhIG1hxb5lc25pcyBuZWkgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgdHVyxJd0xbMgYsWrdGkgbHlndXMgYXJiYSBkaWRlc25pcyBuZWkgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgdHVyxJd0xbMgYsWrdGkgbHlndXMgYXIgbWHFvmVzbmlzIHXFviB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlByYcWhb21lIMSvdmVzdGkgZ2FsaW9qYW50xK8gZWxla3Ryb25pbmlvIHBhxaF0byBhZHJlc8SFLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJSZWlrxaFtxJc6IHswfSB0dXJpIGdyxIXFvmludGkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVcW+a2xhdXNhIGdyxIXFvmlubyBrbGFpZMSFJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJVxb5rbGF1c2EgZ3LEhcW+aW5vIHR1xaHEjWl1cyBkdW9tZW5pcyBhcmJhICdwYXRoJyBzYXZ5YsSXIHlyYSBuZXRlaXNpbmdhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmFpbG8gZHlkaXMgbmV0dXJpIHZpcsWheXRpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIsSudmVza2l0ZSBraXTEhSByZWlrxaFtxJkuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJKxatzxbMgZmFpbGFzIHlyYSBrZWxpYW1hcy4gUGFsYXVraXRlIGtlbGV0xIUgc2VrdW5kxb5pxbMgaXIgYmFuZHlraXRlIGRhciBrYXJ0xIUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIlByYcWhb21lIHBhbGF1a3RpLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiUGFzaXJpbmt0aSBmYWlsxIUodXMpLi4uXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQXIgbm9yaXRlIGnFoXRyaW50aSDEr3JhxaHEhT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLFoGkgcmVpa8WhbcSXIHR1csSXdMWzIGLFq3RpIHVuaWthbGkuXCIsXG4gIGFkZENvbHVtbjogXCJQcmlkxJd0aSBzdHVscGVsxK9cIixcbiAgYWRkUm93OiBcIlByaWTEl3RpIGVpbHV0xJlcIixcbiAgcmVtb3ZlUm93OiBcIknFoXRyaW50aVwiLFxuICBhZGRQYW5lbDogXCJQcmlkxJd0aSBuYXVqxIVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiScWhdHJpbnRpXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50YXNcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTdHVscGVsaXNcIixcbiAgbWF0cml4X3JvdzogXCJFaWx1dMSXXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0YXRhaSBzYXVnb21pIHNlcnZlcnlqZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwixK52eWtvIGtsYWlkYSBpciBtZXMgbmVnYWzEl2pvbWUgacWhc2F1Z290aSByZXp1bHRhdMWzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGFpIGJ1dm8gacWhc2F1Z290aSBzxJdrbWluZ2FpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiQmFuZHl0aSBkYXIga2FydMSFXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJQcmFsZWlkb3RlIHswfSDFoWlhbWUgcHVzbGFweWplIGlyIHsxfSBpxaEgdmlzby5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiUHJhbGVpZG90ZSB7MH0gxaFpYW1lIHB1c2xhcHlqZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJQcmFsZWlkb3RlIHswfSBpxaEgdmlzby5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gxaFpYW1lIHB1c2xhcHlqZSBpciB7Mn0gacWhIHszfSBpxaEgdmlzby5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUHJhbGVpZG90ZSB7MH0gacWhIHsxfSDFoWlhbWUgcHVzbGFweWplLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gacWhIHZpc28uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJJxaF2YWx5dGlcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlZhbHl0aVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJJxaF0cmludGkgxaHEryBmYWlsxIVcIlxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImx0XCJdID0gbGl0aHVhbmlhU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImx0XCJdID0gXCJMaWV0dXZpxbNcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vbGl0aHVhbmlhbi50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbm9yd2VnaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkZvcnJpZ2VcIixcbiAgcGFnZU5leHRUZXh0OiBcIk5lc3RlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGdWxsZsO4clwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJBbm5ldCAoYmVza3JpdilcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlNpZGUgezB9IGF2IHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJEZXQgZXIgaW5nZW4gc3lubGlnIHNpZGUgZWxsZXIgc3DDuHJzbcOlbCBpIHVuZGVyc8O4a2Vsc2VuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRha2sgZm9yIGF0IGR1IGZ1bGxmw7hydGUgdW5kZXJzw7hrZWxzZW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWw6VyZSBkYXRhIHZpc2VyIGF0IGR1IGFsbGVyZWRlIGhhciBnamVubm9tZsO4cnQgZGVubmUgdW5kZXJzw7hrZWxzZW4uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVW5kZXJzw7hrZWxzZW4gbGFzdGVyLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZlbGcuLi5cIixcbiAgdmFsdWU6IFwidmVyZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJWZW5ubGlnc3Qgc3ZhciBww6Ugc3DDuHJzbcOlbGV0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWZW5ubGlnc3Qgc3ZhciBww6UgbWluc3QgZXR0IHNww7hyc23DpWwuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmVubmxpZ3N0IHN2YXIgcMOlIHNww7hyc23DpWwgaSBhbGxlIHJhZGVyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVmVyZGllbiBza2FsIHbDpnJlIG51bWVyaXNrLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gbWluc3QgezB9IHRlZ24uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtaW5kcmUgZW5uIHswfSB0ZWduLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gbWVyIGVubiB7MH0gb2cgbWluZHJlIGVubiB7MX0gdGVnbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWZW5ubGlnc3QgZnlsbCBpbm4gbWluc3QgezB9IHJhZGVyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWZW5ubGlnc3QgdmVsZyBtaW5zdCB7MH0gdmFyaWFudGVyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWZW5ubGlnc3QgaWtrZSB2ZWxnIG1lciBlbm4gezB9IHZhcmlhbnRlci5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGLDuHIgdsOmcmUgbGlrIGVsbGVyIG1lciBlbm4gezF9IG9nIGxpayBlbGxlciBtaW5kcmUgZW5uIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGLDuHIgdsOmcmUgbGlrIGVsbGVyIG1lciBlbm4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWluZHJlIGVubiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gZW4gZ3lsZGlnIGUtcG9zdCBhZHJlc3NlLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRm9yZXNww7hyc2VsZW4gcmV0dXJuZXJ0ZSBmZWlsZW4gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJGb3Jlc3DDuHJzZWxlbiByZXR1cm5lcnRlIHRvbW1lIGRhdGEsIGVsbGVyICdzdGknIC1lZ2Vuc2thcGVuIGVyIGZlaWxcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBiw7hyIGlra2Ugb3ZlcnN0aWdlIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gZGVuIGFuZHJlIHZlcmRpZW4uXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGaWxlbiBkaW4gbGFzdGVzIG9wcC4gVmVubmxpZ3N0IHZlbnQgbm9lbiBzZWt1bmRlciBvZyBwcsO4diBpZ2plbi5cIixcbiAgY29uZmlybURlbGV0ZTogXCLDmG5za2VyIGR1IMOlIHNsZXR0ZSBwb3N0ZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGVubmUgdmVyZGllbiBza2FsIHbDpnJlIHVuaWsuXCIsXG4gIGFkZFJvdzogXCJMZWdnIHRpbCByYWRcIixcbiAgcmVtb3ZlUm93OiBcIkZqZXJuXCIsXG4gIGFkZFBhbmVsOiBcIkxlZ2cgdGlsIG55XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkZqZXJuZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJSYWRcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVuZSBsYWdyZXMgcMOlIHNlcnZlcmVuIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRGV0IG9wcHN0byBlbiBmZWlsLCBvZyB2aSBrdW5uZSBpa2tlIGxhZ3JlIHJlc3VsdGF0ZW5lLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGVuZSBibGUgbGFncmV0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDuHYgaWdqZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gcMOlIGRlbm5lIHNpZGVuIG9nIHsxfSB0b3RhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gcMOlIGRlbm5lIHNpZGVuLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciB0aWxicmFrdCB7MH0gdG90YWx0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gcMOlIGRlbm5lIHNpZGVuIG9nIHRvdGFsdCB7Mn0gYXYgezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSBww6UgZGVubmUgc2lkZW4uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gdG90YWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuc1wiXG59O1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJub1wiXSA9IG5vcndlZ2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJub1wiXSA9IFwibm9yc2tcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vbm9yd2VnaWFuLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwZXJzaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItmC2KjZhNuMXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLYqNi52K/bjFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi2KraqdmF24zZhFwiLFxuICBwcmV2aWV3VGV4dDogXCLZvtuM2LQg2YbZhdin24zYtFwiLFxuICBlZGl0VGV4dDogXCLZiNuM2LHYp9uM2LRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIti02LHZiNi5XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi2K/bjNqv2LEo2KrZiNi224zYrSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItmH24zahlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLYp9mG2KrYrtin2Kgg2YfZhdmHXCIsXG4gIHByb2dyZXNzVGV4dDogXCLYtdmB2K3ZhyB7MH0g2KfYsiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItmF2YjYsdivIHswfSDYp9iyIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrYudiv2KfYryDZvtin2LPYriB7MH0vezF9INiz2YjYp9mEXCIsXG4gIGVtcHR5U3VydmV5OiBcIti12YHYrdmHINin24wg24zYpyDar9iy24zZhtmHINin24wg2KjYsdin24wg2KfbjNmGINm+2LHYs9i02YbYp9mF2Ycg2YXZiNis2YjYryDZhtuM2LPYqi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLYp9iyINi02YXYpyDYqNin2KjYqiDYqtqp2YXbjNmEINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2KrYtNqp2LHbjNmFXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqNmHINmG2LjYsSDZhduMINix2LPYryDZh9mFINmH2YUg2KfaqdmG2YjZhiDZvtix2LPYtNmG2KfZhdmHINix2Kcg2KraqdmF24zZhCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi2K/Ysdit2KfZhCDYp9uM2KzYp9ivINm+2LHYs9i02YbYp9mF2YdcIixcbiAgb3B0aW9uc0NhcHRpb246IFwi2KfZhtiq2K7Yp9ioINqp2YbbjNivLi4uXCIsXG4gIHZhbHVlOiBcItmF2YLYr9in2LFcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLZhNi32YHYpyDYqNmHINiz2YjYp9mEINm+2KfYs9iuINiv2YfbjNivXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YTYt9mB2Kcg2LPZiNin2YTYp9iqINiq2YXYp9mFINiz2LfYsdmH2Kcg2LHYpyDZvtin2LPYriDYr9mH24zYry5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItmF2YLYr9in2LEg2KjYp9uM2K8g2LnYr9iv24wg2KjYp9i02K9cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLZhNi32YHYpyDYrdiv2KfZgtmEICB7MH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi2YTYt9mB2Kcg2qnZhdiq2LEg2KfYsiAgezB9INit2LHZgSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLZhNi32YHYpyDYqNuM2LTYqtixINin2LIgIHswfSDYrdix2YEg2Ygg2qnZhdiq2LEg2KfYsiB7MX0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItmE2LfZgdinINit2K/Yp9mC2YQgezB9INiz2LfYsSDZiNin2LHYryDaqdmG24zYry5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi2K3Yr9in2YLZhCB7MH0g2KfZhtiq2K7Yp9ioINqp2YbbjNivLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLZhNi32YHYpyDYqNuM2LTYqtixINin2LIgIHswfSDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICBcIid7MH0nINio2KfbjNivINio24zZhiB7MX0g2YggezJ9INio2KfYtNivXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg2KjYstix2q/YqtixINmF2LPYp9mI24wgezF9INio2KfYtNivXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg2KjYp9uM2K8g2qnZiNqG2qnYqtixINuM2Kcg2YXYs9in2YjbjCB7MX0g2KjYp9i02K9cIixcbiAgaW52YWxpZEVtYWlsOiBcItmE2LfZgdinINin24zZhduM2YQg2LXYrduM2K0g2K/YsdisINqp2YbbjNivXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIti52KjYp9ix2Ko6IHswfSDZvtin2LPYriDYqNin24zYryAndHJ1ZScg2KjYp9i02K8uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLYr9ix2K7ZiNin2LPYqiDYqNinINiu2LfYpyDYsdmI2KjYsdmIINi02K86ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgXCLYr9ix2K7ZiNin2LPYqiDZhdiz24zYsduMINiu2KfZhNuMINio2KfYstqv2LTYqiDYr9in2K/ZhyDbjNinINmF2LPbjNixINiv2LHYs9iqINiq2YbYuNuM2YUg2YbYtNiv2YdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLYqNuM2LTYqtix24zZhiDYrdis2YUg2YXYrNin2LIg2YHYp9uM2YQ6IHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi2YXZgtiv2KfYsSAn2K/bjNqv2LEnINix2Kcg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgIFwi2YHYp9uM2YQg2K/YsSDYrdin2YQg2KLbjNmE2YjYryDYp9iz2KouINmE2LfZgdinINi12KjYsSDaqdmG24zYry5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi2KjYp9ix2q/bjNix24wuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLYp9mG2KrYrtin2Kgg2YHYp9uM2YQo2YfYpykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItmH24zahiDZgdin24zZhNuMINin2YbYqtiu2KfYqCDZhti02K/Zh1wiLFxuICBjb25maXJtRGVsZXRlOiBcItii24zYpyDZhdin24zZhCDYqNmHINit2LDZgSDYp9uM2YYg2LHYr9uM2YEg2YfYs9iq24zYr9ifXCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi2KfbjNmGINmF2YLYr9in2LEg2KjYp9uM2K8g2LrbjNixINiq2qnYsdin2LHbjCDYqNin2LTYr1wiLFxuICBhZGRDb2x1bW46IFwi2LPYqtmI2YYg2KzYr9uM2K9cIixcbiAgYWRkUm93OiBcItiz2LfYsSDYrNiv24zYr1wiLFxuICByZW1vdmVSb3c6IFwi2K3YsNmBXCIsXG4gIGFkZFBhbmVsOiBcItis2K/bjNivXCIsXG4gIHJlbW92ZVBhbmVsOiBcItit2LDZgVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi2KLbjNiq2YVcIixcbiAgbWF0cml4X2NvbHVtbjogXCLYs9iq2YjZhlwiLFxuICBtYXRyaXhfcm93OiBcItiz2LfYsVwiLFxuICBzYXZpbmdEYXRhOiBcItmG2KrYp9uM2Kwg2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYs9in2LLbjCDYr9ixINiz2LHZiNixINin2LPYqlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi2K7Yt9in24zbjCDYr9ixINiw2K7bjNix2Ycg2LPYp9iy24wg2YbYqtin24zYrCDYsdiuINiv2KfYr9mHINin2LPYqlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLZhtiq2KfbjNisINio2Kcg2YXZiNmB2YLbjNiqINiw2K7bjNix2Ycg2LTYr1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi2YXYrNiv2K8g2KrZhNin2LQg2qnZhtuM2K9cIixcbiAgdGltZXJNaW46IFwi2K/ZgtuM2YLZh1wiLFxuICB0aW1lclNlYzogXCLYq9in2YbbjNmHXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi2LTZhdinINmF2K/YqiB7MH0g2K/YsSDYp9uM2YYg2LXZgdit2Ycg2Ygg2YXYr9iqIHsxfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIti02YXYpyDZhdiv2KogezB9INix2Kcg2K/YsSDYp9uM2YYg2LXZgdit2Ycg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIti02YXYpyDZhdiv2KogezB9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INiv2LEg2KfbjNmGINi12YHYrdmHINmIINmF2K/YqiB7Mn0g2KfYsiB7M30g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYsdinINiv2LEg2KfbjNmGINi12YHYrdmHINiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLYtNmF2Kcg2YXYr9iqIHswfSDYp9iyIHsxfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLZvtin2qnYs9in2LLbjFwiLFxuICBjbGVhckNhcHRpb246IFwi2K7Yp9mE24wg2qnYsdiv2YZcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi2KfZhtiq2K7Yp9ioINmB2KfbjNmEXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItit2LDZgSDYp9uM2YYg2YHYp9uM2YRcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLYqNmE2YdcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcItiu24zYsVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLYotuM2Kcg2YXbjNiu2YjYp9mH24zYryDYp9uM2YYg2YHYp9uM2YQg2LHYpyDZvtin2qkg2qnZhtuM2K86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItii24zYpyDZhduM2K7ZiNin2YfbjNivINiq2YXYp9mFINmB2KfbjNmEINmH2Kcg2LHYpyDZvtin2qkg2qnZhtuM2K8/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINiz2YjYp9mEXCIsXG59O1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmYVwiXSA9IHBlcnNpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZmFcIl0gPSBcItmB2KfYsdmS2LPZkNmJXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHBvbGlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJXc3RlY3pcIixcbiAgcGFnZU5leHRUZXh0OiBcIkRhbGVqXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJHb3Rvd2VcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJJbm5hIG9kcG93aWVkxbogKHdwaXN6KVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3Ryb25hIHswfSB6IHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJOaWUgbWEgd2lkb2N6bnljaCBweXRhxYQuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRHppxJlrdWplbXkgemEgd3lwZcWCbmllbmllIGFua2lldHkhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVHJ3YSB3Y3p5dHl3YW5pZSBhbmtpZXR5Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIld5YmllcnouLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgdG8gcHl0YW5pZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgd3N6eXN0a2llIHB5dGFuaWEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJXIHR5bSBwb2x1IG1vxbxuYSB3cGlzYcSHIHR5bGtvIGxpY3pieS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQcm9zesSZIHdwaXNhxIcgY28gbmFqbW5pZWogezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIG1uaWVqIG5pxbwgezB9IHpuYWvDs3cuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIHdpxJljZWogbmnFvCB7MH0gaSBtbmllaiBuacW8IHsxfSB6bmFrw7N3LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByb3N6xJkgdXp1cGXFgm5pxIcgcHJ6eW5ham1uaWVqIHswfSB3aWVyc3p5LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgY28gbmFqbW5pZWogezB9IHBvenljamkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlByb3N6xJkgd3licmHEhyBuaWUgd2nEmWNlaiBuacW8IHswfSBwb3p5Y2ppLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgd2nEmWtzemEgbHViIHLDs3duYSB7MX0gb3JheiBtbmllanN6YSBsdWIgcsOzd25hIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiT2Rwb3dpZWTFuiAnezB9JyBwb3dpbm5hIGJ5xIcgbW5pZWpzemEgbHViIHLDs3duYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlByb3N6xJkgcG9kYcSHIHByYXdpZMWCb3d5IGFkcmVzIGVtYWlsLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwixbvEhWRhbmllIHp3csOzY2nFgm8gYsWCxIVkICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwixbvEhWRhbmllIG5pZSB6d3LDs2NpxYJvIGRhbnljaCBhbGJvIMWbY2llxbxrYSBqZXN0IG5pZXByYXdpZMWCb3dhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiUm96bWlhciBwcnplc8WCYW5lZ28gcGxpa3UgbmllIG1vxbxlIHByemVrcmFjemHEhyB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIHBvZGHEhyBpbm7EhSBvZHBvd2llZMW6LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiVHJ3YSBwcnplbm9zemVuaWUgVHdvamVnbyBwbGlrdSwgcHJvc3rEmSBzcHLDs2Jvd2HEhyBwb25vd25pZSB6YSBraWxrYSBzZWt1bmQuXCIsXG4gIGFkZFJvdzogXCJEb2RhaiB3aWVyc3pcIixcbiAgcmVtb3ZlUm93OiBcIlVzdcWEXCIsXG4gIGFkZFBhbmVsOiBcIkRvZGFqIHBhbmVsXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVzdcWEXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sdW1uYVwiLFxuICBtYXRyaXhfcm93OiBcIldpZXJzelwiLFxuICBzYXZpbmdEYXRhOiBcIlphcGlzdWrEmSB3eW5pa2kgYW5raWV0eSBuYSBzZXJ3ZXJ6ZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiV3lzdMSFcGnFgiBixYLEhWQgaSB3eW5pa2kgbmllIG1vZ8WCeSB6b3N0YcSHIHphcGlzYW5lLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJXeW5pa2kgem9zdGHFgnkgcG9wcmF3bmllIHphcGlzYW5lIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiU3Byw7NidWogcG9ub3duaWVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlNwxJlkemnFgmXFmyB7MH0gbmEgdGVqIHN0cm9uaWUgYSB3IHN1bWllIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSBuYSB0ZWogc3Ryb25pZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJTcMSZZHppxYJlxZsgdyBzbXVtaWUgezB9LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0gbmEgdGVqIHN0cm9uaWUgYSB3IHN1bWllIHsyfSB6IHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiU3DEmWR6acWCZcWbIHswfSB6IHsxfSBuYSB0ZWogc3Ryb25pZVwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJXeWN6ecWbxIdcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwbFwiXSA9IHBvbGlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJwbFwiXSA9IFwicG9sc2tpXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcG9ydHVndWVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiUHLDs3hpbW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29tZcOnYXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdXRyb3MgKGRlc2NyZXZlcilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5lbmh1bVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2lvbmFyIFRvZG9zXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTsOjbyBow6EgcMOhZ2luYSB2aXPDrXZlbCBvdSBwZXJndW50YSBuYSBwZXNxdWlzYS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJPYnJpZ2FkbyBwb3IgZmluYWxpemFyIGEgcGVzcXVpc2EhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJOb3Nzb3MgcmVnaXN0cm9zIG1vc3RyYW0gcXVlIHZvY8OqIGrDoSBmaW5hbGl6b3UgYSBwZXNxdWlzYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJBIHBlc3F1aXNhIGVzdMOhIGNhcnJlZ2FuZG8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNpb25lLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIHBlbG8gbWVub3MgdW1hIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBvciBmYXZvciwgcmVzcG9uZGEgYXMgcGVyZ3VudGFzIGVtIHRvZGFzIGFzIGxpbmhhcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIk8gdmFsb3IgZGV2ZSBzZXIgbnVtw6lyaWNvLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciwgaW5zaXJhIHBlbG8gbWVub3MgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWVub3MgZGUgezB9IGNhcmFjdGVyZXMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgbWFpcyBkZSB7MH0gZSBtZW5vcyBkZSB7MX0gY2FyYWN0ZXJlcy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcmVlbmNoYSBwZWxvIG1lbm9zIHswfSBsaW5oYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNlbGVjaW9uZSBwZWxvIG1lbm9zIHswfSBvcMOnw7Vlcy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUG9yIGZhdm9yLCBzZWxlY2lvbmUgbsOjbyBtYWlzIGRvIHF1ZSB7MH0gb3DDp8O1ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IHN1cGVyaW9yIGEgezF9IGUgaWd1YWwgb3UgbWVub3IgcXVlIHsyfVwiLFxuICBudW1lcmljTWluOiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJPICd7MH0nIGRldmUgc2VyIGlndWFsIG91IGluZmVyaW9yIGEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQb3IgZmF2b3IsIGluZm9ybWUgdW0gZS1tYWlsIHbDoWxpZG8uXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkEgZXhwcmVzc8OjbzogezB9IGRldmUgcmV0b3JuYXIgJ3ZlcmRhZGVpcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiQSByZXF1aXNpw6fDo28gcmV0b3Jub3UgbyBlcnJvICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiQSByZXF1aXNpw6fDo28gbsOjbyByZXRvcm5vdSBkYWRvcyBvdSBvICdjYW1pbmhvJyBkYSByZXF1aXNpw6fDo28gbsOjbyBlc3TDoSBjb3JyZXRvXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiTyB0YW1hbmhvIGRvIGFycXVpdm8gbsOjbyBkZXZlIGV4Y2VkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCBpbmZvcm1lIG8gb3V0cm8gdmFsb3IuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTZXUgYXJxdWl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIFBvciBmYXZvciwgYWd1YXJkZSBhbGd1bnMgc2VndW5kb3MgZSB0ZW50ZSBub3ZhbWVudGUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkNhcnJlZ2FuZG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJTZWxlY2lvbmUgbyhzKSBhcnF1aXZvKHMpLi4uXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiVGVtIGNlcnRlemEgcXVlIGRlc2VqYSBkZWxldGFyP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVzc2UgdmFsb3IgZGV2ZSBzZXIgw7puaWNvLlwiLFxuICBhZGRDb2x1bW46IFwiQWRpY2lvbmFyIGNvbHVuYVwiLFxuICBhZGRSb3c6IFwiQWRpY2lvbmFyIGxpbmhhXCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVyIGxpbmhhXCIsXG4gIGFkZFBhbmVsOiBcIkFkaWNpb25hciBub3ZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJlbW92ZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bmFcIixcbiAgbWF0cml4X3JvdzogXCJMaW5oYVwiLFxuICBzYXZpbmdEYXRhOiBcIk9zIHJlc3VsdGFkb3MgZXN0byBzZW5kbyBzYWx2b3Mgbm8gc2Vydmlkb3IuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIk9jb3JyZXUgdW0gZXJybyBlIG7Do28gZm9pIHBvc3PDrXZlbCBzYWx2YXIgb3MgcmVzdWx0YWRvcy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiT3MgcmVzdWx0YWRvcyBmb3JhbSBzYWx2b3MgY29tIHN1Y2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZW50ZSBub3ZhbWVudGVcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYSBlIHsxfSBubyB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gbm8gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hIGUgezJ9IGRlIHszfSBubyB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBubyB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjbGVhckNhcHRpb246IFwiTGltcGFyXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZXIgZXN0ZSBhcnF1aXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU2ltXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOw6NvXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciBlc3RlIGFycXVpdm86IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciB0b2RvcyBvcyBhcnF1aXZvcz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlTDrXR1bG8gZGEgcXVlc3TDo29cIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicHRcIl0gPSBwb3J0dWd1ZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInB0XCJdID0gXCJwb3J0dWd1w6pzXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UudHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHJvbWFuaWFuU3VydmV5U3RyaW5nczogYW55ID0ge1xuICBwYWdlUHJldlRleHQ6IFwiUHJlY2VkZW50XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJVcm3Eg3RvclwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRmluYWxpemFyZVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFsdHVsKHByZWNpemHFo2kpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IGRpbiB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTnUgc3VudCDDrm50cmVixINyaSBwZW50cnUgYWNlc3QgY2hlc3Rpb25hclwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlbEgyBtdWzFo3VtaW0gcGVudHJ1IHRpbXB1bCBhY29yZGF0IVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkNoZXN0aW9uYXJ1bCBzZSDDrm5jYXJjxIMuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQWxlZ2XFo2kuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJSxINzcHVuc3VsIGxhIGFjZWFzdMSDIMOubnRyZWJhcmUgZXN0ZSBvYmxpZ2F0b3JpdS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb2F0ZSByxINzcHVuc3VyaWxlIHN1bnQgb2JsaWdhdG9yaWlcIixcbiAgbnVtZXJpY0Vycm9yOiBcIlLEg3NwdW5zdWwgdHJlYnVpZSBzxIMgZmllIG51bWVyaWMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1pbmltIHswfSBjYXJhY3RlcmUuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlRyZWJ1aWUgc8SDIHNlbGVjdGHIm2kgbWluaW0gezB9IG9wxaNpdW5pLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RhyJtpIG1heGltIHswfSBvcMWjaXVuaS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfSDFn8OuIG1haSBtaWMgc2F1IGVnYWwgY3UgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1hcmUgc2F1IGVnYWwgY2EgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiUsSDc3B1bnN1bCAnezB9JyB0cmVidWllIHPEgyBmaWUgbWFpIG1pYyBzYXUgZWdhbCBjYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSBvIGFkcmVzYSBkZSBlbWFpbCB2YWxpZMSDLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRpbWVuc2l1bmVhIGZpxZ9pZXJ1bHVpIG51IHRyZWJ1aWUgc8SDIGRlcMSDxZ9lYXNjxIMgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgY8OibXB1bCAnQWx0dWwnLlwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiRGluIMOubnJlZ2lzdHLEg3JpbGUgbm9hc3RyZSByZWllc2UgY8SDIGHIm2kgY29tcGxldGF0IGRlamEgYWNlc3QgY2hlc3Rpb25hci5cIixcbiAgdmFsdWU6IFwidmFsb2FyZVwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWxIMgcnVnxINtIHPEgyByxINzcHVuZGXIm2kgbGEgY2VsIHB1yJtpbiBvIMOubnRyZWJhcmUuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1heGltIHswfSBjYXJhY3RlcmUuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWFpIG11bHQgZGUgezB9IMiZaSBtYWkgcHXIm2luIGRlIHsxfSBjYXJhY3RlcmUuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgbWluaW0gezB9IHLDom5kdXJpLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUmVxdWVzdC11bCBhIHJldHVybmF0IGVyb2FyZWEgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJSZXF1ZXN0LXVsIG51IGEgcmV0dXJuYXQgZGF0ZSBzYXUgcHJvcHJpZXRhdGVhICdwYXRoJyBlc3RlIGluY29yZWN0xINcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZpyJlpZXJ1bCBkdW1uZWF2b2FzdHLEgyBlc3RlIMOubiBjdXJzIGRlIMOubmPEg3JjYXJlLiBWxIMgcnVnxINtIGHImXRlcHRhyJtpIGPDonRldmEgc2VjdW5kZSDImWkgcmV2ZW5pyJtpIGFwb2kuXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiU3VudGXIm2kgc2lndXIgY8SDIGRvcmnIm2kgc8SDIMiZdGVyZ2XIm2kgw65ucmVnaXN0cmFyZWE/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVmFsb2FyZWEgdHJlYnVpZSBzxIMgZmllIHVuaWPEgy5cIixcbiAgYWRkUm93OiBcIkFkxIN1Z2FyZSByw6JuZFwiLFxuICByZW1vdmVSb3c6IFwiyJh0ZXJnZXJlXCIsXG4gIGFkZFBhbmVsOiBcIkFkxIN1Z2FyZVwiLFxuICByZW1vdmVQYW5lbDogXCLImHRlcmdlcmVcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9wyJtpdW5lXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb2FuxINcIixcbiAgbWF0cml4X3JvdzogXCJSw6JuZFwiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0ZWxlIHN1bnQgw65uIGN1cnMgZGUgc2FsdmFyZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQSBpbnRlcnZlbml0IG8gZXJvYXJlLCByZXp1bHRhdGVsZSBudSBhdSBwdXR1dCBmaSBzYWx2YXRlLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGVsZSBhdSBmb3N0IHNhbHZhdGUgY3Ugc3VjY2VzIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiw45uY2VyY2HIm2kgZGluIG5vdVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiQcibaSBwZXRyZWN1dCB7MH0gcGUgYWNlYXN0xIMgcGFnaW7EgyDImWkgezF9IMOubiB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiQcibaSBwZXRyZWN1dCB7MH0gcGUgYWNlYXN0xIMgcGFnaW7Egy5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJByJtpIHBldHJlY3V0IHswfSDDrm4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJByJtpIHBldHJlY3V0IHswfSBkaW4gezF9IHBlIGFjZWFzdMSDIHBhZ2luxIMgyJlpIHsyfSBkaW4gezN9IMOubiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiQcibaSBwZXRyZWN1dCB7MH0gZGluIHsxfSBwZSBhY2Vhc3TEgyBwYWdpbsSDLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gw65uIHRvdGFsLlwiXG59O1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyb1wiXSA9IHJvbWFuaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInJvXCJdID0gXCJyb23Dom7Eg1wiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9yb21hbmlhbi50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcnVzc2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvQtdC1XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQk9C+0YLQvtCy0L5cIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCd0LDRh9Cw0YLRjFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L7QtSAo0L/QvtC20LDQu9GD0LnRgdGC0LAsINC+0L/QuNGI0LjRgtC1KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QtdGCXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0YvQsdGA0LDRgtGMINCy0YHRkVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0KHRgtGA0LDQvdC40YbQsCB7MH0g0LjQtyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdGCINC90Lgg0L7QtNC90L7Qs9C+INCy0L7Qv9GA0L7RgdCwLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCR0LvQsNCz0L7QtNCw0YDQuNC8INCS0LDRgSDQt9CwINC30LDQv9C+0LvQvdC10L3QuNC1INCw0L3QutC10YLRiyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItCS0Ysg0YPQttC1INC/0YDQvtGF0L7QtNC40LvQuCDRjdGC0L7RgiDQvtC/0YDQvtGBLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCX0LDQs9GA0YPQt9C60LAg0YEg0YHQtdGA0LLQtdGA0LAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JLRi9Cx0YDQsNGC0YwuLi5cIixcbiAgdmFsdWU6IFwi0LfQvdCw0YfQtdC90LjQtVwiLFxuICByZXF1aXJlZEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC90LAg0LLQvtC/0YDQvtGBLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0L7RgtCy0LXRgtGM0YLQtSDQv9C+INC60YDQsNC50L3QtdC5INC80LXRgNC1INC90LAg0L7QtNC40L0g0LLQvtC/0YDQvtGBLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC90LAg0LLQvtC/0YDQvtGB0Ysg0LIg0LrQsNC20LTQvtC5INGB0YLRgNC+0LrQtS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCe0YLQstC10YIg0LTQvtC70LbQtdC9INCx0YvRgtGMINGH0LjRgdC70L7QvC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtSDQsdC+0LvRjNGI0LUgezB9INGB0LjQvNCy0L7Qu9C+0LIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LLQstC10LTQuNGC0LUg0LzQtdC90YzRiNC1IHswfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INCx0L7Qu9GM0YjQtSB7MH0g0Lgg0LzQtdC90YzRiNC1IHsxfSDRgdC40LzQstC+0LvQvtCyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQt9Cw0L/QvtC70L3QuNGC0LUg0L3QtSDQvNC10L3RjNGI0LUgezB9INGB0YLRgNC+0LouXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0LHQtdGA0LjRgtC1INGF0L7RgtGPINCx0YsgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0L3QtSDQsdC+0LvQtdC1IHswfSDQstCw0YDQuNCw0L3RgtC+0LIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQvNC10L3RjNGI0LUg0YfQtdC8IHsxfSwg0Lgg0L3QtSDQsdC+0LvRjNGI0LUg0YfQtdC8IHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INC80LXQvdGM0YjQtSDRh9C10LwgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LHQvtC70YzRiNC1INGH0LXQvCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQktGL0YDQsNC20LXQvdC40LUgezB9INC00L7Qu9C20L3QviDQstC+0LfQstGA0LDRidCw0YLRjCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQl9Cw0L/RgNC+0YEg0LLQtdGA0L3Rg9C7INC+0YjQuNCx0LrRgyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCe0YLQstC10YIg0L3QsCDQt9Cw0L/RgNC+0YEg0L/RgNC40YjQtdC7INC/0YPRgdGC0L7QuSDQuNC70Lgg0YHQstC+0LnRgdGC0LLQviAncGF0aCcg0YPQutCw0LfQsNC90L4g0L3QtdCy0LXRgNC90L5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNCw0LfQvNC10YAg0YTQsNC50LvQsCDQvdC1INC00L7Qu9C20LXQvSDQv9GA0LXQstGL0YjQsNGC0YwgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LDQvdC90YvQtSDQsiDQv9C+0LvQtSAn0JTRgNGD0LPQvtC1J1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0JLQsNGIINGE0LDQudC7INC30LDQs9GA0YPQttCw0LXRgtGB0Y8uINCf0L7QtNC+0LbQtNC40YLQtSDQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0INC4INC/0L7Qv9GA0L7QsdGD0LnRgtC1INGB0L3QvtCy0LAuXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCX0LDQs9GA0YPQt9C60LAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7KNGLKS4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCS0Ysg0YLQvtGH0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LfQsNC/0LjRgdGMP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCt0YLQviDQt9C90LDRh9C10L3QuNC1INC00L7Qu9C20L3QviDQsdGL0YLRjCDRg9C90LjQutCw0LvRjNC90YvQvC5cIixcbiAgYWRkQ29sdW1uOiBcItCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC70L7QvdC60YNcIixcbiAgYWRkUm93OiBcItCU0L7QsdCw0LLQuNGC0Ywg0YHRgtGA0L7QutGDXCIsXG4gIHJlbW92ZVJvdzogXCLQo9C00LDQu9C40YLRjFwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LHQsNCy0LjRgtGMINC90L7QstGD0Y5cIixcbiAgcmVtb3ZlUGFuZWw6IFwi0KPQtNCw0LvQuNGC0YxcIixcbiAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNC40LDQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdC60LBcIixcbiAgbWF0cml4X3JvdzogXCLQodGC0YDQvtC60LBcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YzRgtCw0YLRiyDRgdC+0YXRgNCw0L3Rj9GO0YLRgdGPINC90LAg0YHQtdGA0LLQtdGALi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwLCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQsdGL0Lsg0YHQvtGF0YDQsNC90ZHQvS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GM0YLQsNGCINGD0YHQv9C10YjQvdC+INGB0L7RhdGA0LDQvdGR0L0hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQn9C+0L/RgNC+0LHQvtCy0LDRgtGMINGB0L3QvtCy0LBcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LggezF9INCy0YHQtdCz0L4uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INCyINGC0LXRh9C10L3QuNC1INGC0LXRgdGC0LAuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC4IHsyfSDQuNC3IHszfSDQtNC70Y8g0LLRgdC10LPQviDRgtC10YHRgtCwLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQtNC70Y8g0LLRgdC10LPQviDRgtC10YHRgtCwLlwiLFxuICBjbGVhbkNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLRjFwiLFxuICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLRjFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQo9C00LDQu9C40YLRjCDRhNCw0LnQu1wiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJ1XCJdID0gcnVzc2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJydVwiXSA9IFwi0YDRg9GB0YHQutC40LlcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcnVzc2lhbi50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aG1XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpobVcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOmXruWNt1wiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi5byA5aeL6Zeu5Y23XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi5aGr5YaZ5YW25LuW562U5qGIXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLml6BcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi6YCJ5oup5YWo6YOoXCIsXG4gIHByb2dyZXNzVGV4dDogXCLnrKwgezB9IOmhtSwg5YWxIHsxfSDpobVcIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIuesrCB7MH0vezF9IOmimFwiLFxuICBlbXB0eVN1cnZleTogXCLpl67ljbfkuK3msqHmnInpl67popjmiJbpobXpnaJcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCLkvaDlt7LlrozmiJDpl67ljbcuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi5oSf6LCi5oKo55qE5Y+C5LiOIVwiLFxuICBsb2FkaW5nU3VydmV5OiBcIumXruWNt+ato+WcqOWKoOi9veS4rS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLor7fpgInmi6kuLi5cIixcbiAgdmFsdWU6IFwi5YC8XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi6K+35aGr5YaZ5q2k6Zeu6aKYXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuiHs+WwkeWbnuetlOS4gOmimC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLor7floavlhpnmiYDmnInooYzkuK3pl67pophcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuetlOahiOW/hemhu+aYr+S4quaVsOWtl1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuetlOahiOmVv+W6puiHs+WwkSB7MH0g5Liq5a2X56ymXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi562U5qGI6ZW/5bqm5LiN6IO96LaF6L+HIHswfSDkuKrlrZfnrKZcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLnrZTmoYjplb/luqblv4XpobvlnKggezB9IC0gezF9IOS4quWtl+espuS5i+mXtFwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIuacgOWwkemcgOimgeWhq+WGmSB7MH0g6KGM562U5qGIXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIuacgOWwkemcgOimgemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIuacgOWkmuWPquiDvemAieaLqSB7MH0g6aG5562U5qGIXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wkp+S6juetieS6jiB7MX0g5LiU5bCP5LqO562J5LqOIHsyfVwiLFxuICBudW1lcmljTWluOiBcIuetlOahiCAnezB9JyDlv4XpobvlpKfkuo7nrYnkuo4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwi562U5qGIICd7MH0nIOW/hemhu+Wwj+S6juetieS6jiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIuivt+i+k+WFpeacieaViOeahCBFbWFpbCDlnLDlnYBcIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi5YWs5byPOiB7MH0g5peg5pWILlwiLCBcbiAgdXJsUmVxdWVzdEVycm9yOiBcIui9veWFpemAiemhueaXtuWPkeeUn+mUmeivryAnezB9JzogezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCLmnKrog73ovb3lhaXmnInmlYjnmoTpgInpobnmiJbor7fmsYLlj4LmlbDot6/lvoTmnInor69cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLmlofku7blpKflsI/kuI3og73otoXov4cgezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLor7flrozmiJDlhbbku5bpl67pophcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLmlofku7bkuIrkvKDkuK0uLi4g6K+36ICQ5b+D562J5b6F5Yeg56eS5ZCO6YeN6K+VXCIsXG4gIGxvYWRpbmdGaWxlOiBcIuWKoOi9vS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIumAieaLqeaWh+S7ti4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi5pyq6YCJ5oup5paH5Lu2XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi5Yig6Zmk6K6w5b2VP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuS4u+mUruS4jeiDvemHjeWkjVwiLFxuICBhZGRDb2x1bW46IFwi5re75Yqg5YiXXCIsXG4gIGFkZFJvdzogXCLmt7vliqDooYxcIixcbiAgcmVtb3ZlUm93OiBcIuWIoOmZpOetlOahiFwiLFxuICBhZGRQYW5lbDogXCLmlrDmt7tcIixcbiAgcmVtb3ZlUGFuZWw6IFwi5Yig6ZmkXCIsXG4gIGNob2ljZXNfSXRlbTogXCLpgInpoblcIixcbiAgbWF0cml4X2NvbHVtbjogXCLliJdcIixcbiAgbWF0cml4X3JvdzogXCLooYxcIixcbiAgc2F2aW5nRGF0YTogXCLmraPlnKjlsIbnu5Pmnpzkv53lrZjliLDmnI3liqHlmaguLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuWcqOS/neWtmOe7k+aenOi/h+eoi+S4reWPkeeUn+S6humUmeivr++8jOe7k+aenOacquiDveS/neWtmFwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLnu5Pmnpzkv53lrZjmiJDlip8hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLor7fph43or5VcIixcbiAgdGltZXJNaW46IFwi5YiGXCIsXG4gIHRpbWVyU2VjOiBcIuenklwiLFxuICB0aW1lclNwZW50QWxsOiBcIuacrOmhteeUqOaXtiB7MH0g5oC76K6h55So5pe2ezF9IC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi5pys6aG155So5pe2ezB9IC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLmgLvorqHnlKjml7YgezB9IC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIuacrOmhteeUqOaXtiB7MH0g5YWxIHsxfe+8jCDmgLvorqHnlKjml7YgezJ9IOWFsSB7M30gLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLmnKzpobXnlKjml7YgezB9IOWFsSB7MX0gLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIuaAu+iuoeeUqOaXtiB7MH0g5YWxIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIua4heeQhlwiLFxuICBjbGVhckNhcHRpb246IFwi5riF6ZmkXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuenu+mZpOaWh+S7tlwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInpoLWNuXCJdID0gc2ltcGxpZmllZENoaW5lc2VTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiemgtY25cIl0gPSBcIueugOS9k+S4reaWh1wiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UudHMiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHNwYW5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlNpZ3VpZW50ZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGFyXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3RybyAoZGVzY3JpYmEpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGF5IHDDoWdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGVuIGxhIGVuY3Vlc3RhLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkdyYWNpYXMgcG9yIGNvbXBsZXRhciBsYSBlbmN1ZXN0YSFcIixcbiAgbG9hZGluZ1N1cnZleTogXCJMYSBlbmN1ZXN0YSBlc3TDoSBjYXJnYW5kby4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZWxlY2Npb25lLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yIGNvbnRlc3RlIGxhIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlBvciBmYXZvciBjb250ZXN0ZSBsYXMgcHJlZ3VudGFzIGVuIGNhZGEgaGlsZXJhLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTGEgZXN0aW1hY2nDs24gZGViZSBzZXIgbnVtw6lyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBwb3IgbG8gbWVub3MgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbWVub3MgZGUgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbcOhcyBkZSB7MH0geSBtZW5vcyBkZSB7MX0gc8OtbWJvbG9zLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlBvciBmYXZvciBsbGVuZSBwb3IgbG8gbWVub3MgezB9IGhpbGVyYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIHBvciBsbyBtZW5vcyB7MH0gdmFyaWFudGVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3Igc2VsZWNjaW9uZSBubyBtw6FzIGRlIHswfSB2YXJpYW50ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBkZWJlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtZW5vcyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciBhZ3JlZ3VlIHVuIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkby5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkxhIHNvbGljaXR1ZCByZWdyZXPDsyBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkxhIHNvbGljaXR1ZCByZWdyZXPDsyB2YWPDrW8gZGUgZGF0YSBvIGxhIHByb3BpZWRhZCAndHJheWVjdG9yaWEnIG5vIGVzIGNvcnJlY3RhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRWwgdGFtYcOxbyBkZWwgYXJjaGl2byBubyBkZWJlIGRlIGV4Y2VkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yIGFncmVndWUgbGEgb3RyYSBlc3RpbWFjacOzbi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlN1IGFyY2hpdm8gc2UgZXN0w6Egc3ViaWVuZG8uIFBvciBmYXZvciBlc3BlcmUgdW5vcyBzZWd1bmRvcyBlIGludGVudGUgZGUgbnVldm8uXCIsXG4gIGFkZFJvdzogXCJBZ3JlZ3VlIHVuYSBoaWxlcmFcIixcbiAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBoaWxlcmFcIixcbiAgY2hvaWNlc19maXJzdEl0ZW06IFwicHJpbWVyIGFydMOtY3Vsb1wiLFxuICBjaG9pY2VzX3NlY29uZEl0ZW06IFwic2VndW5kbyBhcnTDrWN1bG9cIixcbiAgY2hvaWNlc190aGlyZEl0ZW06IFwidGVyY2VyYSBhcnTDrWN1bG9cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiSGlsZXJhXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZXNcIl0gPSBzcGFuaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImVzXCJdID0gXCJlc3Bhw7FvbFwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9zcGFuaXNoLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzd2FoaWxpU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIklsaXlvdGFuZ3VsaWFcIixcbiAgcGFnZU5leHRUZXh0OiBcIklmdWF0YXlvXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLYW1pbGlcIixcbiAgcHJldmlld1RleHQ6IFwiSGFraWtpXCIsXG4gIGVkaXRUZXh0OiBcIkhhcmlyaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQW56YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk55aW5naW5lIChlbGV6YSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkhha3VuYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJDaGFndWEgWm90ZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiVWt1cmFzYSB7MH0gd2EgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWtvZGkgezB9IHlhIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWWFsaXlvamliaXdhIHswfS97MX0gbWFzd2FsaVwiLFxuICBlbXB0eVN1cnZleTogXCJIYWt1bmEgdWt1cmFzYSB1bmFvb25la2FuYSBhdSBzd2FsaSBrYXRpa2EgdXRhZml0aS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJBc2FudGkga3dhIGt1a2FtaWxpc2hhIHV0YWZpdGkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJSZWNvZGkgemV0dSB6aW5hdHVvbnllc2hhIHRheWFyaSB1bWVrYW1pbGlzaGEgdXRhZml0aS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJUdW5hYW5kYWEgdXRhZml0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaGFndWEuLi5cIixcbiAgdmFsdWU6IFwidGhhbWFuaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlRhZmFkaGFsaSBqaWJ1IGhpbGkgc3dhbGkuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlRhZmFkaGFsaSBqaWJ1IHN3YWxpIGFuZ2FsYXUgbW9qYS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUYWZhZGhhbGkgamlidSBtYXN3YWxpIGthdGlrYSBzYWZ1IHpvdGUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGFtYW5pIGluYXBhc3dhIGt1d2EgeWEgbmFtYmFyaS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJUYWZhZGhhbGkgaW5naXphIGFuZ2FsYXV7MH0gaHVzaWthLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlRhZmFkaGFsaSBpbmdpemEgaXNpb3ppZGkgezB9IGh1c2lrYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJUYWZhZGhhbGkgaW5naXphIGtpd2FuZ28gemFpZGkgeWEgezB9IG5hIGtpc2ljaG9wdW5ndWEgezF9IGh1c2lrYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJUYWZhZGhhbGkgamF6YSBpc2lvcHVuZ3VhIHswfSBzYWZ1LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJUYWZhZGhhbGkgY2hhZ3VhIGFuZ2FsYXUgezB9IGxhaGFqYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVGFmYWRoYWxpIGNoYW5ndWEgaXNpb3ppZGkgezB9IGxhaGFqYS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIiAnezB9JyBpbmFwYXN3YSBrdXdhIHNhd2EgYXUgemFpZGkgeWEgezF9IG5hIHNhd2EgYXUgY2hpbmkgeWEgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiICd7MH0naW5hcGFzd2Ega3V3YSBzYXdhIGF1IHphaWRpIHlhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIiAnezB9J2luYXBhc3dhIGt1d2Egc2F3YSBhdSBjaGluaSB5YSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlRhZmFkaGFsaSBpbmdpemEgYW53YW5pIGhhbGFsaSB5YSBiYXJ1YS1wZXBlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVc2VtaTp7MH0gaW5hcGFzd2Ega3VydWRpICdrd2VsaScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJPbWJpIGxpbmEga29zYSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIk9tYmkgbGlsaXJ1ZGlzaGEgZGF0YSB0dXB1IGF1IHRoZSAncGF0aCcgbWFsaSB5YSBuamlhIHNpbyBzYWhpaGlcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJTYWl6aSB5YSBmYWlsaSBoYWlwYXN3aSBrdXppZGkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVGFmYWRoYWxpIGluZ2l6YSB0aGFtYW5pIG55aW5naW5lLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmFpbGkgeWFrbyBpbmFwYWtpYS5UYWZhZGhhbGkgc3ViaXJpIHNla3VuZGUga2FkaGFhIG5hIHVqYXJpYnUgdGVuYS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiSW5hcGFraWEuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJDaGFndWEgZmFpbGkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkh1amFjaGFndWEgZmFpbGlcIixcbiAgY29uZmlybURlbGV0ZTogXCJKZSEgVW5hdGFrYSBrdWZ1dGEgcmVrb2RpP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRoYW1hbmkgaGlpIGluYXBhc3dhIGt1d2EgeWEga2lwZWtlZS5cIixcbiAgYWRkQ29sdW1uOiBcIk9uZ2V6YSBLb2xhbXVcIixcbiAgYWRkUm93OiBcIk9uZ2V6YSBzYWZ1XCIsXG4gIHJlbW92ZVJvdzogXCJUb2FcIixcbiAgYWRkUGFuZWw6IFwiT25nZXphIG1weWFcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVG9hXCIsXG4gIGNob2ljZXNfSXRlbTogXCJraXR1XCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sYW11XCIsXG4gIG1hdHJpeF9yb3c6IFwiU2FmdVwiLFxuICBzYXZpbmdEYXRhOiBcIk1hdG9rZW8geWFtZWhpZmFkaGl3YSBrd2Egc2V2YS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiS29zYSBsaW1ldG9rZWEgbmEgaGF0dWt1d2V6YSBrdWhpZmFkaGkgbWF0b2tlby5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiTWF0b2tlbyB5YW1laGlmYWRoaXdhIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiSmFyaWJ1IHRlbmFcIixcbiAgdGltZXJNaW46IFwiZGFraWthXCIsXG4gIHRpbWVyU2VjOiBcInNla3VuZGVcIixcbiAgdGltZXJTcGVudEFsbDogXCJVbWV0dW1pYSB7MH0ga3dlbnllIHVrdXJhc2EgaHV1IG5hIHsxfSBrd2EganVtbGEuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlVtZXR1bWlhIHswfSBrd2VueWUgdWt1cmFzYSBodXUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVW1ldHVtaWEgezB9IGt3YSBqdW1sYS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dlbnllIHVrdXJhc2EgaHV1IHsyfSB3YSB7M30ga3dhIGp1bWxhLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3ZW55ZSB1a3VyYXNhIGh1dS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3YSBqdW1sYS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlNhZmlzaGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIk9uZG9hXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNoYWd1YSBmYWlsaVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJPbmRvYSBmYWlsaVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIk5kaW9cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhcGFuYVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZSEgVW5hIHVoYWtpa2Ega3V3YSB1bmF0YWthIGt1b25kb2EgZmFpbGkgaGlpOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZSEgVW5hIHVoYWtpa2Ega3V3YSB1bmF0YWthIGt1b25kb2EgZmFpbGkgem90ZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIktpY2h3YSBjaGEgU3dhbGlcIixcbn07XG5cblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzd1wiXSA9IHN3YWhpbGlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wic3dcIl0gPSBcIlN3YWhpbGlcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vc3dhaGlsaS50cyIsIi8vQ3JlYXRlIGJ5IE1hdHRpYXMgQXNwbHVuZFxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzd2VkaXNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkbDtnJlZ8OlZW5kZVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiTsOkc3RhXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGw6RyZGlnXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQW5uYXQgKGJlc2tyaXYpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaWRhIHswfSBhdiB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRGV0IGZpbm5zIGluZ2VuIHN5bmxpZyBzaWRhIGVsbGVyIGZyw6VnYSBpIGVua8OkdGVuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRhY2sgZsO2ciBhdHQgZHUgZ2Vub21mw7ZydCBlbmvDpHRlbiEhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiRW5rw6R0ZW4gbGFkZGFzLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlbDpGxqLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmFyIHbDpG5saWcgYmVzdmFyYSBmcsOlZ2FuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdvcm5hIHDDpSBhbGxhIHJhZGVyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVsOkcmRldCBza2EgdmFyYSBudW1lcmlza3QuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVmFyIHbDpG5saWcgYW5nZSBtaW5zdCB7MH0gdGVja2VuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZhciB2w6RubGlnIGZ5bGwgaSBtaW5zdCB7MH0gcmFkZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIMOldG1pbnN0b25lIHswfSB2YXJpYW50ZXIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlZhciB2w6RubGlnIHbDpGxqIGludGUgZmxlciDDpG4gezB9IHZhcmlhbnRlci5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1lciDDpG4gezF9IHNhbXQgbGlrYSBtZWQgZWxsZXIgbWluZHJlIMOkbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHNrYSB2YXJhIGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJWYXIgdsOkbmxpZyBhbmdlIGVuIGtvcnJla3QgZS1wb3N0YWRyZXNzLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRsO2cmZyw6VnYW4gcmV0dXJuZXJhZGUgZmVsZXQgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJBbnRpbmdlbiByZXR1cm5lcmFkZSBmw7ZyZnLDpWdhbiBpbmdlbiBkYXRhIGVsbGVyIHPDpSDDpHIgZWdlbnNrYXBlbiAncGF0aCcgaW50ZSBrb3JyZWt0XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmlsc3Rvcmxla2VuIGbDpXIgZWogw7Z2ZXJzdGlnYSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBhbmdlIGRldCBhbmRyYSB2w6RyZGV0LlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRGluIGZpbCBsYWRkYXMgdXBwLiBWYXIgdsOkbmxpZyB2w6RudGEgbsOlZ3JhIHNla3VuZGVyIG9jaCBmw7Zyc8O2ayBzZWRhbiBpZ2VuLlwiLFxuICBhZGRSb3c6IFwiTMOkZ2cgdGlsbCByYWRcIixcbiAgcmVtb3ZlUm93OiBcIlRhIGJvcnRcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJzdlwiXSA9IHN3ZWRpc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wic3ZcIl0gPSBcInN2ZW5za2FcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vc3dlZGlzaC50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdGFqaWtTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0JHQvtC30LPQsNGI0YJcIixcbiAgcGFnZU5leHRUZXh0OiBcItCe0Y/QvdC00LBcIixcbiAgY29tcGxldGVUZXh0OiBcItCY0rfRgNC+INGI0YPQtFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J7Sk9C+0LdcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQlNC40LPQsNGAICjQu9GD0YLRhNCw0L0g0YLQsNCy0YHQuNGEINC60YPQvdC10LQpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC1XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItKy0LDQvNCw0YDQviDQuNC90YLQuNGF0L7QsSDQutCw0YDQtNCw0L1cIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0LDSs9C40YTQsNC4IHswfSDQsNC3IHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLQr9Cz0L7QvSDRgdCw0LLQvtC7INCy0YPSt9GD0LQg0L3QsNC00L7RgNCw0LQuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0KLQsNGI0LDQutC60YPRgCDQsdCw0YDQvtC4INC/0YPRgCDQutCw0YDQtNCw0L3QuCDRgdCw0LLQvtC70L3QvtC80LAhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQqNGD0LzQviDQsNC70LvQsNC60LDQuSDQuNC9INC/0YPRgNGB0LjRiNGA0L4g0LDQvdK30L7QvCDQtNC+0LTQsNC10LQuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JHQvtGA0LPQuNGA06Mg0LDQtyDRgdC10YDQstC10YAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JjQvdGC0LjRhdC+0LEg0LrQsNGA0LTQsNC9Li4uXCIsXG4gIHZhbHVlOiBcItKb0LjQvNC80LDRglwiLFxuICByZXF1aXJlZEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsdCwINGB0LDQstC+0Lsg0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQmNC70YLQuNC80L7RgSwg0LDSm9Cw0LvQsNC9INCx0LAg0Y/QuiDRgdCw0LLQvtC7INK30LDQstC+0LEg0LTQuNKz0LXQtC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDSs9Cw0LzQsNC4INGB0LDQstC+0LvSs9C+INC00LDRgCDSs9Cw0LzQsNC4INGB0LDRgtGA0rPQviDSt9Cw0LLQvtCxINC00LjSs9C10LQuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLSttCw0LLQvtCxINCx0L7Rj9C0INGA0LDSm9Cw0Lwg0LHQvtGI0LDQtC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQmNC70YLQuNC80L7RgSwg0LDQtyB7MH0g0LfQuNGR0LTRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQutCw0LzRgtCw0YAg0YDQsNC80Lcg0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQt9C40ZHQtNGC0LDRgCDQstCwINCw0LcgezF9INC60LDQvNGC0LDRgCDRgNCw0LzQtyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINC90LAg0LrQsNC80YLQsNGAINCw0LcgezB9INGB0LDRgtGAINC/0YPRgCDQutGD0L3QtdC0LlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LDSm9Cw0LvQsNC9IHswfSDQstCw0YDQuNCw0L3RgiDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0L3QsCDQt9C40ZHQtNGC0LDRgCDQsNC3IHswfSDQstCw0YDQuNCw0L3RgiDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0LlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScg0LHQvtGP0LQg0L3QsCDQutCw0Lwg0LDQtyB7MX0g0LLQsCDQvdCwINCx0LjRgdGR0YAg0LDQtyB7Mn0g0LHQvtGI0LDQtFwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINCx0L7Rj9C0INC90LAg0LrQsNC8INCw0LcgezF9INCx0L7RiNCw0LRcIixcbiAgbnVtZXJpY01heDogXCInezB9JyDQsdC+0Y/QtCDQvdCwINC30LjRkdC0INCw0LcgezF9INCx0L7RiNCw0LRcIixcbiAgaW52YWxpZEVtYWlsOiBcItCY0LvRgtC40LzQvtGBLCDQv9C+0YfRgtCw0Lgg0Y3Qu9C10LrRgtGA0L7QvdC40Lgg0LLQvtKb0LXQuNGA0L4g0LLQvtGA0LjQtCDQutGD0L3QtdC0LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQmNGE0L7QtNCw0LggezB9INCx0L7Rj9C0ICd0cnVlJyDQsdCw0YDQs9Cw0YDQtNC+0L3QsNC0LlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JTQsNGA0YXQvtGB0YIg0YXQsNGC0L7Qs9OjINCx0L7Qt9Cz0LDRgNC00L7QvdC0ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0rbQsNCy0L7QsSDQsdCwINC00LDRgNGF0L7RgdGCINGF0L7Qu9OjINC+0LzQsNC0INGRINGF0L7RgdC40Y/RgtC4ICdwYXRoJyDQvdC+0LTRg9GA0YPRgdGCINC80YPQsNC50Y/QvSDQutCw0YDQtNCwINGI0YPQtNCw0LDRgdGCXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0JDQvdC00L7Qt9Cw0Lgg0YTQsNC50Lsg0LHQvtGP0LQg0L3QsCDQutCw0LvQvtC9INCw0LcgezB9INCx0L7RiNCw0LQuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0LHQsCDQvNCw0LnQtNC+0L3QuCAn0JTQuNCz0LDRgCcg0LTQvtC00LDSs9C+0YDQviDQstC+0YDQuNC0INC60YPQvdC10LRcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCk0LDQudC70Lgg0YjRg9C80L4g0LHQvtGAINGI0YPQtNCwINC40YHRgtC+0LTQsNCw0YHRgi4g0K/QutGH0LDQvdC0INGB0L7QvdC40Y8g0LjQvdGC0LjQt9C+0YAg0YjQsNCy0LXQtCDQstCwINCx0L7RgNC4INC00LjQs9Cw0YAg0LrTr9GI0LjRiCDQutGD0L3QtdC0LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQkdC+0YDQutGD0L3Toy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCk0LDQudC7KNKz0L4pLdGA0L4g0LjQvdGC0LjRhdC+0LEg0LrRg9C90LXQtC4uLlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCo0YPQvNC+INC80YPRgtC80LDQuNC9INKz0LDRgdGC0LXQtCwg0LrQuCDQvNC10YXQvtKz0LXQtCDQstC+0YDQuNC00YDQviDRgtC+0LfQsCDQutGD0L3QtdC0P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCY0L0g0LDRgNC30LjRiCDQsdC+0Y/QtCDQsdC10L3QsNC30LjRgCDQsdC+0YjQsNC0LlwiLFxuICBhZGRDb2x1bW46IFwi0JjQu9C+0LLQsNC4INGB0YPRgtGD0L1cIixcbiAgYWRkUm93OiBcItCY0LvQvtCy0LDQuCDRgdCw0YLRgFwiLFxuICByZW1vdmVSb3c6IFwi0J3QtdGB0YIg0LrQsNGA0LTQsNC9XCIsXG4gIGFkZFBhbmVsOiBcItCY0LvQvtCy0LAg0LrQsNGA0LTQsNC9XCIsXG4gIHJlbW92ZVBhbmVsOiBcItCd0LXRgdGCINC60LDRgNC00LDQvVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0JLQsNGA0LjQsNC90YJcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQodGD0YLRg9C9XCIsXG4gIG1hdHJpeF9yb3c6IFwi0KHQsNGC0YBcIixcbiAgc2F2aW5nRGF0YTogXCLQndCw0YLQuNK30LAg0LHQsCDRgdC10YDQstC10YAg0YHQsNCx0YIg0YjRg9C00LAg0LjRgdGC0L7QtNCw0LDQvdC0Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQpdCw0YLQvtCz06Mg0LHQsCDQsNC80LDQuyDQvtC80LDQtCwg0L3QsNGC0LjSt9CwINGB0LDQsdGCINC90LDRiNGD0LQuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCd0LDRgtC40rfQsCDQsdC+0LzRg9Cy0LDRhNGE0LDQutC40Y/RgiDRgdCw0LHRgiDRiNGD0LQhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQkdC+0YDQuCDQtNC40LPQsNGAINC606/RiNC40Ygg0LrQsNGA0LTQsNC90LRcIixcbiAgdGltZXJNaW46IFwi0LTQsNKbXCIsXG4gIHRpbWVyU2VjOiBcItGB0L7QvVwiLFxuICB0aW1lclNwZW50QWxsOiBcItCo0YPQvNC+IHswfSDQtNCw0YAg0LjQvSDRgdCw0rPQuNGE0LAg0LLQsCB7MX0g0LTQsNGAINGD0LzRg9C8INGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGC0LXRgdGCINGB0LDRgNGEINC90LDQvNGD0LTQtdC0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDQstCwIHsyfSDQsNC3IHszfSDQtNCw0YAg0YPQvNGD0Lwg0YHQsNGA0YQg0LrQsNGA0LTQtdC0INC00LDRgCDQtNC+0YXQuNC70Lgg0LjQvSDRgtC10YHRgi5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDRgdCw0YDRhCDQutCw0YDQtNC10LQuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0KjRg9C80L4gezB9INCw0LcgezF9INC00LDRgCDSs9Cw0LzQsNC4INGC0LXRgdGCINGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCi0L7Qt9CwINC60LDRgNC00LDQvVwiLFxuICBjbGVhckNhcHRpb246IFwi0KLQvtC30LAg0LrQsNGA0LTQsNC9XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCk0LDQudC70YDQviDQvdC10YHRgiDQutCw0YDQtNCw0L1cIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0Z1wiXSA9IHRhamlrU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInRnXCJdID0gXCLRgtC+0rfQuNC606NcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vdGFqaWsudHMiLCIvL0NyZWF0ZWQgYnkgUGFkZXQgVGF3ZWVrdW5rYW5cbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdGhhaVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLguIHguYjguK3guJnguKvguJnguYnguLJcIixcbiAgcGFnZU5leHRUZXh0OiBcIuC4luC4seC4lOC5hOC4m1wiLFxuICBjb21wbGV0ZVRleHQ6IFwi4Liq4Liz4LmA4Lij4LmH4LiIXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLguYDguKPguLTguYjguKFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLguK3guLfguYjguJnguYYgKOC5guC4m+C4o+C4lOC4o+C4sOC4muC4uClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuC5hOC4oeC5iOC4oeC4tVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLguYDguKXguLfguK3guIHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuC4q+C4meC5ieC4suC4l+C4teC5iCB7MH0g4LiI4Liy4LiBIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi4Lij4Liy4Lii4LiB4Liy4Lij4LiX4Li14LmIIHswfSDguIjguLLguIEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLguITguLPguJXguK3guJrguJfguLXguYggezB9L3sxfSDguIjguLPguJnguKfguJnguITguLPguJbguLLguKFcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi4LmE4Lih4LmI4Lih4Li14Lir4LiZ4LmJ4Liy4LmA4Lie4LiI4LiX4Li14LmI4Lih4Lit4LiH4LmA4Lir4LmH4LiZIOC4q+C4o+C4t+C4rSDguITguLPguJbguLLguKHguYPguJkgc3VydmV5IOC4meC4teC5iVwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuC4guC4reC4muC4hOC4uOC4k+C4l+C4teC5iOC4l+C4syBzdXJ2ZXkg4LiI4LiZ4LmA4Liq4Lij4LmH4LiIXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLguKPguLLguKLguIHguLLguKPguILguK3guIfguYDguKPguLLguYHguKrguJTguIfguKfguYjguLLguITguLjguJPguYTguJTguYnguJfguLMgc3VydmV5IOC5gOC4quC4o+C5h+C4iOC5gOC4o+C4teC4ouC4muC4o+C5ieC4reC4ouC5geC4peC5ieC4p1wiLFxuICBsb2FkaW5nU3VydmV5OiBcIuC4geC4s+C4peC4seC4h+C5guC4q+C4peC4lCBTdXJ2ZXkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi4LmA4Lil4Li34Lit4LiBLi4uXCIsXG4gIHZhbHVlOiBcIuC4guC5ieC4reC4oeC4ueC4pVwiLFxuICByZXF1aXJlZEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4hOC4s+C4luC4suC4oVwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLguIHguKPguLjguJPguLLguJXguK3guJrguILguLHguYnguJnguJXguYjguLPguKvguJnguLbguYjguIfguITguLPguJbguLLguKFcIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLguIHguKPguLjguJPguLLguJXguK3guJrguITguLPguJbguLLguKHguYPguJnguJfguLjguIHguYbguYHguJbguKdcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuC4guC5ieC4reC4oeC4ueC4peC4l+C4teC5iOC5g+C4quC5iOC4leC5ieC4reC4h+C5gOC4m+C5h+C4meC4leC4seC4p+C5gOC4peC4glwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHswfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC5geC4peC4sOC5hOC4oeC5iOC5gOC4geC4tOC4meC4iOC4s+C4meC4p+C4mSB7MX0g4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4LiI4Liz4LiZ4Lin4LiZIHswfSDguYHguJbguKdcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiIHswfSDguKPguLLguKLguIHguLLguKNcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4LmE4Lih4LmI4LmA4LiB4Li04LiZIHswfSDguKPguLLguKLguIHguLLguKNcIixcbiAgbnVtZXJpY01pbk1heDogXCInezB9JyDguJXguYnguK3guIfguKHguLLguIHguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9IOC5geC4peC4sOC4meC5ieC4reC4ouC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDguJXguYnguK3guIfguKHguLLguIHguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg4LiZ4LmJ4Lit4Lii4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4Lit4Li14LmA4Lih4Lil4LmM4LmB4Lit4LiU4LmA4LiU4Lij4Liq4LiX4Li14LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0g4LiV4LmJ4Lit4LiH4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIuC4o+C4teC5gOC4hOC4p+C4quC4o+C4teC5gOC4l+C4tOC4o+C5jOC4mSBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIuC4o+C4teC5gOC4hOC4p+C4quC4o+C4teC5gOC4l+C4tOC4o+C5jOC4meC4guC5ieC4reC4oeC4ueC4peC4p+C5iOC4suC4h+C5gOC4m+C4peC5iOC4siDguKvguKPguLfguK0gJ3BhdGgnIHByb3BlcnR5IOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxuICBleGNlZWRNYXhTaXplOiBcIuC4guC4meC4suC4lOC5hOC4n+C4peC5jOC4leC5ieC4reC4h+C5hOC4oeC5iOC5gOC4geC4tOC4mSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLguIHguKPguLjguJPguLLguYPguKrguYjguITguYjguLLguK3guLfguYjguJlcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIuC5hOC4n+C4peC5jOC4guC4reC4h+C4hOC4uOC4k+C4geC4s+C4peC4seC4h+C4reC4seC4nuC5guC4q+C4peC4lOC4reC4ouC4ueC5iC4g4LiB4Lij4Li44LiT4Liy4Lij4Lit4Liq4Lix4LiB4LiE4Lij4Li54LmI4LmB4Lil4LmJ4Lin4LiX4Liz4LiB4Liy4Lij4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXG4gIGxvYWRpbmdGaWxlOiBcIuC4geC4s+C4peC4seC4h+C5guC4q+C4peC4lC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIuC5gOC4peC4t+C4reC4geC5hOC4n+C4peC5jC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi4LmE4Lih4LmI4LmE4Lif4Lil4LmM4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Lil4Lia4Lij4Liy4Lii4LiB4Liy4Lij4LiZ4Li14LmJ4LiI4Lij4Li04LiH4Lir4Lij4Li34Lit4LmE4Lih4LmIP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuC4guC5ieC4reC4oeC4ueC4peC4meC4teC5ieC4leC5ieC4reC4h+C5gOC4m+C5h+C4mSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCLguYDguJ7guLTguYjguKHguITguK3guKXguLHguKHguJnguYxcIixcbiAgYWRkUm93OiBcIuC5gOC4nuC4tOC5iOC4oeC5geC4luC4p1wiLFxuICByZW1vdmVSb3c6IFwi4Lil4LiaXCIsXG4gIGFkZFBhbmVsOiBcIuC5gOC4nuC4tOC5iOC4oVwiLFxuICByZW1vdmVQYW5lbDogXCLguKXguJpcIixcbiAgY2hvaWNlc19JdGVtOiBcIuC4iuC4tOC5ieC4mVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuC4hOC4reC4peC4seC4oeC4meC5jFwiLFxuICBtYXRyaXhfcm93OiBcIuC5geC4luC4p1wiLFxuICBzYXZpbmdEYXRhOiBcIuC4nOC4peC4peC4seC4nuC4l+C5jOC4geC4s+C4peC4seC4h+C4muC4seC4meC4l+C4tuC4geC4peC4h+C4l+C4teC5iOC5gOC4i+C4tOC4o+C5jOC4n+C5gOC4p+C4reC4o+C5jC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi4Lih4Li14LiE4Lin4Liy4Lih4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Lia4Lix4LiZ4LiX4Li24LiB4Lic4Lil4LmE4LiU4LmJXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuC4muC4seC4meC4l+C4tuC4geC4quC4s+C5gOC4o+C5h+C4iOC5geC4peC5ieC4p1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi4Lij4Lia4LiB4Lin4LiZ4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXG4gIHRpbWVyTWluOiBcIuC4meC4suC4l+C4tVwiLFxuICB0aW1lclNlYzogXCLguKfguLTguJnguLLguJfguLVcIixcbiAgdGltZXJTcGVudEFsbDogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5ieC5geC4peC4sCB7MX0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgdGltZXJMaW1pdEFsbDogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJ4LmB4Lil4LiwIHsyfSDguILguK3guIcgezN9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguILguK3guIcgezF9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICBjbGVhbkNhcHRpb246IFwi4LiE4Lil4Li14LiZXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLguYDguITguKXguLXguKLguKPguYxcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmMXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4gVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIuC5g+C4iuC5iFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi4LmE4Lih4LmI4LmD4LiK4LmIXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuC4hOC4uOC4k+C5geC4meC5iOC5g+C4iOC4l+C4teC5iOC4iOC4sOC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4geC5g+C4iuC5iOC4q+C4o+C4t+C4reC5hOC4oeC5iDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4LiX4Li14LmI4LiI4Liw4LiZ4Liz4LmE4Lif4Lil4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4Lit4Lit4LiB4LmD4LiK4LmI4Lir4Lij4Li34Lit4LmE4Lih4LmIXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLguIrguLfguYjguK3guITguLPguJbguLLguKFcIixcbn07XG5cbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0aFwiXSA9IHRoYWlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widGhcIl0gPSBcIuC5hOC4l+C4olwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi90aGFpLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0cmFkaXRpb25hbENoaW5lc2VTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi5LiK5LiA6aCBXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLkuIvkuIDpoIFcIixcbiAgY29tcGxldGVUZXh0OiBcIuaPkOS6pOWVj+WNt1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuWhq+Wvq+WFtuS7luetlOahiFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi56ysIHswfSDpoIEsIOWFsSB7MX0g6aCBXCIsXG4gIGVtcHR5U3VydmV5OiBcIuWVj+WNt+S4reaykuacieWVj+mhjOaIlumggemdolwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuaEn+isneaCqOeahOWPg+iIhyFcIixcbiAgbG9hZGluZ1N1cnZleTogXCLllY/ljbfovInlhaXkuK0uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi6KuL6YG45pOHLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi6KuL5aGr5a+r5q2k5ZWP6aGMXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6KuL5aGr5a+r5omA5pyJ6KGM5Lit5ZWP6aGMXCIsXG4gIG51bWVyaWNFcnJvcjogXCLnrZTmoYjlv4XpoIjmmK/lgIvmlbjlrZdcIixcbiAgdGV4dE1pbkxlbmd0aDogXCLnrZTmoYjplbfluqboh7PlsJEgezB9IOWAi+Wtl+WFg1wiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuetlOahiOmVt+W6puS4jeiDvei2hemBjiB7MH0g5YCL5a2X5YWDXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi562U5qGI6ZW35bqm5b+F6aCI5ZyoIHswfSAtIHsxfSDlgIvlrZflhYPkuYvplpNcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLmnIDlsJHpnIDopoHloavlr6sgezB9IOihjOetlOahiFwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLmnIDlsJHpnIDopoHpgbjmk4cgezB9IOmgheetlOahiFwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLmnIDlpJrlj6rog73pgbjmk4cgezB9IOmgheetlOahiFwiLFxuICBudW1lcmljTWluTWF4OiBcIuetlOahiCAnezB9JyDlv4XpoIjlpKfmlrznrYnmlrwgezF9IOS4lOWwj+aWvOetieaWvCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCLnrZTmoYggJ3swfScg5b+F6aCI5aSn5pa8562J5pa8IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIuetlOahiCAnezB9JyDlv4XpoIjlsI/mlrznrYnmlrwgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLoq4vovLjlhaXmnInmlYjnmoQgRW1haWwg5Zyw5Z2AXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLovInlhaXpgbjpoIXmmYLnmbznlJ/pjK/oqqQgJ3swfSc6IHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi5pyq6IO96LyJ5YWl5pyJ5pWI55qE6YG46aCF5oiW6KuL5rGC5Y+D5pW46Lev5b6R5pyJ6KqkXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi5paH5Lu25aSn5bCP5LiN6IO96LaF6YGOIHswfVwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi6KuL5a6M5oiQ5YW25LuW5ZWP6aGMXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi5paH5Lu25LiK5YKz5LitLi4uIOiri+iAkOW/g+etieW+heW5vuenkuW+jOmHjeipplwiLFxuICBhZGRSb3c6IFwi5re75Yqg562U5qGIXCIsXG4gIHJlbW92ZVJvdzogXCLliKrpmaTnrZTmoYhcIixcbiAgY2hvaWNlc19JdGVtOiBcIumBuOmghVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuWIl1wiLFxuICBtYXRyaXhfcm93OiBcIuihjFwiLFxuICBzYXZpbmdEYXRhOiBcIuato+WcqOWwh+e1kOaenOS/neWtmOWIsOacjeWLmeWZqC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi5Zyo5L+d5a2Y57WQ5p6c6YGO56iL5Lit55m855Sf5LqG6Yyv6Kqk77yM57WQ5p6c5pyq6IO95L+d5a2YXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIue1kOaenOS/neWtmOaIkOWKnyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuiri+mHjeipplwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInpoLXR3XCJdID0gdHJhZGl0aW9uYWxDaGluZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInpoLXR3XCJdID0gXCLnuYHpq5TkuK3mlodcIjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdHVya2lzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJHZXJpXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLEsGxlcmlcIixcbiAgY29tcGxldGVUZXh0OiBcIkFua2V0aSBUYW1hbWxhXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiRGnEn2VyIChhw6fEsWtsYXnEsW7EsXopXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTYXlmYSB7MH0gLyB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiQW5rZXR0ZSBnw7Zyw7xudMO8bGVuZWNlayBzYXlmYSB5YSBkYSBzb3J1IG1ldmN1dCBkZcSfaWwuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiQW5rZXRpbWl6aSB0YW1hbWxhZMSxxJ/EsW7EsXogacOnaW4gdGXFn2Vra8O8ciBlZGVyaXouXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQW5rZXQgc3VudWN1ZGFuIHnDvGtsZW5peW9yIC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZcOnaW5peiAuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJMw7x0ZmVuIHNvcnV5YSBjZXZhcCB2ZXJpbml6XCIsXG4gIG51bWVyaWNFcnJvcjogXCJHaXJpbGVuIGRlxJ9lciBudW1lcmlrIG9sbWFsxLFkxLFyXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiRW4gYXogezB9IHNlbWJvbCBnaXJpbml6LlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNhdMSxcsSxIGRvbGR1cnVuLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJMw7x0ZmVuIGVuIGF6IHswfSBzZcOnZW5lxJ9pIHNlw6dpbml6LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJMw7x0ZmVuIHswfSBhZGV0dGVuIGZhemxhIHNlw6dtZXlpbml6LlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9IGFuZCBlcXVhbCBvciBsZXNzIHRoYW4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHZleWEgYsO8ecO8ayBvbG1hbMSxZMSxclwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBrw7zDp8O8ayBvbG1hbMSxZMSxci5cIixcbiAgaW52YWxpZEVtYWlsOiBcIkzDvHRmZW4gZ2XDp2VybGkgYmlyIGVwb3N0YSBhZHJlc2kgZ2lyaW5pei5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRhbGViaSDFn3UgaGF0YXnEsSBkw7ZuZMO8ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGFsZXAgaGVyaGFuZ2kgYmlyIHZlcmkgZMO2bm1lZGkgeWEgZGEgJ3BhdGgnIMO2emVsbGnEn2kgaGF0YWzEsS5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEb3N5YSBib3l1dHUgezB9IGRlxJ9lcmluaSBnZcOnZW1lei5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gZGnEn2VyIGRlxJ9lcmxlcmkgZ2lyaW5pei5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRvc3lhbsSxeiB5w7xrbGVuaXlvci4gTMOcdGZlbiBiaXJrYcOnIHNhbml5ZSBiZWtsZXlpbiB2ZSB0ZWtyYXIgZGVuZXlpbi5cIixcbiAgYWRkUm93OiBcIlNhdMSxciBFa2xlXCIsXG4gIHJlbW92ZVJvdzogXCJLYWxkxLFyXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widHJcIl0gPSB0dXJraXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInRyXCJdID0gXCJ0w7xya8OnZVwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0JTQsNC70ZZcIixcbiAgY29tcGxldGVUZXh0OiBcItCX0LDQstC10YDRiNC40YLQuFwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J/QvtGH0LDRgtC4XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0IbQvdGI0LUgKNCx0YPQtNGMINC70LDRgdC60LAsINC+0L/QuNGI0ZbRgtGMKVwiLFxuICBub25lSXRlbVRleHQ6IFwi0JbQvtC00LXQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktC40LHRgNCw0YLQuCDQstGB0LVcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItCh0YLQvtGA0ZbQvdC60LAgezB9INC3IHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi0JLRltC00L/QvtCy0ZbQu9C4INC90LAgezB9L3sxfSDQv9C40YLQsNC90YxcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0J3QtdC80LDRlCDQttC+0LTQvdC+0LPQviDQv9C40YLQsNC90L3Rjy5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQlNGP0LrRg9GU0LzQviDQktCw0Lwg0LfQsCDQt9Cw0L/QvtCy0L3QtdC90L3RjyDQsNC90LrQtdGC0LghXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLQktC4INCy0LbQtSDQv9GA0L7RhdC+0LTQuNC70Lgg0YbQtSDQvtC/0LjRgtGD0LLQsNC90L3Rjy5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0L7Qv9C40YLRg9Cy0LDQvdC90Y8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0JLQuNCx0YDQsNGC0LguLi5cIixcbiAgdmFsdWU6IFwi0LfQvdCw0YfQtdC90L3Rj1wiLFxuICByZXF1aXJlZEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQtNCw0LnRgtC1INCy0ZbQtNC/0L7QstGW0LTRjCDRhdC+0YfQsCDQsSDQvdCwINC+0LTQvdC1INC/0LjRgtCw0L3QvdGPLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMINC90LAg0L/QuNGC0LDQvdC90Y8g0LIg0LrQvtC20L3QvtC80YMg0YDRj9C00LrRgy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCS0ZbQtNC/0L7QstGW0LTRjCDQv9C+0LLQuNC90L3QsCDQsdGD0YLQuCDRh9C40YHQu9C+0LwuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQsdGW0LvRjNGI0LUgezB9INGB0LjQvNCy0L7Qu9GW0LIuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQvNC10L3RiNC1IHswfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCR0YPQtNGMINC70LDRgdC60LAg0LLQstC10LTRltGC0Ywg0LHRltC70YzRiNC1IHswfSDQuCDQvNC10L3RiNC1IHsxfSDRgdC40LzQstC+0LvRltCyLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC30LDQv9C+0LLQvdGW0YLRjCDQvdC1INC80LXQvdGI0LUgezB9INGA0Y/QtNC60ZbQsi5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQuNCx0LXRgNGW0YLRjCDRhdC+0YfQsCDQsSB7MH0g0LLQsNGA0ZbQsNC90YLRltCyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstC40LHQtdGA0ZbRgtGMINC90LUg0LHRltC70YzRiNC1IHswfSDQstCw0YDRltCw0L3RgtGW0LIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INC80LXQvdGI0LUg0L3RltC2IHsxfSwg0ZYg0L3QtSDQsdGW0LvRjNGI0LUg0L3RltC2IHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LzQtdC90YjQtSDQvdGW0LYgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQsdGW0LvRjNGI0LUg0L3RltC2IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LLQstC10LTRltGC0Ywg0LTRltC50YHQvdGDINCw0LTRgNC10YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LguXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCS0LjRgNCw0LcgezB9INC/0L7QstC40L3QtdC9INC/0L7QstC10YDRgtCw0YLQuCAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQl9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LIg0L/QvtC80LjQu9C60YMgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQktGW0LTQv9C+0LLRltC00Ywg0L3QsCDQt9Cw0L/QuNGCINC/0L7QstC10YDQvdGD0LvQsNGB0Ywg0L/QvtGA0L7QttC90YzQvtGOINCw0LHQviDQstC70LDRgdGC0LjQstGW0YLRjCAncGF0aCcg0LLQutCw0LfQsNC90L4g0L3QtdCy0ZbRgNC90L5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQoNC+0LfQvNGW0YAg0YTQsNC50LvRgyDQvdC1INC/0L7QstC40L3QtdC9INC/0LXRgNC10LLQuNGJ0YPQstCw0YLQuCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQtNCw0L3RliDQsiDQv9C+0LvQtSAn0IbQvdGI0LUnXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQktCw0Ygg0YTQsNC50Lsg0LfQsNCy0LDQvdGC0LDQttGD0ZTRgtGM0YHRjy4g0JfQsNGH0LXQutCw0LnRgtC1INC00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0INGWINGB0L/RgNC+0LHRg9C50YLQtSDQt9C90L7QstGDLlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0LLQsNC90YLQsNC20LXQvdC90Y8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQktC40LHQtdGA0ZbRgtGMINGE0LDQudC7KNC4KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi0KTQsNC50Lsg0L3QtSDQstC40LHRgNCw0L3QvlwiLFxuICBjb25maXJtRGVsZXRlOiBcItCS0Lgg0YXQvtGH0LXRgtC1INCy0LjQtNCw0LvQuNGC0Lgg0LfQsNC/0LjRgT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQptC1INC30L3QsNGH0LXQvdC90Y8g0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0YPQvdGW0LrQsNC70YzQvdC40LwuXCIsXG4gIGFkZENvbHVtbjogXCLQlNC+0LTQsNGC0Lgg0LrQvtC70L7QvdC60YNcIixcbiAgYWRkUm93OiBcItCU0L7QtNCw0YLQuCDRgNGP0LTQvtC6XCIsXG4gIHJlbW92ZVJvdzogXCLQktC40LTQsNC70LjRgtC4XCIsXG4gIGFkZFBhbmVsOiBcItCU0L7QtNCw0YLQuCDQvdC+0LLRg1wiLFxuICByZW1vdmVQYW5lbDogXCLQktC40LTQsNC70LjRgtC4XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQktCw0YDRltCw0L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QutCwXCIsXG4gIG1hdHJpeF9yb3c6IFwi0KDRj9C00L7QulwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRjNGC0LDRgtC4INC30LHQtdGA0ZbQs9Cw0Y7RgtGM0YHRjyDQvdCwINGB0LXRgNCy0LXRgC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi0JLRltC00LHRg9C70LDRgdGPINC/0L7QvNC40LvQutCwLCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQsdGD0LIg0LfQsdC10YDQtdC20LXQvdC40LkuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9Cy0YPQu9GM0YLQsNGCINGD0YHQv9GW0YjQvdC+INC30LHQtdGA0LXQttC10L3QuNC5IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi0KHQv9GA0L7QsdGD0LLQsNGC0Lgg0LfQvdC+0LLRg1wiLFxuICB0aW1lck1pbjogXCLRhdCyXCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWINGWIHsxfSDQt9Cw0LPQsNC70L7QvC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC/0YDQvtGC0Y/Qs9C+0Lwg0YLQtdGB0YLRgy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRliDRliB7Mn0g0LcgezN9INC00LvRjyDQstGB0YzQvtCz0L4g0YLQtdGB0YLRgy5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC3IHsxfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0Lgg0LLQuNGC0YDQsNGC0LjQu9C4IHswfSDQtyB7MX0g0LTQu9GPINCy0YHRjNC+0LPQviDRgtC10YHRgtGDLlwiLFxuICBjbGVhbkNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLQuFwiLFxuICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLQuFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQktC40LTQsNC70LjRgtC4INGE0LDQudC7XCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widWFcIl0gPSB1a3JhaW5pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widWFcIl0gPSBcItGD0LrRgNCw0ZfQvdGB0YzQutCwXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3VrcmFpbmlhbi50cyIsImltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGJvb2xlYW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxGYWxzZVwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jTGFiZWxGYWxzZS5vbkdldFRleHRDYWxsYmFjayA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuICEhdGV4dFxuICAgICAgICA/IHRleHRcbiAgICAgICAgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiYm9vbGVhblVuY2hlY2tlZExhYmVsXCIpO1xuICAgIH07XG4gICAgdGhpcy5sb2NMYWJlbFRydWUub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHRcbiAgICAgICAgPyB0ZXh0XG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImJvb2xlYW5DaGVja2VkTGFiZWxcIik7XG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfVxuICBpc0xheW91dFR5cGVTdXBwb3J0ZWQobGF5b3V0VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gY2hlY2sgd2lsbCBiZSByZW5kZXJlZCBpbiBpbmRldGVybWluYXRlIG1vZGUuIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9zZXQgcXVlc3Rpb24gdmFsdWUgaW4gMyBtb2RlczogaW5kZXRlcm1pbmF0ZSAodmFsdWUgaXMgZW1wdHkpLCB0cnVlIChjaGVjayBpcyBzZXQpIGFuZCBmYWxzZSAoY2hlY2sgaXMgdW5zZXQpLlxuICAgKiBAc2VlIHZhbHVlVHJ1ZVxuICAgKiBAc2VlIHZhbHVlRmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWwgPT0gdHJ1ZSA/IHRoaXMuZ2V0VmFsdWVUcnVlKCkgOiB0aGlzLmdldFZhbHVlRmFsc2UoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiB0aGUgY2hlY2s6IFwiaW5kZXRlcm1pbmF0ZVwiIC0gZGVmYXVsdCAodmFsdWUgaXMgZW1wdHkvbnVsbCksIFwidHJ1ZVwiIC0gdmFsdWUgZXF1YWxzIHZhbHVlVHJ1ZSBvciB0cnVlLCBcImZhbHNlXCIgLSB2YWx1ZSBlcXVhbHMgdmFsdWVGYWxzZSBvciBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZSh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUpIHZhbCA9IFwidHJ1ZVwiO1xuICAgIGlmICh2YWwgPT09IGZhbHNlKSB2YWwgPSBcImZhbHNlXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcInRydWVcIlxuICAgICAgPyB0aGlzLmdldFZhbHVlVHJ1ZSgpXG4gICAgICA6IHRoaXMuZ2V0VmFsdWVGYWxzZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNob3dUaXRsZSB8fCB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmxvY0xhYmVsLnRleHQpXG4gICAgICA/IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiKVxuICAgICAgOiB0aGlzLmxvY0xhYmVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2hlY2tib3ggbGFiZWwuIElmIGl0IGlzIGVtcHR5IGFuZCBzaG93VGl0bGUgaXMgZmFsc2UgdGhlbiB0aXRsZSBpcyByZW5kZXJlZFxuICAgKiBAc2VlIHNob3dUaXRsZVxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTGFiZWwoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxcIik7XG4gIH1cbiAgZ2V0IGxvY0Rpc3BsYXlMYWJlbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9jTGFiZWwudGV4dCkgcmV0dXJuIHRoaXMubG9jTGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlID8gdGhpcy5sb2NMYWJlbCA6IHRoaXMubG9jVGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgbGFiZWwgZm9yIHN0YXRlIHdoZW4gY2hlY2sgaXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbFRydWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbFRydWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbFRydWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NMYWJlbFRydWUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IGxhYmVsIGZvciBzdGF0ZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbEZhbHNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhYmVsRmFsc2UodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsRmFsc2VcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTGFiZWxGYWxzZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gc2hvdyB0aGUgcXVlc3Rpb24gdGl0bGUuIEl0IGlzIGhpZGRlbiBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUaXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dUaXRsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGl0bGVcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tIHRydWUgd2hlbiBjaGVjayBpcyBzZXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlVHJ1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVRydWVcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZVRydWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVRydWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZnJvbSBmYWxzZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCB2YWx1ZUZhbHNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlRmFsc2VcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZUZhbHNlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVGYWxzZVwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVUcnVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVUcnVlID8gdGhpcy52YWx1ZVRydWUgOiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVGYWxzZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlRmFsc2UgPyB0aGlzLnZhbHVlRmFsc2UgOiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcInRydWVcIikgdGhpcy5jaGVja2VkVmFsdWUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcImZhbHNlXCIpIHRoaXMuY2hlY2tlZFZhbHVlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09IFwiaW5kZXRlcm1pbmF0ZVwiKSB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJvb2xlYW5cIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiZGVmYXVsdFZhbHVlOmRyb3Bkb3duXCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwiYm9vbGVhbkRlZmF1bHRWYWx1ZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbmRldGVybWluYXRlXCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbmRldGVybWluYXRlXCIsIFwiZmFsc2VcIiwgXCJ0cnVlXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImxhYmVsOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImxhYmVsVHJ1ZTp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTGFiZWxUcnVlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImxhYmVsRmFsc2U6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsRmFsc2VcIixcbiAgICB9LFxuICAgIFwic2hvd1RpdGxlOmJvb2xlYW5cIixcbiAgICBcInZhbHVlVHJ1ZVwiLFxuICAgIFwidmFsdWVGYWxzZVwiLFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkJvb2xlYW5Nb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJib29sZWFuXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25Cb29sZWFuTW9kZWwobmFtZSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9ib29sZWFuLnRzIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjaGVja2JveCBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBwcml2YXRlIG5vbmVJdGVtVmFsdWU6IEl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoXCJub25lXCIpO1xuICBwcml2YXRlIHNlbGVjdEFsbEl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcInNlbGVjdGFsbFwiKTtcbiAgcHJpdmF0ZSBpbnZpc2libGVPbGRWYWx1ZXM6IGFueSA9IHt9O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIG5vbmVJdGVtVGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJub25lVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICBub25lSXRlbVRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgcmV0dXJuICEhdGV4dCA/IHRleHQgOiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9uZUl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5ub25lSXRlbVZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLm5vbmVJdGVtVmFsdWUuc2V0TG9jVGV4dChub25lSXRlbVRleHQpO1xuXG4gICAgdmFyIHNlbGVjdEFsbEl0ZW1UZXh0ID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwic2VsZWN0QWxsVGV4dFwiLFxuICAgICAgdGhpcyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNlbGVjdEFsbEl0ZW1UZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHJldHVybiAhIXRleHQgPyB0ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInNlbGVjdEFsbEl0ZW1UZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RBbGxJdGVtLmxvY093bmVyID0gdGhpcztcbiAgICB0aGlzLnNlbGVjdEFsbEl0ZW0uc2V0TG9jVGV4dChzZWxlY3RBbGxJdGVtVGV4dCk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzTm9uZVwiLCBcIm5vbmVUZXh0XCIsIFwiaGFzU2VsZWN0QWxsXCIsIFwic2VsZWN0QWxsVGV4dFwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImdyb3VwXCI7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjaGVja2JveFwiO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge1xuICAgIHN1cGVyLm9uQ3JlYXRpbmcoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicmVuZGVyZWRWYWx1ZVwiKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidmFsdWVcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3QgYWxsIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEFsbEl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbm9uZSBpdGVtLiBCeSB1c2luZyB0aGlzIHByb3BlcnR5LCB5b3UgbWF5IGNoYW5nZSBwcm9ncmFtbWF0aWNhbGx5IGl0J3MgdmFsdWUgYW5kIHRleHQuXG4gICAqIEBzZWUgaGFzTm9uZVxuICAgKi9cbiAgcHVibGljIGdldCBub25lSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLm5vbmVJdGVtVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgZGlmZmVyZW50IHRleHQgZm9yIG5vbmUgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbm9uZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm5vbmVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibm9uZUl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5vbmVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJub25lVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NOb25lVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJub25lVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3IgU2VsZWN0IEFsbCBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RBbGxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2VsZWN0QWxsSXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0QWxsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic2VsZWN0QWxsVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NTZWxlY3RBbGxUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInNlbGVjdEFsbFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIHNob3cgdGhlIFwiU2VsZWN0IEFsbFwiIGl0ZW0gb24gdGhlIHRvcC4gSWYgZW5kLXVzZXIgY2hlY2tzIHRoaXMgaXRlbSwgdGhlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzU2VsZWN0QWxsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc1NlbGVjdEFsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNTZWxlY3RBbGxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICogQHNlZSB0b2dnbGVTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQodGhpcy5ub25lSXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgYWxsSXRlbUNvdW50ID0gdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkgYWxsSXRlbUNvdW50LS07XG4gICAgdmFyIHNlbGVjdGVkQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMub3RoZXJJdGVtKSkgc2VsZWN0ZWRDb3VudC0tO1xuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID09PSBhbGxJdGVtQ291bnQ7XG4gIH1cbiAgcHVibGljIHNldCBpc0FsbFNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSXQgd2lsbCBzZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuIElmIGFsbCBpdGVtcyBoYXZlIGJlZW4gYWxyZWFkeSBzZWxlY3RlZCB0aGVuIGl0IHdpbGwgY2xlYXIgdGhlIHZhbHVlXG4gICAqIEBzZWUgaXNBbGxTZWxlY3RlZFxuICAgKiBAc2VlIHNlbGVjdEFsbFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSAhdGhpcy5pc0FsbFNlbGVjdGVkO1xuICB9XG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIHZhciB2YWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5ub25lSXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLm90aGVySXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW1cbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YWwucHVzaChpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgXCJOb25lXCIgaXRlbSBvbiB0aGUgYm90dG9tLiBJZiBlbmQtdXNlciBjaGVja3MgdGhpcyBpdGVtLCBhbGwgb3RoZXIgaXRlbXMgd291bGQgYmUgdW5jaGVja2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNOb25lXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc05vbmUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzTm9uZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXRlbSBpcyBjaGVja2VkXG4gICAqIEBwYXJhbSBpdGVtIGNoZWNrYm94IGl0ZW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5zZWxlY3RBbGxJdGVtKSByZXR1cm4gdGhpcy5pc0FsbFNlbGVjdGVkO1xuICAgIHZhciB2YWwgPSB0aGlzLnJlbmRlcmVkVmFsdWU7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbFtpXSwgaXRlbS52YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCkge1xuICAgICAgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXMgPSBbXTtcbiAgICB9XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBbXTtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IFtdO1xuICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIG5ld1ZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIHtcbiAgICAgIHZhciBwcmV2Tm9uZUluZGV4ID0gdGhpcy5ub25lSW5kZXhJbkFycmF5KHZhbHVlKTtcbiAgICAgIHZhciBuZXdOb25lSW5kZXggPSB0aGlzLm5vbmVJbmRleEluQXJyYXkobmV3VmFsdWUpO1xuICAgICAgaWYgKHByZXZOb25lSW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEgJiYgbmV3VmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZShuZXdOb25lSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3Tm9uZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoMCwgbmV3VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMubm9uZUl0ZW0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKHRoaXMucmVuZHJlZFZhbHVlVG9EYXRhKG5ld1ZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBub25lSW5kZXhJbkFycmF5KHZhbDogYW55KSB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIC0xO1xuICAgIHZhciBub25lVmFsdWUgPSB0aGlzLm5vbmVJdGVtLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsW2ldID09IG5vbmVWYWx1ZSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5oYXNOb25lICYmICF0aGlzLmhhc1NlbGVjdEFsbCAmJiBzdXBlci5jYW5Vc2VGaWx0ZXJlZENob2ljZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPikge1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgaXRlbXMudW5zaGlmdCh0aGlzLnNlbGVjdEFsbEl0ZW0pO1xuICAgIH1cbiAgICBzdXBlci5hZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zKTtcbiAgICBpZiAodGhpcy5oYXNOb25lKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMubm9uZUl0ZW0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dCwgdmFsdWUpO1xuICAgIHZhciBpdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbFN0ciA9IHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZShpdGVtcywgdmFsdWVbaV0pO1xuICAgICAgaWYgKHZhbFN0cikge1xuICAgICAgICBpZiAoc3RyKSBzdHIgKz0gXCIsIFwiO1xuICAgICAgICBzdHIgKz0gdmFsU3RyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgdGhpcy5jbGVhckluY29ycmVjdEFuZERpc2FibGVkVmFsdWVzKHRydWUpO1xuICB9XG4gIHByaXZhdGUgaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXMoY2xlYXJEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJlc3RvcmVkVmFsdWVzID0gdGhpcy5yZXN0b3JlVmFsdWVzRnJvbUludmlzaWJsZSgpO1xuICAgIGlmICghdmFsICYmIHJlc3RvcmVkVmFsdWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSB0cnVlO1xuICAgICAgaWYgKCFjbGVhckRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gZmFsc2U7XG4gICAgICBpZiAocmVzdG9yZWRWYWx1ZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgIHZhbCA9IFtdO1xuICAgIH1cbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzVW5rb3duID0gdGhpcy5jYW5DbGVhclZhbHVlQW5Vbmtub3codmFsW2ldKTtcbiAgICAgIGlmIChcbiAgICAgICAgKCFjbGVhckRpc2FibGVkICYmICFpc1Vua293bikgfHxcbiAgICAgICAgKGNsZWFyRGlzYWJsZWQgJiYgIXRoaXMuaXNWYWx1ZURpc2FibGVkKHZhbFtpXSkpXG4gICAgICApIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaCh2YWxbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Vua293bikge1xuICAgICAgICAgIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbFtpXV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2gocmVzdG9yZWRWYWx1ZXNbaV0pO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IHRydWU7XG4gICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVWYWx1ZXNGcm9tSW52aXNpYmxlKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmlzSXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2aXNJdGVtc1tpXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdKSB7XG4gICAgICAgIHJlcy5wdXNoKHZhbCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmludmlzaWJsZU9sZFZhbHVlc1t2YWxdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICB2YXIganNvbiA9IHN1cGVyLmdldENvbmRpdGlvbkpzb24oKTtcbiAgICBpZiAob3BlcmF0b3IgPT0gXCJjb250YWluc1wiIHx8IG9wZXJhdG9yID09IFwibm90Y29udGFpbnNcIikge1xuICAgICAganNvbltcInR5cGVcIl0gPSBcInJhZGlvZ3JvdXBcIjtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGlzQW5zd2VyQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSGVscGVycy5pc0FycmF5Q29udGFpbnNFcXVhbCh0aGlzLnZhbHVlLCB0aGlzLmNvcnJlY3RBbnN3ZXIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWVXaXRoT3RoZXJzKCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdmFsLmluZGV4T2YodGhpcy5vdGhlckl0ZW0udmFsdWUpID49IDA7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gW3N1cGVyLnZhbHVlRnJvbURhdGEodmFsKV07XG4gICAgbGV0IHZhbHVlID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaG9pY2VpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMuYWN0aXZlQ2hvaWNlcywgdmFsW2ldKTtcbiAgICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgICAgdmFsdWUucHVzaChjaG9pY2VpdGVtLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSB2YWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbFtpXSA9PSB0aGlzLm90aGVySXRlbS52YWx1ZSkgcmV0dXJuIHZhbDtcbiAgICAgIGlmICh0aGlzLmhhc1Vua25vd25WYWx1ZSh2YWxbaV0pKSB7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IHZhbFtpXTtcbiAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWwgfHwgIXZhbC5sZW5ndGgpIHJldHVybiB2YWw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxbaV0gPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XG4gICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5nZXRRdWVzdGlvbkNvbW1lbnQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZSh2YWw6IGFueSwgaW5jbHVkZU90aGVyOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oYXNOb25lICYmIHZhbCA9PSB0aGlzLm5vbmVJdGVtVmFsdWUudmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuaGFzVW5rbm93blZhbHVlKHZhbCwgaW5jbHVkZU90aGVyKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkU3VwcG9ydGVkVmFsaWRhdG9ycyhzdXBwb3J0ZWRWYWxpZGF0b3JzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgc3VwZXIuYWRkU3VwcG9ydGVkVmFsaWRhdG9ycyhzdXBwb3J0ZWRWYWxpZGF0b3JzKTtcbiAgICBzdXBwb3J0ZWRWYWxpZGF0b3JzLnB1c2goXCJhbnN3ZXJjb3VudFwiKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaGVja2JveFwiLFxuICBbXG4gICAgXCJoYXNTZWxlY3RBbGw6Ym9vbGVhblwiLFxuICAgIFwiaGFzTm9uZTpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NOb25lVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInNlbGVjdEFsbFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1NlbGVjdEFsbFRleHRcIiB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2NoZWNrYm94LnRzIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGNvbW1lbnQgcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29tbWVudE1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBsYWNlSG9sZGVyXCIsIHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldE1heExlbmd0aCgpOiBhbnkge1xuICAgIHJldHVybiBIZWxwZXJzLmdldE1heExlbmd0aChcbiAgICAgIHRoaXMubWF4TGVuZ3RoLFxuICAgICAgdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIGlucHV0IHBsYWNlIGhvbGRlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGh0bWwgcm93cyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3ModmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBodG1sIGNvbHMgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2xzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sc1wiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tbWVudFwiO1xuICB9XG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09PSBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBhZGRTdXBwb3J0ZWRWYWxpZGF0b3JzKHN1cHBvcnRlZFZhbGlkYXRvcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBzdXBlci5hZGRTdXBwb3J0ZWRWYWxpZGF0b3JzKHN1cHBvcnRlZFZhbGlkYXRvcnMpO1xuICAgIHN1cHBvcnRlZFZhbGlkYXRvcnMucHVzaChcInRleHRcIiwgXCJyZWdleFwiKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjb21tZW50XCIsXG4gIFtcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJjb2xzOm51bWJlclwiLCBkZWZhdWx0OiA1MCB9LFxuICAgIHsgbmFtZTogXCJyb3dzOm51bWJlclwiLCBkZWZhdWx0OiA0IH0sXG4gICAgeyBuYW1lOiBcInBsYWNlSG9sZGVyXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQbGFjZUhvbGRlclwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChuYW1lKTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJpbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyLCBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7XG4gIElTdXJ2ZXlJbXBsLFxuICBJU3VydmV5RGF0YSxcbiAgSVN1cnZleSxcbiAgSVRleHRQcm9jZXNzb3IsXG4gIElQYW5lbCxcbiAgSUVsZW1lbnQsXG4gIFN1cnZleUVsZW1lbnQsXG4gIElDb25kaXRpb25SdW5uZXIsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRRdWVzdGlvbkpTT04ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIGpzb246IGFueSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBTZXJpYWxpemVyLmFkZENsYXNzKFxuICAgICAgbmFtZSxcbiAgICAgIFtdLFxuICAgICAgZnVuY3Rpb24gKGpzb246IGFueSkge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50Q29sbGVjdGlvbi5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICAgICAhIWpzb24gPyBqc29uLm5hbWUgOiBcIlwiLFxuICAgICAgICAgIHNlbGZcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBcInF1ZXN0aW9uXCJcbiAgICApO1xuICAgIHRoaXMub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkluaXQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Jbml0KCk7XG4gIH1cbiAgcHVibGljIG9uQ3JlYXRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkNyZWF0ZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25DcmVhdGVkKHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgb25Mb2FkZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25Mb2FkZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Mb2FkZWQocXVlc3Rpb24pO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbiwgaHRtbEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXIpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25BZnRlclJlbmRlcihxdWVzdGlvbiwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGVsZW1lbnQ6IFF1ZXN0aW9uLFxuICAgIGh0bWxFbGVtZW50OiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChxdWVzdGlvbiwgZWxlbWVudCwgaHRtbEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvblByb3BlcnR5Q2hhbmdlZChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vblByb3BlcnR5Q2hhbmdlZChxdWVzdGlvbiwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIG9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQocXVlc3Rpb24sIHtcbiAgICAgIG9iajogaXRlbSxcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlKCkge1xuICAgIHJldHVybiAhIXRoaXMuanNvbi5lbGVtZW50c0pTT04gfHwgISF0aGlzLmpzb24uY3JlYXRlRWxlbWVudHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbGxlY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBDb21wb25lbnRDb2xsZWN0aW9uID0gbmV3IENvbXBvbmVudENvbGxlY3Rpb24oKTtcbiAgcHJpdmF0ZSBjdXN0b21RdWVzdGlvblZhbHVlczogQXJyYXk8Q29tcG9uZW50UXVlc3Rpb25KU09OPiA9IFtdO1xuICBwdWJsaWMgb25DcmVhdGVDb21wb3NpdGU6IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKSA9PiBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsO1xuICBwdWJsaWMgb25DcmVhdGVDdXN0b206IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKSA9PiBRdWVzdGlvbkN1c3RvbU1vZGVsO1xuICBwdWJsaWMgb25BZGRpbmdKc29uOiAobmFtZTogc3RyaW5nLCBpc0NvbXBvc2l0ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcHVibGljIGFkZChqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICBsZXQgbmFtZSA9IGpzb24ubmFtZTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IFwiQXR0cmlidXRlIG5hbWUgaXMgbWlzc2VkXCI7XG4gICAgfVxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEhdGhpcy5nZXRDdXN0b21RdWVzdGlvbkJ5TmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgKFxuICAgICAgICBcIlRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBjdXN0b20gcXVlc3Rpb24gd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIidcIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhU2VyaWFsaXplci5maW5kQ2xhc3MobmFtZSkpIHtcbiAgICAgIHRocm93IFwiVGhlcmUgaXMgYWxyZWFkeSBjbGFzcyB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tUXVlc3Rpb24gPSBuZXcgQ29tcG9uZW50UXVlc3Rpb25KU09OKG5hbWUsIGpzb24pO1xuICAgIGlmICghIXRoaXMub25BZGRpbmdKc29uKVxuICAgICAgdGhpcy5vbkFkZGluZ0pzb24obmFtZSwgY3VzdG9tUXVlc3Rpb24uaXNDb21wb3NpdGUpO1xuICAgIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMucHVzaChjdXN0b21RdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIFNlcmlhbGl6ZXIucmVtb3ZlQ2xhc3ModGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghIXF1ZXN0aW9uSlNPTi5pc0NvbXBvc2l0ZSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9zaXRlTW9kZWwoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICk6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwge1xuICAgIGlmICghIXRoaXMub25DcmVhdGVDb21wb3NpdGUpXG4gICAgICByZXR1cm4gdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21wb3NpdGVNb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDdXN0b21Nb2RlbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb25DdXN0b21Nb2RlbCB7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUN1c3RvbSkgcmV0dXJuIHRoaXMub25DcmVhdGVDdXN0b20obmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsLCBJU3VydmV5RGF0YSwgSVBhbmVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgY3VzdG9tUXVlc3Rpb246IENvbXBvbmVudFF1ZXN0aW9uSlNPTlxuICApIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIFN1cnZleUVsZW1lbnQuQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50cyA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVXcmFwcGVyKCk7XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkNyZWF0ZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5jdXN0b21RdWVzdGlvbiA/IHRoaXMuY3VzdG9tUXVlc3Rpb24ubmFtZSA6IFwiY3VzdG9tXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7fVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbiAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgaXRlbSxcbiAgICAgICAgaXRlbS5vd25lclByb3BlcnR5TmFtZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0RWxlbWVudCgpO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50O1xuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICBlbC5kaXNhYmxlRGVzaWduQWN0aW9ucyA9IHRydWU7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5pbml0RWxlbWVudCh0aGlzLmdldEVsZW1lbnQoKSk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkub25TdXJ2ZXlMb2FkKCk7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uTG9hZGVkKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IGFueSkge1xuICAgIC8vRG8gbm90aGluZ1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihlbDogYW55KSB7XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXIoZWwpO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlcih0aGlzLCBlbCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gIH1cbiAgLy9JU3VydmV5SW1wbFxuICBnZVN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICAvL0lTdXJ2ZXlEYXRhXG4gIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB2YXIgbmV3TmFtZSA9IHRoaXMuY29udmVydERhdGFOYW1lKG5hbWUpO1xuICAgIHRoaXMuZGF0YS5zZXRWYWx1ZShcbiAgICAgIG5ld05hbWUsXG4gICAgICB0aGlzLmNvbnZlcnREYXRhVmFsdWUobmFtZSwgbmV3VmFsdWUpLFxuICAgICAgbG9jTm90aWZpY2F0aW9uLFxuICAgICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWRcbiAgICApO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZU5hbWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRWYXJpYWJsZShuYW1lKSA6IG51bGw7XG4gIH1cbiAgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUobmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpKSA6IFwiXCI7XG4gIH1cbiAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCksIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24pO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IHt9O1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCkgOiB7fTtcbiAgfVxuICBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCkgOiB7fTtcbiAgfVxuICAvL0lQYW5lbFxuICBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7fVxuICByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFydEluZGV4KCk7XG4gIH1cbiAgZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgZWxlbWVudFdpZHRoQ2hhbmdlZChlbDogSUVsZW1lbnQpIHt9XG4gIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpbmRleE9mKGVsOiBJRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkN1c3RvbU1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2Uge1xuICBwcml2YXRlIHF1ZXN0aW9uV3JhcHBlcjogUXVlc3Rpb247XG4gIHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVXcmFwcGVyKCkge1xuICAgIHRoaXMucXVlc3Rpb25XcmFwcGVyID0gdGhpcy5jcmVhdGVRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRRdWVzdGlvbjtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gdGhpcy5jb250ZW50UXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb250ZW50UXVlc3Rpb24uZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHRoaXMuY29udGVudFF1ZXN0aW9uLmVycm9yc1tpXSk7XG4gICAgfVxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXMgPSBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24uZm9jdXMob25FcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9uRXJyb3IpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25XcmFwcGVyO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGpzb24gPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLmpzb247XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhanNvbi5xdWVzdGlvbkpTT04pIHtcbiAgICAgIHZhciBxVHlwZSA9IGpzb24ucXVlc3Rpb25KU09OLnR5cGU7XG4gICAgICBpZiAoIXFUeXBlIHx8ICFTZXJpYWxpemVyLmZpbmRDbGFzcyhxVHlwZSkpXG4gICAgICAgIHRocm93IFwidHlwZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb25KU09OIGlzIGVtcHR5IG9yIGluY29ycmVjdFwiO1xuICAgICAgcmVzID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MocVR5cGUpO1xuICAgICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgICAgcmVzLmZyb21KU09OKGpzb24ucXVlc3Rpb25KU09OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEhanNvbi5jcmVhdGVRdWVzdGlvbikge1xuICAgICAgICByZXMgPSBqc29uLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gICAgICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVzICYmICFyZXMubmFtZSkge1xuICAgICAgcmVzLm5hbWUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmICF0aGlzLmNvbnRlbnRRdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gICAgdmFyIG5ld05hbWUgPSBuYW1lLnJlcGxhY2UoXG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSxcbiAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKClcbiAgICApO1xuICAgIHJldHVybiBuZXdOYW1lLmluZGV4T2YodGhpcy5nZXRWYWx1ZU5hbWUoKSkgPT0gMFxuICAgICAgPyBuZXdOYW1lXG4gICAgICA6IHN1cGVyLmNvbnZlcnREYXRhTmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnREYXRhTmFtZShuYW1lKSA9PSBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSlcbiAgICAgID8gdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWVcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBzdXBlci5pbml0RWxlbWVudChlbCk7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgICg8UXVlc3Rpb24+ZWwpLnBhcmVudCA9IHRoaXM7XG4gICAgICAoPFF1ZXN0aW9uPmVsKS5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICAgICAgZWxlbWVudDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgY3NzQ2xhc3NlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKGNzc0NsYXNzZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2Uge1xuICBwcml2YXRlIHBhbmVsV3JhcHBlcjogUGFuZWxNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7XG4gICAgdGhpcy5wYW5lbFdyYXBwZXIgPSB0aGlzLmNyZWF0ZVBhbmVsKCk7XG4gIH1cbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tcG9zaXRlXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21wb3NpdGVcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHVibGljIGdldCBjb250ZW50UGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxXcmFwcGVyO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRQYW5lbCkgcmV0dXJuIHJlcztcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWwuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgZmFsc2UsIHJlYykgfHwgcmVzO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKCkge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICBpZiAodGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciByZXMgPSA8UGFuZWxNb2RlbD5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgcmVzLnNob3dRdWVzdGlvbk51bWJlcnMgPSBcIm9mZlwiO1xuICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgIGlmICghIWpzb24uZWxlbWVudHNKU09OKSB7XG4gICAgICByZXMuZnJvbUpTT04oeyBlbGVtZW50czoganNvbi5lbGVtZW50c0pTT04gfSk7XG4gICAgfVxuICAgIGlmICghIWpzb24uY3JlYXRlRWxlbWVudHMpIHtcbiAgICAgIGpzb24uY3JlYXRlRWxlbWVudHMocmVzKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgIHJlcy5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnNldEFmdGVyUmVuZGVyQ2FsbGJhY2tzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgICAgdGhpcy5zZXRJc0NvbnRlbnRFbGVtZW50KHRoaXMuY29udGVudFBhbmVsKTtcbiAgICB9XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc0NvbnRlbnRFbGVtZW50KHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgcGFuZWwuaXNDb250ZW50RWxlbWVudCA9IHRydWU7XG4gICAgdmFyIGVsZW1lbnRzID0gcGFuZWwuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICB0aGlzLnNldElzQ29udGVudEVsZW1lbnQoPFBhbmVsTW9kZWw+ZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDxRdWVzdGlvbj5lbCkuaXNDb250ZW50RWxlbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRWaXNpYmxlSW5kZXgodmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHZhciByZXMgPSBzdXBlci5zZXRWaXNpYmxlSW5kZXgodmFsKTtcbiAgICBpZiAodGhpcy5pc1Zpc2libGUgJiYgISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgcmVzICs9IHRoaXMuY29udGVudFBhbmVsLnNldFZpc2libGVJbmRleCh2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdmFyIG9sZENvbXBvc2l0ZSA9IHZhbHVlcy5jb21wb3NpdGU7XG4gICAgICB2YWx1ZXMuY29tcG9zaXRlID0gdGhpcy5jb250ZW50UGFuZWwuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgZGVsZXRlIHZhbHVlc1tcImNvbXBvc2l0ZVwiXTtcbiAgICAgIGlmICghIW9sZENvbXBvc2l0ZSkge1xuICAgICAgICB2YWx1ZXMuY29tcG9zaXRlID0gb2xkQ29tcG9zaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiAhIXZhbCA/IHZhbFtuYW1lXSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgZGVsZXRlIHZhbFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsW25hbWVdID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpO1xuICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gISFuZXdWYWx1ZSA/IG5ld1ZhbHVlW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0QWZ0ZXJSZW5kZXJDYWxsYmFja3MocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICBpZiAoIXBhbmVsIHx8ICF0aGlzLmN1c3RvbVF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjayA9IChcbiAgICAgICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgICAgICBlbGVtZW50OiBhbnlcbiAgICAgICkgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fY3VzdG9tLnRzIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhbiBxdWVzdGlvbiB0aGF0IHJlbmRlcnMgZW1wdHkgXCJkaXZcIiB0YWcuIEl0IHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBzb21lIGN1c3RvbSB3aWRnZXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVtcHR5TW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImVtcHR5XCI7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJlbXB0eVwiLFxuICBbXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkVtcHR5TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9lbXB0eS50cyIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yLCBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFVwbG9hZGluZ0ZpbGVFcnJvciwgRXhjZWVkU2l6ZUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGZpbGUgcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRmlsZU1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBwcml2YXRlIGlzVXBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgcXVlc3Rpb24gc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBxdWVzdGlvbiBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5zdGF0ZSBuZXcgcXVlc3Rpb24gc3RhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb25TdGF0ZUNoYW5nZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IFF1ZXN0aW9uRmlsZU1vZGVsLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBFdmVudDwoc2VuZGVyOiBRdWVzdGlvbkZpbGVNb2RlbCwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIHByZXZpZXdWYWx1ZTogYW55W10gPSBbXTtcbiAgcHVibGljIGN1cnJlbnRTdGF0ZSA9IFwiZW1wdHlcIjtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZmlsZVwiO1xuICB9XG4gIHB1YmxpYyBjbGVhck9uRGVsZXRpbmdDb250YWluZXIoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyh0aGlzLm5hbWUsIHRoaXMudmFsdWUsIG51bGwsICgpID0+IHt9KTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIHNob3cgdGhlIHByZXZpZXcgZm9yIHRoZSBpbWFnZSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1ByZXZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1ByZXZpZXcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIGFsbG93IHNlbGVjdCBtdWx0aXBsZSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dNdWx0aXBsZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd011bHRpcGxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93TXVsdGlwbGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWNjZXB0ZWQgZmlsZSB0eXBlcy4gUGFzc2VkIHRvIHRoZSAnYWNjZXB0JyBhdHRyaWJ1dGUgb2YgdGhlIGZpbGUgaW5wdXQgdGFnLiBTZWUgaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9hY2NlcHQuYXNwIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjY2VwdGVkVHlwZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWNjZXB0ZWRUeXBlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFjY2VwdGVkVHlwZXModmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhY2NlcHRlZFR5cGVzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2VyaWFsaXplIGZpbGUgY29udGVudCBhcyB0ZXh0IGluIHRoZSBzdXJ2ZXkuZGF0YS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3UgaGF2ZSB0byB3cml0ZSB0aGUgY29kZSBvblVwbG9hZEZpbGVzIGV2ZW50IHRvIHN0b3JlIHRoZSBmaWxlIGNvbnRlbnQuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwub25VcGxvYWRGaWxlc1xuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZURhdGFBc1RleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0b3JlRGF0YUFzVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0b3JlRGF0YUFzVGV4dCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdG9yZURhdGFBc1RleHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gd2FpdCB1bnRpbCBmaWxlcyB3aWxsIGJlIHVwbG9hZGVkIHRvIHlvdXIgc2VydmVyLlxuICAgKi9cbiAgcHVibGljIGdldCB3YWl0Rm9yVXBsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3YWl0Rm9yVXBsb2FkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdhaXRGb3JVcGxvYWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2FpdEZvclVwbG9hZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBpbWFnZXMgcHJldmlldy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dJbWFnZXNQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0ltYWdlc1ByZXZpZXdcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0ltYWdlc1ByZXZpZXcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dJbWFnZXNQcmV2aWV3XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldHVwIHRoZSBtYXhpbXVtIGFsbG93ZWQgZmlsZSBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFNpemVcIiwgMCk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhTaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2l6ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXR1cCBjb25maXJtYXRpb24gdG8gcmVtb3ZlIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5lZWRDb25maXJtUmVtb3ZlRmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibmVlZENvbmZpcm1SZW1vdmVGaWxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmVlZENvbmZpcm1SZW1vdmVGaWxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5lZWRDb25maXJtUmVtb3ZlRmlsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZlIGZpbGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29uZmlybVJlbW92ZU1lc3NhZ2UoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcImNvbmZpcm1SZW1vdmVGaWxlXCIpXG4gICAgICBbXCJmb3JtYXRcIl0oZmlsZU5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZlIGFsbCBmaWxlcyBjb25maXJtYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIGdldCBjb25maXJtUmVtb3ZlQWxsTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY29uZmlybVJlbW92ZUFsbEZpbGVzXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbm8gZmlsZSBjaG9zZW4gY2FwdGlvbiBmb3IgbW9kZXJuIHRoZW1lLlxuICAgKi9cbiAgZ2V0IG5vRmlsZUNob3NlbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm5vRmlsZUNob3NlblwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNob29zZSBmaWxlcyBidXR0b24gY2FwdGlvbiBmb3IgbW9kZXJuIHRoZW1lLlxuICAgKi9cbiAgZ2V0IGNob29zZUJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob29zZUZpbGVDYXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2xlYW4gZmlsZXMgYnV0dG9uIGNhcHRpb24uXG4gICAqL1xuICBnZXQgY2xlYW5CdXR0b25DYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjbGVhbkNhcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW1vdmUgZmlsZSBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCByZW1vdmVGaWxlQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVtb3ZlRmlsZUNhcHRpb25cIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB0aXRsZSB2YWx1ZS5cbiAgICovXG4gIGdldCBpbnB1dFRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcpIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibG9hZGluZ0ZpbGVcIik7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNob29zZUZpbGVcIik7XG4gICAgcmV0dXJuIFwiIFwiO1xuICB9XG4gIC8qKlxuICAgKiBDbGVhciB2YWx1ZSBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKi9cbiAgcHVibGljIGNsZWFyKGRvbmVDYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgISFkb25lQ2FsbGJhY2sgJiYgZG9uZUNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWxlIGl0ZW0gcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlKGNvbnRlbnQ6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgdGhpcy52YWx1ZSxcbiAgICAgIGNvbnRlbnQubmFtZSxcbiAgICAgIChzdGF0dXMsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9sZFZhbHVlLmZpbHRlcigoZikgPT4gZi5uYW1lICE9PSBjb250ZW50Lm5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWQgbXVsdGlwbGUgZmlsZXMgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogQHBhcmFtIGZpbGVzXG4gICAqL1xuICBwdWJsaWMgbG9hZEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgaWYgKCF0aGlzLmFsbEZpbGVzT2soZmlsZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkaW5nXCIpO1xuXG4gICAgdmFyIGxvYWRGaWxlc1Byb2MgPSAoKSA9PiB7XG4gICAgICB2YXIgY29udGVudCA9IDxBcnJheTxhbnk+PltdO1xuICAgICAgaWYgKHRoaXMuc3RvcmVEYXRhQXNUZXh0KSB7XG4gICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICBsZXQgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBmaWxlLm5hbWUsIHR5cGU6IGZpbGUudHlwZSwgY29udGVudDogZmlsZVJlYWRlci5yZXN1bHQgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID09PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICh0aGlzLnZhbHVlIHx8IFtdKS5jb25jYXQoY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkudXBsb2FkRmlsZXModGhpcywgdGhpcy5uYW1lLCBmaWxlcywgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuY29uY2F0KFxuICAgICAgICAgICAgICBkYXRhLm1hcCgocjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHIuZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdHlwZTogci5maWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiByLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIGxvYWRGaWxlc1Byb2MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhcihsb2FkRmlsZXNQcm9jKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNhblByZXZpZXdJbWFnZShmaWxlSXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dJbWFnZXNQcmV2aWV3ICYmICEhZmlsZUl0ZW0gJiYgdGhpcy5pc0ZpbGVJbWFnZShmaWxlSXRlbSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMucHJldmlld1ZhbHVlID0gW107XG4gICAgdmFyIHN0YXRlID1cbiAgICAgICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiYgISFuZXdWYWx1ZSkgfHxcbiAgICAgIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICA/IHRoaXMuc2hvd1ByZXZpZXdcbiAgICAgICAgICA/IFwibG9hZGluZ1wiXG4gICAgICAgICAgOiBcImxvYWRlZFwiXG4gICAgICAgIDogXCJlbXB0eVwiO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VkKHN0YXRlKTtcbiAgICBpZiAoIXRoaXMuc2hvd1ByZXZpZXcgfHwgIW5ld1ZhbHVlKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpXG4gICAgICA/IG5ld1ZhbHVlXG4gICAgICA6ICEhbmV3VmFsdWVcbiAgICAgID8gW25ld1ZhbHVlXVxuICAgICAgOiBbXTtcblxuICAgIGlmICh0aGlzLnN0b3JlRGF0YUFzVGV4dCkge1xuICAgICAgbmV3VmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB0aGlzLnByZXZpZXdWYWx1ZS5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHN0YXRlID09PSBcImxvYWRpbmdcIikgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICB2YXIgY29udGVudCA9IHZhbHVlLmNvbnRlbnQgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuc3VydmV5LmRvd25sb2FkRmlsZSh0aGlzLm5hbWUsIHZhbHVlLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld1ZhbHVlID0gdGhpcy5wcmV2aWV3VmFsdWUuY29uY2F0KFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoID09PSBuZXdWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkKFwibG9hZGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImVycm9yXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcgJiYgdGhpcy53YWl0Rm9yVXBsb2FkKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgbmV3IFVwbG9hZGluZ0ZpbGVFcnJvcihcbiAgICAgICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidXBsb2FkaW5nRmlsZVwiKSxcbiAgICAgICAgICB0aGlzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzdGF0ZUNoYW5nZWQoc3RhdGU6IHN0cmluZykge1xuICAgIGlmIChzdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09IFwibG9hZGVkXCIpIHtcbiAgICAgIHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50U3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLm9uU3RhdGVDaGFuZ2VkLmZpcmUodGhpcywgeyBzdGF0ZTogc3RhdGUgfSk7XG4gIH1cbiAgcHJpdmF0ZSBhbGxGaWxlc09rKGZpbGVzOiBGaWxlW10pOiBib29sZWFuIHtcbiAgICB2YXIgZXJyb3JMZW5ndGggPSB0aGlzLmVycm9ycyA/IHRoaXMuZXJyb3JzLmxlbmd0aCA6IDA7XG4gICAgKGZpbGVzIHx8IFtdKS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBpZiAodGhpcy5tYXhTaXplID4gMCAmJiBmaWxlLnNpemUgPiB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChuZXcgRXhjZWVkU2l6ZUVycm9yKHRoaXMubWF4U2l6ZSwgdGhpcykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvckxlbmd0aCA9PT0gdGhpcy5lcnJvcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgaXNGaWxlSW1hZ2UoZmlsZToge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gIH0pOiBib29sZWFuIHtcbiAgICBpZiAoIWZpbGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpbWFnZVByZWZpeCA9IFwiZGF0YTppbWFnZVwiO1xuICAgIHZhciBzdWJTdHIgPSBmaWxlLmNvbnRlbnQgJiYgZmlsZS5jb250ZW50LnN1YnN0cigwLCBpbWFnZVByZWZpeC5sZW5ndGgpO1xuICAgIHN1YlN0ciA9IHN1YlN0ciAmJiBzdWJTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzdWx0ID1cbiAgICAgIHN1YlN0ciA9PT0gaW1hZ2VQcmVmaXggfHxcbiAgICAgICghIWZpbGUudHlwZSAmJiBmaWxlLnR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiaW1hZ2UvXCIpID09PSAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhICYmICF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuaXNOb2RlID0gZmFsc2U7XG4gICAgICB2YXIgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdmFsdWVzLm1hcCgoZGF0YVZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGluZGV4LFxuICAgICAgICAgIHRpdGxlOiBcIkZpbGVcIixcbiAgICAgICAgICB2YWx1ZTogKGRhdGFWYWx1ZS5jb250ZW50ICYmIGRhdGFWYWx1ZS5jb250ZW50KSB8fCBkYXRhVmFsdWUsXG4gICAgICAgICAgZGlzcGxheVZhbHVlOiAoZGF0YVZhbHVlLm5hbWUgJiYgZGF0YVZhbHVlLm5hbWUpIHx8IGRhdGFWYWx1ZSxcbiAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJmaWxlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzQ29tbWVudDtcbiAgICAgIH0sXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tbWVudFRleHRcIixcbiAgICAgIGxheW91dDogXCJyb3dcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzaG93UHJldmlldzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcImFsbG93TXVsdGlwbGU6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJhbGxvd0ltYWdlc1ByZXZpZXc6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgXCJpbWFnZUhlaWdodFwiLFxuICAgIFwiaW1hZ2VXaWR0aFwiLFxuICAgIFwiYWNjZXB0ZWRUeXBlc1wiLFxuICAgIHsgbmFtZTogXCJzdG9yZURhdGFBc1RleHQ6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcIndhaXRGb3JVcGxvYWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIFwibWF4U2l6ZTpudW1iZXJcIixcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJuZWVkQ29uZmlybVJlbW92ZUZpbGU6Ym9vbGVhblwiLCB2aXNpYmxlOiB0cnVlLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkZpbGVNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJmaWxlXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwobmFtZSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9maWxlLnRzIiwiaW1wb3J0IHsgUXVlc3Rpb25Ob25WYWx1ZSB9IGZyb20gXCIuL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBodG1sIHF1ZXN0aW9uLiBVbmxpa2Ugb3RoZXIgcXVlc3Rpb25zIGl0IGRvZXNuJ3QgaGF2ZSB2YWx1ZSBhbmQgdGl0bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkh0bWxNb2RlbCBleHRlbmRzIFF1ZXN0aW9uTm9uVmFsdWUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIGxvY0h0bWwgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgbG9jSHRtbC5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAhIXNlbGYuc3VydmV5ID8gc2VsZi5zdXJ2ZXkucHJvY2Vzc0h0bWwoc3RyKSA6IHN0cjtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IGh0bWwgdG8gZGlzcGxheSBpdFxuICAgKi9cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaHRtbFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGh0bWwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkSHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbCh0aGlzLmh0bWwpIDogdGhpcy5odG1sO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImh0bWxcIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJub252YWx1ZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIG5hbWUgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKG5hbWUpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25faHRtbC50cyIsImltcG9ydCB7IFF1ZXN0aW9uTm9uVmFsdWUgfSBmcm9tIFwiLi9xdWVzdGlvbm5vbnZhbHVlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgaW1hZ2UgcXVlc3Rpb24uIFRoaXMgcXVlc3Rpb24gaGFzbid0IGFueSBmdW5jdGlvbmFsaXR5IGFuZCBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBzdXJ2ZXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk5vblZhbHVlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaW1hZ2VcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgVVJMLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUxpbmsoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VMaW5rKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBoZWlnaHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VIZWlnaHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2Ugd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSBmaXQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VGaXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUZpdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG1vZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbnRlbnRNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29udGVudE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb250ZW50TW9kZVwiLCB2YWwpO1xuICAgIGlmICh2YWwgPT09IFwidmlkZW9cIikge1xuICAgICAgdGhpcy5zaG93TGFiZWwgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImltYWdlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaW1hZ2VMaW5rXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbnRlbnRNb2RlXCIsXG4gICAgICBkZWZhdWx0OiBcImltYWdlXCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbWFnZVwiLCBcInZpZGVvXCJdXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9XG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZU1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm5vbnZhbHVlXCJcbik7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgbmFtZSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZU1vZGVsKG5hbWUpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25faW1hZ2UudHMiLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHNlbGVjdCBpbWFnZSBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hCYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY29sQ291bnQgPSAwO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaW1hZ2VwaWNrZXJcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJpbWFnZWl0ZW12YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogTXVsdGkgc2VsZWN0IG9wdGlvbi4gSWYgc2V0IHRvIHRydWUsIHRoZW4gYWxsb3dzIHRvIHNlbGVjdCBtdWx0aXBsZSBpbWFnZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG11bHRpU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aVNlbGVjdChuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm11bHRpU2VsZWN0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBpbWFnZSBwaWNrZXIgaXRlbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGlzSXRlbVNlbGVjdGVkKGl0ZW06IEl0ZW1WYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbCwgaXRlbS52YWx1ZSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCkge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsW2ldLCB0cnVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnB1c2godmFsW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB2YWwubGVuZ3RoKSByZXR1cm47XG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbGFiZWwgdW5kZXIgdGhlIGltYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93TGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dMYWJlbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TGFiZWwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHZhciB2YWx1ZSA9IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gdmFsO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXCJpbWFnZWl0ZW12YWx1ZVwiLCBbXSwgdW5kZWZpbmVkLCBcIml0ZW12YWx1ZVwiKTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZWl0ZW12YWx1ZVwiLCB7XG4gIG5hbWU6IFwiaW1hZ2VMaW5rXCIsXG59KTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZXBpY2tlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29udGVudE1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiaW1hZ2VcIixcbiAgICAgIGNob2ljZXM6IFtcImltYWdlXCIsIFwidmlkZW9cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltYWdlRml0XCIsXG4gICAgICBkZWZhdWx0OiBcImNvbnRhaW5cIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJjb250YWluXCIsIFwiY292ZXJcIiwgXCJmaWxsXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImltYWdlSGVpZ2h0Om51bWJlclwiLCBkZWZhdWx0OiAxNTAsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImltYWdlV2lkdGg6bnVtYmVyXCIsIGRlZmF1bHQ6IDIwMCwgbWluVmFsdWU6IDAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJzaG93TGFiZWw6Ym9vbGVhblwiLFxuICBkZWZhdWx0OiBmYWxzZSxcbn0pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIixcbiAgZGVmYXVsdDogMCxcbiAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxufSk7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VwaWNrZXJcIiwge1xuICBuYW1lOiBcIm11bHRpU2VsZWN0OmJvb2xlYW5cIixcbiAgZGVmYXVsdDogZmFsc2UsXG59KTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwiY2hvaWNlczppbWFnZWl0ZW12YWx1ZVtdXCIsXG59KTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZXBpY2tlclwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwobmFtZSk7XG4gIC8vcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX2ltYWdlcGlja2VyLnRzIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWwgfSBmcm9tIFwiLi9tYXJ0aXhCYXNlXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBSZXF1aXJlZEluQWxsUm93c0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIElMb2NhbGl6YWJsZU93bmVyIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB9IGZyb20gXCIuL3F1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBJQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4RGF0YSB7XG4gIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeFJvd01vZGVsIHtcbiAgcHJpdmF0ZSBkYXRhOiBJTWF0cml4RGF0YTtcbiAgcHJpdmF0ZSBpdGVtOiBJdGVtVmFsdWU7XG4gIHByb3RlY3RlZCByb3dWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBJTWF0cml4RGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnJvd1ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQ7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnJvd1ZhbHVlID0gbmV3VmFsdWU7XG4gICAgaWYgKHRoaXMuZGF0YSkgdGhpcy5kYXRhLm9uTWF0cml4Um93Q2hhbmdlZCh0aGlzKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4Q2VsbHNPd25lciBleHRlbmRzIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgZ2V0Um93cygpOiBBcnJheTxhbnk+O1xuICBnZXRDb2x1bW5zKCk6IEFycmF5PGFueT47XG59XG5cbmV4cG9ydCBjbGFzcyBNYXJ0cml4Q2VsbHMge1xuICBwcml2YXRlIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY2VsbHNPd25lcjogSU1hdHJpeENlbGxzT3duZXIpIHt9XG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLmxlbmd0aCA9PSAwO1xuICB9XG4gIHB1YmxpYyBzZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgcm93ID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUocm93LCB0aGlzLnJvd3MpO1xuICAgIGNvbHVtbiA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKGNvbHVtbiwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm47XG4gICAgaWYgKHZhbCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddKSB0aGlzLnZhbHVlc1tyb3ddID0ge307XG4gICAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSlcbiAgICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dID0gdGhpcy5jcmVhdGVTdHJpbmcoKTtcbiAgICAgIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXS50ZXh0ID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy52YWx1ZXNbcm93XSAmJiB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pIHtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXTtcbiAgICAgICAgbG9jLnRleHQgPSBcIlwiO1xuICAgICAgICBpZiAobG9jLmlzRW1wdHkpIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnZhbHVlc1tyb3ddKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW3Jvd107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRDZWxsVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsTG9jVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcm93ID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUocm93LCB0aGlzLnJvd3MpO1xuICAgIGNvbHVtbiA9IHRoaXMuZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKGNvbHVtbiwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoIXJvdyB8fCAhY29sdW1uKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd10pIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0Q2VsbExvY1RleHQoY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENlbGxMb2NUZXh0KHNldHRpbmdzLm1hdHJpeERlZmF1bHRSb3dOYW1lLCBjb2x1bW4pO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheUxvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBjZWxsVGV4dCA9IHRoaXMuZ2V0Q2VsbExvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIGlmIChjZWxsVGV4dCAmJiAhY2VsbFRleHQuaXNFbXB0eSkgcmV0dXJuIGNlbGxUZXh0O1xuICAgIGNlbGxUZXh0ID0gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICBpZiAoY2VsbFRleHQgJiYgIWNlbGxUZXh0LmlzRW1wdHkpIHJldHVybiBjZWxsVGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PSBcIm51bWJlclwiKSB7XG4gICAgICBjb2x1bW4gPVxuICAgICAgICBjb2x1bW4gPj0gMCAmJiBjb2x1bW4gPCB0aGlzLmNvbHVtbnMubGVuZ3RoXG4gICAgICAgICAgPyB0aGlzLmNvbHVtbnNbY29sdW1uXVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ubG9jVGV4dCkgcmV0dXJuIGNvbHVtbi5sb2NUZXh0O1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRDZWxsTG9jVGV4dChzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Um93TmFtZSwgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdywgY29sdW1uKTtcbiAgICByZXR1cm4gbG9jID8gbG9jLmNhbGN1bGF0ZWRUZXh0IDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNPd25lciA/IHRoaXMuY2VsbHNPd25lci5nZXRSb3dzKCkgOiBbXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNPd25lciA/IHRoaXMuY2VsbHNPd25lci5nZXRDb2x1bW5zKCkgOiBbXTtcbiAgfVxuICBwcml2YXRlIGdldENlbGxSb3dDb2x1bW5WYWx1ZSh2YWw6IGFueSwgdmFsdWVzOiBBcnJheTxhbnk+KTogYW55IHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAodmFsIDwgMCB8fCB2YWwgPj0gdmFsdWVzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICB2YWwgPSB2YWx1ZXNbdmFsXS52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbC52YWx1ZSkgcmV0dXJuIHZhbC52YWx1ZTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIgcm93IGluIHRoaXMudmFsdWVzKSB7XG4gICAgICB2YXIgcmVzUm93OiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgIHZhciByb3dWYWx1ZXMgPSB0aGlzLnZhbHVlc1tyb3ddO1xuICAgICAgZm9yICh2YXIgY29sIGluIHJvd1ZhbHVlcykge1xuICAgICAgICByZXNSb3dbY29sXSA9IHJvd1ZhbHVlc1tjb2xdLmdldEpzb24oKTtcbiAgICAgIH1cbiAgICAgIHJlc1tyb3ddID0gcmVzUm93O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBmb3IgKHZhciByb3cgaW4gdmFsdWUpIHtcbiAgICAgIGlmIChyb3cgPT0gXCJwb3NcIikgY29udGludWU7XG4gICAgICB2YXIgcm93VmFsdWVzID0gdmFsdWVbcm93XTtcbiAgICAgIHRoaXMudmFsdWVzW3Jvd10gPSB7fTtcbiAgICAgIGZvciAodmFyIGNvbCBpbiByb3dWYWx1ZXMpIHtcbiAgICAgICAgaWYgKGNvbCA9PSBcInBvc1wiKSBjb250aW51ZTtcbiAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3JlYXRlU3RyaW5nKCk7XG4gICAgICAgIGxvYy5zZXRKc29uKHJvd1ZhbHVlc1tjb2xdKTtcbiAgICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2xdID0gbG9jO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3RyaW5nKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMuY2VsbHNPd25lciwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHNpbXBsZSBtYXRyaXggcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeE1vZGVsXG4gIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw8TWF0cml4Um93TW9kZWwsIEl0ZW1WYWx1ZT5cbiAgaW1wbGVtZW50cyBJTWF0cml4RGF0YSwgSU1hdHJpeENlbGxzT3duZXIge1xuICBwcml2YXRlIGlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjZWxsc1ZhbHVlOiBNYXJ0cml4Q2VsbHM7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY2VsbHNWYWx1ZSA9IG5ldyBNYXJ0cml4Q2VsbHModGhpcyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjb2x1bW5zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJyb3dzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc2VsZi5maWx0ZXJJdGVtcygpKSB7XG4gICAgICAgIHNlbGYub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJoaWRlSWZSb3dzRW1wdHlcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCBpZiB5b3Ugd2FudCBhIHVzZXIgdG8gYW5zd2VyIGFsbCByb3dzLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FsbFJvd1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0FsbFJvd1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzQWxsUm93UmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNBbGxSb3dSZXF1aXJlZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1Jvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPiAwO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZW5kZXIgaXRlbXMgaW4gYSBzcGVjaWZpYyBvcmRlcjogXCJyYW5kb21cIiBvciBcImluaXRpYWxcIi4gRGVmYXVsdCBpcyBcImluaXRpYWxcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgcm93c09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NPcmRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3NPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWwgPT0gdGhpcy5yb3dzT3JkZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzT3JkZXJcIiwgdmFsKTtcbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBoaWRlIHRoZSBxdWVzdGlvbiBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHJvd3MgaW4gdGhlIG1hdHJpeC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZUlmUm93c0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoaWRlSWZSb3dzRW1wdHlcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZUlmUm93c0VtcHR5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZlJvd3NFbXB0eVwiLCB2YWwpO1xuICB9XG4gIGdldFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm93cztcbiAgfVxuICBnZXRDb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWl6UXVlc3Rpb25Db3VudCgpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXJbdGhpcy5yb3dzW2ldLnZhbHVlXSkpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0QW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldLnZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVbcm93XSkgJiZcbiAgICAgICAgSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuY29ycmVjdEFuc3dlcltyb3ddLCB2YWx1ZVtyb3ddKVxuICAgICAgKVxuICAgICAgICByZXMrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhSb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4Um93TW9kZWw+KCk7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdGVNYXRyaXhSb3coXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHRoaXMuaWQgKyBcIl9cIiArIHJvdy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCBcIl9cIiksXG4gICAgICAgICAgdmFsW3Jvdy52YWx1ZV1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCAmJiAhdGhpcy5maWx0ZXJlZFJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZU1hdHJpeFJvdyhcbiAgICAgICAgICBuZXcgSXRlbVZhbHVlKG51bGwpLFxuICAgICAgICAgIHRoaXMubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJfXCIpLFxuICAgICAgICAgIHZhbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNvcnRWaXNpYmxlUm93cyhcbiAgICBhcnJheTogQXJyYXk8TWF0cml4Um93TW9kZWw+XG4gICk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5yb3dzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT09IFwicmFuZG9tXCIpXG4gICAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxNYXRyaXhSb3dNb2RlbD4oYXJyYXkpO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5zb3J0VmlzaWJsZVJvd3ModGhpcy5yb3dzKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0VmlzaWJsZVJvd3MobmV3Um93cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNlbGxzKCk6IE1hcnRyaXhDZWxscyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNlbGxzKHZhbHVlOiBNYXJ0cml4Q2VsbHMpIHtcbiAgICB0aGlzLmNlbGxzLnNldEpzb24odmFsdWUgJiYgdmFsdWUuZ2V0SnNvbiA/IHZhbHVlLmdldEpzb24oKSA6IG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2VsbFRleHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNlbGxzLmlzRW1wdHk7XG4gIH1cbiAgcHVibGljIHNldENlbGxUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNlbGxzLnNldENlbGxUZXh0KHJvdywgY29sdW1uLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxzLmdldENlbGxUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55LCB2YWw6IHN0cmluZykge1xuICAgIHRoaXMuY2VsbHMuc2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5nZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0Q2VsbERpc3BsYXlUZXh0KHJvdywgY29sdW1uKTtcbiAgfVxuICBwcml2YXRlIGVtcHR5TG9jYWxpemFibGVTdHJpbmcgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcyk7XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheUxvY1RleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmNlbGxzLmdldENlbGxEaXNwbGF5TG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgcmV0dXJuIGxvYyA/IGxvYyA6IHRoaXMuZW1wdHlMb2NhbGl6YWJsZVN0cmluZztcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoXG4gICAgICAoIWlzT25WYWx1ZUNoYW5nZWQgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCkgJiZcbiAgICAgIHRoaXMuaGFzRXJyb3JJblJvd3MoKVxuICAgICkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IFJlcXVpcmVkSW5BbGxSb3dzRXJyb3IobnVsbCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc0FsbFJvd1JlcXVpcmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLmhhc1ZhbHVlc0luQWxsUm93cygpO1xuICB9XG4gIHByaXZhdGUgaGFzVmFsdWVzSW5BbGxSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsID0gcm93c1tpXS52YWx1ZTtcbiAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiYgdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBmdWxsTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogTWF0cml4Um93TW9kZWwge1xuICAgIHJldHVybiBuZXcgTWF0cml4Um93TW9kZWwoaXRlbSwgZnVsbE5hbWUsIHRoaXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdGhpcy5pc1Jvd0NoYW5naW5nKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgfHxcbiAgICAgICF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzIHx8XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbMF0udmFsdWUgPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXTtcbiAgICAgICAgdmFyIHJvd1ZhbCA9IHZhbFtyb3cubmFtZV0gPyB2YWxbcm93Lm5hbWVdIDogbnVsbDtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHJvd1ZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHJlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICB2YXIgbmV3S2V5ID0ga2V5c0FzVGV4dFxuICAgICAgICA/IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnJvd3MsIGtleSlcbiAgICAgICAgOiBrZXk7XG4gICAgICBpZiAoIW5ld0tleSkgbmV3S2V5ID0ga2V5O1xuICAgICAgdmFyIG5ld1ZhbHVlID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMuY29sdW1ucywgdmFsdWVba2V5XSk7XG4gICAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICByZXNbbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICB2YXIgdmFsdWVzID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5tYXAoKHJvd05hbWUpID0+IHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMucm93cy5maWx0ZXIoXG4gICAgICAgICAgKHI6IE1hdHJpeFJvd01vZGVsKSA9PiByLnZhbHVlID09PSByb3dOYW1lXG4gICAgICAgIClbMF07XG4gICAgICAgIHZhciByb3dEYXRhSXRlbSA9IDxhbnk+e1xuICAgICAgICAgIG5hbWU6IHJvd05hbWUsXG4gICAgICAgICAgdGl0bGU6ICEhcm93ID8gcm93LnRleHQgOiBcInJvd1wiLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbcm93TmFtZV0sXG4gICAgICAgICAgZGlzcGxheVZhbHVlOiBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHZhciBpdGVtID0gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKFxuICAgICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgdmFsdWVzW3Jvd05hbWVdXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAob3B0aW9ucy5jYWxjdWxhdGlvbnMgfHwgW10pLmZvckVhY2goKGNhbGN1bGF0aW9uKSA9PiB7XG4gICAgICAgICAgICByb3dEYXRhSXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID1cbiAgICAgICAgICAgICAgaXRlbVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dEYXRhSXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCEhcm93LnZhbHVlKSB7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlLFxuICAgICAgICAgIHRleHQ6IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIHF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbChwYXRoKTtcbiAgICBxdWVzdGlvbi5jaG9pY2VzID0gdGhpcy5jb2x1bW5zO1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocXVlc3Rpb24pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gcXVlc3Rpb24uZ2V0VHlwZSgpO1xuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlSWZJbnZpc2libGUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgaWYgKHRoaXMuaGFzUm93cykge1xuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVZhbHVlc0luUm93cygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmIChyb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfXCIgKyByb3dzWzBdLm5hbWUgKyBcIl9cIiArIDA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmUm93c0VtcHR5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPVxuICAgICAgICB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgICAoIXRoaXMuZmlsdGVyZWRSb3dzIHx8IHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA+IDApO1xuICAgIH1cbiAgfVxuICAvL0lNYXRyaXhEYXRhXG4gIG9uTWF0cml4Um93Q2hhbmdlZChyb3c6IE1hdHJpeFJvd01vZGVsKSB7XG4gICAgaWYgKHRoaXMuaXNSb3dDaGFuZ2luZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmhhc1Jvd3MpIHtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUocm93LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgbmV3VmFsdWUgPSB7fTtcbiAgICAgIH1cbiAgICAgIG5ld1ZhbHVlW3Jvdy5uYW1lXSA9IHJvdy52YWx1ZTtcbiAgICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5zOml0ZW12YWx1ZVtdXCIsXG4gICAgICBiYXNlVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicm93czppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF0cml4X3Jvd1wiKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiY2VsbHM6Y2VsbHNcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImNlbGxzXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJvd3NPcmRlclwiLFxuICAgICAgZGVmYXVsdDogXCJpbml0aWFsXCIsXG4gICAgICBjaG9pY2VzOiBbXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG4gICAgXCJpc0FsbFJvd1JlcXVpcmVkOmJvb2xlYW5cIixcbiAgICBcImhpZGVJZlJvd3NFbXB0eTpib29sZWFuXCIsXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4TW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibWF0cml4YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKG5hbWUpO1xuICBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdFJvd3M7XG4gIHEuY29sdW1ucyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q29sdW1zO1xuICByZXR1cm4gcTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsImltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICBwcml2YXRlIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyKGRhdGEsIHZhbHVlKTtcbiAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQ7XG4gIH1cbn1cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHJvcGRvd24gcXVlc3Rpb24uIFlvdSBtYXkgdXNlIGEgZHJvcGRvd24sIGNoZWNrYm94LCByYWRpb2dyb3VwLCB0ZXh0IGFuZCBjb21tZW50IHF1ZXN0aW9ucyBhcyBhIGNlbGwgZWRpdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbFRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJyb3dzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBudWxsO1xuICAgICAgc2VsZi5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIHNlbGYuZmlsdGVySXRlbXMoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duXCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHNob3cgaXQgb24gdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGhlIHRvdGFsIHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdG90YWxUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsVGV4dFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxUZXh0XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUb3RhbFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXRGb290ZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUb3RhbFRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gd2lkdGggZm9yIHRoZSBmaXJzdCBjb2x1bW4sIHJvdyB0aXRsZSBjb2x1bW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93VGl0bGVXaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd1RpdGxlV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3dUaXRsZVdpZHRoO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgIGlmICghdmFsdWVzKSByZXR1cm4gdmFsdWVzO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93VmFsdWUgPSB0aGlzLnJvd3NbaV0udmFsdWU7XG4gICAgICB2YXIgdmFsID0gdmFsdWVzW3Jvd1ZhbHVlXTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXlzQXNUZXh0KSB7XG4gICAgICAgIHZhciBkaXNwbGF5Um93VmFsdWUgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoXG4gICAgICAgICAgdGhpcy5yb3dzLFxuICAgICAgICAgIHJvd1ZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghIWRpc3BsYXlSb3dWYWx1ZSkge1xuICAgICAgICAgIHJvd1ZhbHVlID0gZGlzcGxheVJvd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAoPGFueT5yZXMpW3Jvd1ZhbHVlXSA9IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKHJvd3NbaV0sIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ID8gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29udGV4dCkgPiAtMSA6IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldO1xuICAgICAgaWYgKCFyb3cudmFsdWUpIGNvbnRpbnVlO1xuICAgICAgdmFyIHByZWZpeE5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZSgpICsgXCIuXCIgKyByb3cudmFsdWUgKyBcIi5cIjtcbiAgICAgIHZhciBwcmVmaXhUaXRsZSA9IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIi5cIiArIHJvdy5jYWxjdWxhdGVkVGV4dCArIFwiLlwiO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBwcmVmaXhOYW1lICsgY29sdW1uLm5hbWUsXG4gICAgICAgICAgdGV4dDogcHJlZml4VGl0bGUgKyBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICAgIGlmIChjb2x1bW4gPT0gY29udGV4dCkgY29udGludWU7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJyb3cuXCIgKyBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB0ZXh0OiBcInJvdy5cIiArIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsID0gbnVsbDtcbiAgICB2YXIgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgaWYgKEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShyb3dzLCBrZXkpKSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbCkgbmV3VmFsID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbClba2V5XSA9IHZhbFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWw+KCk7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSB2YWwgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcm93c1tpXS52YWx1ZSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaCh0aGlzLmNyZWF0ZU1hdHJpeFJvdyhyb3dzW2ldLCB2YWxbcm93c1tpXS52YWx1ZV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTWF0cml4Um93KFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICB2YWx1ZTogYW55XG4gICk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Sb3dNb2RlbChpdGVtLnZhbHVlLCBpdGVtLCB0aGlzLCB2YWx1ZSk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93blwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJyb3dzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICBcInJvd3NWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgXCJyb3dUaXRsZVdpZHRoXCIsXG4gICAgeyBuYW1lOiBcInRvdGFsVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxUZXh0XCIgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm1hdHJpeGRyb3Bkb3duYmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGRyb3Bkb3duXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gWzEsIDIsIDMsIDQsIDVdO1xuICBxLnJvd3MgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENvbHVtcztcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZS5hZGREZWZhdWx0Q29sdW1ucyhxKTtcbiAgcmV0dXJuIHE7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50cyIsImltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhLFxuICBNYXRyaXhEcm9wZG93bkNvbHVtbixcbn0gZnJvbSBcIi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IE1pblJvd0NvdW50RXJyb3IsIEtleUR1cGxpY2F0aW9uRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29uZmlybUFjdGlvbiB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEeW5hbWljUm93TW9kZWwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmRleDogbnVtYmVyLCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhLCB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoZGF0YSwgdmFsdWUpO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHltYW5pYyBxdWVzdGlvbi4gWW91IG1heSB1c2UgYSBkcm9wZG93biwgY2hlY2tib3gsIHJhZGlvZ3JvdXAsIHRleHQgYW5kIGNvbW1lbnQgcXVlc3Rpb25zIGFzIGEgY2VsbCBlZGl0b3JzLlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcm93cywgdW5saWtlIGluIG1hdHJpeCBkcm9wZG93biBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxuICBpbXBsZW1lbnRzIElNYXRyaXhEcm9wZG93bkRhdGEge1xuICBwcml2YXRlIHJvd0NvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJvd0NvdW50VmFsdWU6IG51bWJlciA9IDI7XG4gIHByaXZhdGUgaW5pdGlhbFJvd0NvdW50OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHNldFJvd0NvdW50VmFsdWVGcm9tRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY29uZmlybURlbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImFkZFJvd1RleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInJlbW92ZVJvd1RleHRcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkeW5hbWljXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1Jvd3NEeW5hbWljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3dcbiAgICogQHNlZSBDb25maXJtRGVsZXRlVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gYSBjb2x1bW4gbmFtZSBhbmQgdGhlIGxpYnJhcnkgc2hvd3MgZHVwbGljYXRpb24gZXJyb3IsIGlmIHRoZXJlIGFyZSBzYW1lIHZhbHVlcyBpbiBkaWZmZXJlbnQgcm93cyBpbiB0aGUgY29sdW1uLlxuICAgKiBAc2VlIGtleUR1cGxpY2F0aW9uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQga2V5TmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogSWYgaXQgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIGV2ZXJ5IG5ldyByb3csIGluY2x1ZGluZyByb3dzIGNyZWF0ZWQgaW5pdGlhbGx5LCB1bmxlc3MgdGhlIGRlZmF1bHRWYWx1ZSBpcyBub3QgZW1wdHlcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1xuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0Um93VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFJvd1ZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFJvd1ZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIGNvcHkgdGhlIHZhbHVlIGludG8gbmV3IGFkZGVkIHJvdyBmcm9tIHRoZSBsYXN0IHJvdy4gSWYgZGVmYXVsdFJvd1ZhbHVlIGlzIHNldCBhbmQgdGhpcyBwcm9wZXJ0eSBlcXVhbHMgdG8gdHJ1ZSxcbiAgICogdGhlbiB0aGUgdmFsdWUgZm9yIG5ldyBhZGRlZCByb3cgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0Um93VmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzRGVmYXVsdFZhbHVlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSAmJiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRSb3dWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0Um93VmFsdWUpIHx8XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpXG4gICAgKSB7XG4gICAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLnJvd0NvdW50ID09IDApIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRSb3dWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguXG4gICAqIEBzZWUgbWluUm93Q291bnRcbiAgICogQHNlZSBtYXhSb3dDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCByb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvd0NvdW50VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gZmFsc2U7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcbiAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gcVZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5zcGxpY2UodmFsKTtcbiAgICAgIGZvciAodmFyIGkgPSBwcmV2VmFsdWU7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICB2YXIgbmV3Um93ID0gdGhpcy5jcmVhdGVNYXRyaXhSb3cobnVsbCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gcm93IGNvdW50LiBBIHVzZXIgY291bGQgbm90IGRlbGV0ZSBhIHJvdyBpZiB0aGUgcm93Q291bnQgZXF1YWxzIHRvIG1pblJvd0NvdW50XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICogQHNlZSBtYXhSb3dDb3VudFxuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBtaW5Sb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblJvd0NvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHZhbCA9IDA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluUm93Q291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsID4gdGhpcy5tYXhSb3dDb3VudCkgdGhpcy5tYXhSb3dDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA8IHZhbCkgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gcm93IGNvdW50LiBBIHVzZXIgY291bGQgbm90IGFkZCBhIHJvdyBpZiB0aGUgcm93Q291bnQgZXF1YWxzIHRvIG1heFJvd0NvdW50XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBtYXhSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhSb3dDb3VudFwiLCBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4Um93Q291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHJldHVybjtcbiAgICBpZiAodmFsID4gc2V0dGluZ3MubWF0cml4TWF4aW11bVJvd0NvdW50KVxuICAgICAgdmFsID0gc2V0dGluZ3MubWF0cml4TWF4aW11bVJvd0NvdW50O1xuICAgIGlmICh2YWwgPT0gdGhpcy5tYXhSb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFJvd0NvdW50XCIsIHZhbCk7XG4gICAgaWYgKHZhbCA8IHRoaXMubWluUm93Q291bnQpIHRoaXMubWluUm93Q291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucm93Q291bnQgPiB2YWwpIHRoaXMucm93Q291bnQgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGRpc2FibGUgYWJpbGl0eSB0byBhZGQgbmV3IHJvd3MuIFwiQWRkIG5ldyBSb3dcIiBidXR0b24gYmVjb21lcyBpbnZzaWJsZSBpbiBVSVxuICAgKiBAc2VlIGNhbkFkZFJvd1xuICAgKiBAc2VlIGFsbG93UmVtb3ZlUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0FkZFJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRkUm93c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRkUm93cyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFJvd3NcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSBhYmlsaXR5IHRvIHJlbW92ZSByb3dzLiBcIlJlbW92ZVwiIHJvdyBidXR0b25zIGJlY29tZSBpbnZzaWJsZSBpbiBVSVxuICAgKiBAc2VlIGNhblJlbW92ZVJvd3NcbiAgICogQHNlZSBhbGxvd0FkZFJvd3NcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dSZW1vdmVSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd1JlbW92ZVJvd3NcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1JlbW92ZVJvd3ModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVSb3dzXCIsIHZhbCk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiBhIG5ldyByb3cgY2FuIGJlIGFkZGVkLlxuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKiBAc2VlIG1heFJvd0NvdW50XG4gICAqIEBzZWUgY2FuUmVtb3ZlUm93c1xuICAgKiBAc2VlIHJvd0NvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbkFkZFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd0FkZFJvd3MgJiYgIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLnJvd0NvdW50IDwgdGhpcy5tYXhSb3dDb3VudFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgcm93IGNhbiBiZSByZW1vdmVkLlxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgY2FuQWRkUm93XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd1JlbW92ZVJvd3MgJiZcbiAgICAgICF0aGlzLmlzUmVhZE9ubHkgJiZcbiAgICAgIHRoaXMucm93Q291bnQgPiB0aGlzLm1pblJvd0NvdW50XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVtb3ZlUm93KHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgICB0aGlzLFxuICAgICAgKDxNYXRyaXhEeW5hbWljUm93TW9kZWw+cm93KS5pbmRleCxcbiAgICAgIHJvd1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYWRkIGEgbmV3IHJvdy5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3coKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiB0aGlzLCBjYW5BZGRSb3c6IHRoaXMuY2FuQWRkUm93IH07XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuY2FuQWRkUm93KSByZXR1cm47XG4gICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICB0aGlzLmFkZFJvd0NvcmUoKTtcbiAgICB0aGlzLm9uRW5kUm93QWRkaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Jvd3NBc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGFkZFJvd0NvcmUoKSB7XG4gICAgdmFyIHByZXZSb3dDb3VudCA9IHRoaXMucm93Q291bnQ7XG4gICAgdGhpcy5yb3dDb3VudCA9IHRoaXMucm93Q291bnQgKyAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRSb3dWYWx1ZSh0cnVlKTtcbiAgICB2YXIgbmV3VmFsdWUgPSBudWxsO1xuICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IHRoaXMucm93Q291bnQpIHtcbiAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbihcbiAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICk7XG4gICAgICB2YXIgcm93ID0gdGhpcy52aXNpYmxlUm93c1t0aGlzLnJvd0NvdW50IC0gMV07XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJvdy52YWx1ZSkpIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLCByb3cudmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdID0gcm93LnZhbHVlO1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmIChwcmV2Um93Q291bnQgKyAxID09IHRoaXMucm93Q291bnQpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Um93QWRkZWQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnZpc2libGVSb3dzW3RoaXMudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0RGVmYXVsdFJvd1ZhbHVlKGlzUm93QWRkZWQ6IGJvb2xlYW4pOiBhbnkge1xuICAgIHZhciByZXMgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHRoaXMuY29sdW1uc1tpXS50ZW1wbGF0ZVF1ZXN0aW9uO1xuICAgICAgaWYgKCEhcSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkocS5nZXREZWZhdWx0VmFsdWUoKSkpIHtcbiAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAoPGFueT5yZXMpW3RoaXMuY29sdW1uc1tpXS5uYW1lXSA9IHEuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0Um93VmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kZWZhdWx0Um93VmFsdWUpIHtcbiAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAoPGFueT5yZXMpW2tleV0gPSB0aGlzLmRlZmF1bHRSb3dWYWx1ZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNSb3dBZGRlZCAmJiB0aGlzLmRlZmF1bHRWYWx1ZUZyb21MYXN0Um93KSB7XG4gICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICghIXZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA+PSB0aGlzLnJvd0NvdW50IC0gMSkge1xuICAgICAgICB2YXIgcm93VmFsdWUgPSB2YWxbdGhpcy5yb3dDb3VudCAtIDJdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcm93VmFsdWUpIHtcbiAgICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgICAgKDxhbnk+cmVzKVtrZXldID0gcm93VmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm93IGJ5IGl0J3MgaW5kZXguIElmIGNvbmZpcm1EZWxldGUgaXMgdHJ1ZSwgc2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICogQHBhcmFtIGluZGV4IGEgcm93IGluZGV4LCBmcm9tIDAgdG8gcm93Q291bnQgLSAxXG4gICAqIEBzZWUgcmVtb3ZlUm93XG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVJvd1VJKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoISF2YWx1ZSAmJiAhIXZhbHVlLnJvd05hbWUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG4gICAgICB2YWx1ZSA9IGluZGV4O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JlcXVpcmVDb25maXJtT25Sb3dEZWxldGUodmFsdWUpIHx8XG4gICAgICBjb25maXJtQWN0aW9uKHRoaXMuY29uZmlybURlbGV0ZVRleHQpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZVJvdyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBpc1JlcXVpcmVDb25maXJtT25Sb3dEZWxldGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb25maXJtRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnJvd0NvdW50KSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZSkgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZGV4ID49IHZhbHVlLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWVbaW5kZXhdKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvdyBieSBpdCdzIGluZGV4LlxuICAgKiBAcGFyYW0gaW5kZXggYSByb3cgaW5kZXgsIGZyb20gMCB0byByb3dDb3VudCAtIDFcbiAgICovXG4gIHB1YmxpYyByZW1vdmVSb3coaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jYW5SZW1vdmVSb3dzKSByZXR1cm47XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XG4gICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICB0aGlzLnJlbW92ZVJvd0NvcmUoaW5kZXgpO1xuICAgIHRoaXMub25FbmRSb3dSZW1vdmluZyhpbmRleCk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVSb3dDb3JlKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzXG4gICAgICAgID8gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpbmRleF1cbiAgICAgICAgOiBudWxsO1xuICAgICAgdGhpcy5zdXJ2ZXkubWF0cml4Um93UmVtb3ZlZCh0aGlzLCBpbmRleCwgcm93KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgJiYgaW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnJvd0NvdW50VmFsdWUtLTtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgdmFyIHZhbCA9IFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgaW5kZXggPCB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWwgPSB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgICAgfVxuICAgICAgdmFsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB2YWwgPSB0aGlzLmRlbGV0ZVJvd1ZhbHVlKHZhbCwgbnVsbCk7XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRleHQgc2hvd2luZyBpbiB0aGUgY29uZmlybWF0aW9uIGRlbGV0ZSBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtRGVsZXRlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkdXBsaWNhdGlvbiB2YWx1ZSBlcnJvciB0ZXh0LiBTZXQgaXQgdG8gc2hvdyB0aGUgdGV4dCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC5cbiAgICogQHNlZSBrZXlOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwia2V5RHVwbGljYXRpb25FcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlEdXBsaWNhdGlvbkVycm9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0tleUR1cGxpY2F0aW9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYWRkIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHtcbiAgICB2YXIgZGVmYXVsdExvY05hbWUgPSB0aGlzLmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCA/IFwiYWRkUm93XCIgOiBcImFkZENvbHVtblwiO1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiYWRkUm93VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhkZWZhdWx0TG9jTmFtZSlcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgYWRkUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWRkUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NBZGRSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgJ0FkZCBSb3cnIGJ1dHRvbiBpcyBzaG93biBvbiBib3R0b20gaWYgY29sdW1uTGF5b3V0IGlzIGhvcml6b250YWwgYW5kIG9uIHRvcCBpZiBjb2x1bW5MYXlvdXQgaXMgdmVydGljYWwuIDxici8+XG4gICAqIFlvdSBtYXkgc2V0IGl0IHRvIFwidG9wXCIsIFwiYm90dG9tXCIgb3IgXCJ0b3BCb3R0b21cIiAodG8gc2hvdyBvbiB0b3AgYW5kIGJvdHRvbSkuXG4gICAqIEBzZWUgY29sdW1uTGF5b3V0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFkZFJvd0xvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFkZFJvd0xvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWRkUm93TG9jYXRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhZGRSb3dMb2NhdGlvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBZGRSb3dPblRvcCgpIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRkUm93KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuYWRkUm93TG9jYXRpb24gPT09IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0ID09PSBcInZlcnRpY2FsXCI7XG4gICAgcmV0dXJuIHRoaXMuYWRkUm93TG9jYXRpb24gIT09IFwiYm90dG9tXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0FkZFJvd09uQm90dG9tKCkge1xuICAgIGlmICghdGhpcy5jYW5BZGRSb3cpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5hZGRSb3dMb2NhdGlvbiA9PT0gXCJkZWZhdWx0XCIpXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5MYXlvdXQgPT09IFwiaG9yaXpvbnRhbFwiO1xuICAgIHJldHVybiB0aGlzLmFkZFJvd0xvY2F0aW9uICE9PSBcInRvcFwiO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVtb3ZlUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInJlbW92ZVJvd1RleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVSb3dcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVtb3ZlUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicmVtb3ZlUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZW1vdmVSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicmVtb3ZlUm93VGV4dFwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAoIXZhbHVlcyB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICAgIHZhciByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShyb3dzW2ldLCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dCA/IHRoaXMuY29sdW1ucy5pbmRleE9mKGNvbnRleHQpID4gLTEgOiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIlswXS5cIiArIGNvbHVtbi5uYW1lLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCJbMF0uXCIgKyBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhc0NvbnRleHQgJiYgY29sdW1uICE9IGNvbnRleHQpIHtcbiAgICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInJvdy5cIiArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicm93LlwiICsgY29sdW1uLmZ1bGxUaXRsZSxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBoYXNSb3dUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoIWlzT25WYWx1ZUNoYW5nZWQgJiYgdGhpcy5oYXNFcnJvckluUm93cygpKSB7XG4gICAgICBlcnJvcnMucHVzaChuZXcgTWluUm93Q291bnRFcnJvcih0aGlzLm1pblJvd0NvdW50LCB0aGlzKSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdmFyIGlzRHVwbGljYXRlZCA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQoKTtcbiAgICByZXR1cm4gaXNEdXBsaWNhdGVkIHx8IHByZXZWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgdmFyIHNldFJvd0NvdW50ID0gMDtcbiAgICBmb3IgKFxuICAgICAgdmFyIHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd0luZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7XG4gICAgICByb3dJbmRleCsrXG4gICAgKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tyb3dJbmRleF07XG4gICAgICBpZiAoIXJvdy5pc0VtcHR5KSBzZXRSb3dDb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gc2V0Um93Q291bnQgPCB0aGlzLm1pblJvd0NvdW50O1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUR1cGxpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmtleU5hbWUgfHwgIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUodGhpcy5rZXlOYW1lKTtcbiAgICBpZiAoIWNvbHVtbikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBrZXlWYWx1ZXMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPVxuICAgICAgICB0aGlzLmlzVmFsdWVEdXBsaWNhdGVkSW5Sb3coXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXSxcbiAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAga2V5VmFsdWVzXG4gICAgICAgICkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUR1cGxpY2F0ZWRJblJvdyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAga2V5VmFsdWVzOiBBcnJheTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBxdWVzdGlvbiA9IHJvdy5nZXRRdWVzdGlvbkJ5Q29sdW1uKGNvbHVtbik7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlID09IGtleVZhbHVlc1tpXSkge1xuICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihcbiAgICAgICAgICBuZXcgS2V5RHVwbGljYXRpb25FcnJvcih0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBrZXlWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVJvd3MoKTogQXJyYXk8TWF0cml4RHluYW1pY1Jvd01vZGVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhEeW5hbWljUm93TW9kZWw+KCk7XG4gICAgaWYgKHRoaXMucm93Q291bnQgPT09IDApIHJldHVybiByZXN1bHQ7XG4gICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3codGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgodmFsLCBpKSkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZ2V0RGVmYXVsdFJvd1ZhbHVlKGZhbHNlKSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyh2YWx1ZTogYW55KTogTWF0cml4RHluYW1pY1Jvd01vZGVsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeER5bmFtaWNSb3dNb2RlbCh0aGlzLnJvd0NvdW50ZXIrKywgdGhpcywgdmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZVZhbHVlQ2hhbmdlZCh2YWw6IGFueSkge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybjtcbiAgICB2YXIgbmV3Um93Q291bnQgPSB2YWwubGVuZ3RoO1xuICAgIGlmIChuZXdSb3dDb3VudCA9PSB0aGlzLnJvd0NvdW50KSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSAmJiBuZXdSb3dDb3VudCA8IHRoaXMuaW5pdGlhbFJvd0NvdW50KVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gdHJ1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSBuZXdSb3dDb3VudDtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyA9IG51bGw7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAoIXJlc3VsdCB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXN1bHQgPSBbXTtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCk7XG4gICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpO1xuICAgIHJvd1ZhbHVlID0gcm93VmFsdWUgfHwge307XG4gICAgZm9yICh2YXIgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUocm93VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IGFueSB7XG4gICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlW2ldKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZVtpXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBpc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNFbXB0eSA/IG51bGwgOiBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgJiYgaW5kZXggPCBxdWVzdGlvblZhbHVlLmxlbmd0aFxuICAgICAgPyBxdWVzdGlvblZhbHVlW2luZGV4XVxuICAgICAgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dWYWx1ZUNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBxdWVzdGlvblZhbHVlOiBhbnksXG4gICAgY3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHJldHVybiB7fTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRSb3dWYWx1ZUJ5SW5kZXgoXG4gICAgICBxdWVzdGlvblZhbHVlLFxuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5pbmRleE9mKHJvdylcbiAgICApO1xuICAgIGlmICghcmVzICYmIGNyZWF0ZSkgcmVzID0ge307XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGR5bmFtaWNcIixcbiAgW1xuICAgIHsgbmFtZTogXCJyb3dzVmlzaWJsZUlmOmNvbmRpdGlvblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd0FkZFJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUm93czpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwicm93Q291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDIsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcIm1pblJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4Um93Q291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiBzZXR0aW5ncy5tYXRyaXhNYXhpbXVtUm93Q291bnQsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwia2V5TmFtZVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jS2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgIH0sXG4gICAgXCJkZWZhdWx0Um93VmFsdWU6cm93dmFsdWVcIixcbiAgICBcImRlZmF1bHRWYWx1ZUZyb21MYXN0Um93OmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwiY29uZmlybURlbGV0ZTpib29sZWFuXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiY29uZmlybURlbGV0ZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmNvbmZpcm1EZWxldGU7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFkZFJvd0xvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJ0b3BCb3R0b21cIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiYWRkUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQWRkUm93VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7XG4gIHJldHVybiBxO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHluYW1pYy50cyIsImltcG9ydCB7XG4gIEJhc2UsXG4gIElTdXJ2ZXlEYXRhLFxuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleSxcbiAgSVBhbmVsLFxuICBJRWxlbWVudCxcbiAgSVRleHRQcm9jZXNzb3IsXG59IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFN1cnZleVZhbGlkYXRvciwgSVZhbGlkYXRvck93bmVyIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCIuL3F1ZXN0aW9uX3RleHRcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgQW5zd2VyUmVxdWlyZWRFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTXVsdGlwbGVUZXh0RGF0YSBleHRlbmRzIElMb2NhbGl6YWJsZU93bmVyLCBJUGFuZWwge1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvcjtcbiAgZ2V0QWxsVmFsdWVzKCk6IGFueTtcbiAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xuICBzZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG4gIGdldEl0ZW1EZWZhdWx0VmFsdWUobmFtZTogc3RyaW5nKTogYW55O1xuICBnZXRJc1JlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgZXh0ZW5kcyBCYXNlXG4gIGltcGxlbWVudHMgSVZhbGlkYXRvck93bmVyLCBJU3VydmV5RGF0YSwgSVN1cnZleUltcGwge1xuICBwcml2YXRlIGVkaXRvclZhbHVlOiBRdWVzdGlvblRleHRNb2RlbDtcbiAgcHJpdmF0ZSBkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YTtcblxuICB2YWx1ZUNoYW5nZWRDYWxsYmFjazogKG5ld1ZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IobmFtZTogYW55ID0gbnVsbCwgdGl0bGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZWRpdG9yVmFsdWUgPSB0aGlzLmNyZWF0ZUVkaXRvcihuYW1lKTtcbiAgICB0aGlzLmVkaXRvci5xdWVzdGlvblRpdGxlVGVtcGxhdGVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlkO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lLlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLm5hbWU7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IubmFtZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gPFF1ZXN0aW9uPig8YW55PnRoaXMuZGF0YSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3IoKTogUXVlc3Rpb25UZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmVkaXRvclZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3IobmFtZTogc3RyaW5nKTogUXVlc3Rpb25UZXh0TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25UZXh0TW9kZWwobmFtZSk7XG4gIH1cbiAgcHVibGljIGFkZFVzZWRMb2NhbGVzKGxvY2FsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBzdXBlci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB0aGlzLmVkaXRvci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB0aGlzLmVkaXRvci5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHNldERhdGEoZGF0YTogSU11bHRpcGxlVGV4dERhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmICghIWRhdGEpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlZmF1bHRWYWx1ZSA9IGRhdGEuZ2V0SXRlbURlZmF1bHRWYWx1ZSh0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0U3VydmV5SW1wbCh0aGlzKTtcbiAgICAgIHRoaXMuZWRpdG9yLnBhcmVudCA9IGRhdGE7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBtYWtlIHRoZSBpdGVtIGEgcmVxdWlyZWQuIElmIGEgdXNlciBkb2Vzbid0IGZpbGwgdGhlIGl0ZW0gdGhlbiBhIHZhbGlkYXRpb24gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlzUmVxdWlyZWQ7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuZWRpdG9yLmlzUmVxdWlyZWQgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnB1dCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaW5wdXRUeXBlO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5wdXRUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IuaW5wdXRUeXBlID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBJdGVtIHRpdGxlLiBJZiBpdCBpcyBlbXB0eSwgdGhlIGl0ZW0gbmFtZSBpcyByZW5kZXJlZCBhcyB0aXRsZS4gVGhpcyBwcm9wZXJ0eSBzdXBwb3J0cyBtYXJrZG93bi5cbiAgICogQHNlZSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci50aXRsZSA9IHZhbDtcbiAgfVxuICBnZXQgbG9jVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmxvY1RpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG9yIGh0bWwgZm9yIHJlbmRlcmluZyB0aGUgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5mdWxsVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRleHQgbGVuZ3RoLiBJZiBpdCBpcyAtMSwgZGVmYXVsIHZhbHVlLCB0aGVuIHRoZSBzdXJ2ZXkgbWF4VGV4dExlbmd0aCBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAqIElmIGl0IGlzIDAsIHRoZW4gdGhlIHZhbHVlIGlzIHVubGltaXRlZFxuICAgKiBAc2VlIFN1cnZleU1vZGVsLm1heFRleHRMZW5ndGhcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLm1heExlbmd0aDtcbiAgfVxuICBwdWJsaWMgc2V0IG1heExlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuZWRpdG9yLm1heExlbmd0aCA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4TGVuZ3RoKCk6IGFueSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0TWF4TGVuZ3RoKFxuICAgICAgdGhpcy5tYXhMZW5ndGgsXG4gICAgICBzdXJ2ZXkgPyBzdXJ2ZXkubWF4VGV4dExlbmd0aCA6IC0xXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGlucHV0IHBsYWNlIGhvbGRlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IucGxhY2VIb2xkZXI7XG4gIH1cbiAgcHVibGljIHNldCBwbGFjZUhvbGRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnBsYWNlSG9sZGVyID0gdmFsO1xuICB9XG4gIGdldCBsb2NQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmxvY1BsYWNlSG9sZGVyO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRleHQgdGhhdCB3aWxsIGJlIHNob3duIG9uIHJlcXVpcmVkIGVycm9yLiBVc2UgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IucmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnJlcXVpcmVkRXJyb3JUZXh0ID0gdmFsO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmxvY1JlcXVpcmVkRXJyb3JUZXh0O1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBxdWVzdGlvbiB2YWxpZGF0b3JzLlxuICAgKi9cbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci52YWxpZGF0b3JzO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsaWRhdG9ycyh2YWw6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4pIHtcbiAgICB0aGlzLmVkaXRvci52YWxpZGF0b3JzID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRWYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpdGVtIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKHRoaXMubmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYXRhLnNldE11bHRpcGxlVGV4dFZhbHVlKHRoaXMubmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWx1ZUNoYW5nZWRDYWxsYmFjaykgdGhpcy52YWx1ZUNoYW5nZWRDYWxsYmFjayhuZXdWYWx1ZSk7XG4gIH1cbiAgLy9JU3VydmV5SW1wbFxuICBnZVN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFRleHRQcm9jZXNzb3IoKSA6IG51bGw7XG4gIH1cbiAgLy9JU3VydmV5RGF0YVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICB9XG4gIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge31cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICB9XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgbXVsdGlwbGUgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhLCBJUGFuZWwge1xuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiaXRlbXNcIiwgZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgaXRlbS5zZXREYXRhKHNlbGYpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpdGVtc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY29sQ291bnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtdWx0aXBsZXRleHRcIjtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwpIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNbaV0uc2V0RGF0YSh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0FsbG93VGl0bGVMZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy5lZGl0b3JzT25TdXJ2ZXlMb2FkKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0uZWRpdG9yKSBpdGVtLmVkaXRvci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkoaXRlbS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICBpZiAoaXRlbS5lZGl0b3IpIGl0ZW0uZWRpdG9yLm9uU3VydmV5VmFsdWVDaGFuZ2VkKGl0ZW0udmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGVkaXRvcnNPblN1cnZleUxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICBpZiAoaXRlbS5lZGl0b3IpIHtcbiAgICAgICAgKDxhbnk+aXRlbSkuZWRpdG9yLm9uU3VydmV5TG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgaW5wdXQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHZhbDogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyB0ZXh0IGl0ZW0uXG4gICAqIEBwYXJhbSBuYW1lIGEgaXRlbSBuYW1lXG4gICAqIEBwYXJhbSB0aXRsZSBhIGl0ZW0gdGl0bGUgKG9wdGlvbmFsKVxuICAgKi9cbiAgcHVibGljIGFkZEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVRleHRJdGVtKG5hbWUsIHRpdGxlKTtcbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMuaXRlbXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIi5cIiArIGl0ZW0ubmFtZSxcbiAgICAgICAgdGV4dDogdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiICsgaXRlbS5mdWxsVGl0bGUsXG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeU5hbWUocGF0aCk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICB2YXIganNvbiA9IG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KGl0ZW0pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gXCJ0ZXh0XCI7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMuIEl0ZW1zIGFyZSByZW5kcmVkIGluIG9uZSBsaW5lIGlmIHRoZSB2YWx1ZSBpcyAwLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEgfHwgdmFsID4gNSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRleHQgaW5wdXQgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIik7XG4gIH1cbiAgcHVibGljIHNldCBpdGVtU2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1TaXplXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgcmVuZGVyZWQgcm93cy5cbiAgICovXG4gIHB1YmxpYyBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgcm93cy5wdXNoKFtdKTtcbiAgICAgIH1cbiAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXS5wdXNoKGl0ZW1zW2ldKTtcbiAgICAgIGluZGV4Kys7XG4gICAgICBpZiAoaW5kZXggPj0gY29sQ291bnQpIHtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcml2YXRlIGlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uSXRlbVZhbHVlQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVUZXh0SXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKG5hbWUsIHRpdGxlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtVmFsdWVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW1WYWx1ZSA9IG51bGw7XG4gICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLml0ZW1zW2ldLm5hbWUgaW4gdGhpcy52YWx1ZSkge1xuICAgICAgICBpdGVtVmFsdWUgPSB0aGlzLnZhbHVlW3RoaXMuaXRlbXNbaV0ubmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLml0ZW1zW2ldLm9uVmFsdWVDaGFuZ2VkKGl0ZW1WYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChcbiAgICAgICAgaGFzRXJyb3JzOiBib29sZWFuXG4gICAgICApID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgICAgaWYgKFxuICAgICAgICAhIXJlYyAmJlxuICAgICAgICByZWMuaXNPblZhbHVlQ2hhbmdlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5pc0VtcHR5KClcbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMgPSB0aGlzLml0ZW1zW2ldLmVkaXRvci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spIHx8IHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlc3VsdCA9IHN1cGVyLmdldEFsbEVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVycm9ycyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmdldEFsbEVycm9ycygpO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHN1cGVyLmNsZWFyRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5jbGVhckVycm9ycygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldENvbnRhaW5zRXJyb3JzKCk7XG4gICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1tpXS5lZGl0b3IuY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5nZXRJc0Fuc3dlcmVkKCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZGl0b3IgPSB0aGlzLml0ZW1zW2ldLmVkaXRvcjtcbiAgICAgIGlmIChlZGl0b3IuaXNWaXNpYmxlICYmICFlZGl0b3IuaXNBbnN3ZXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vSU11bHRpcGxlVGV4dERhdGFcbiAgZ2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtuYW1lXTtcbiAgfVxuICBzZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICBuZXdWYWx1ZSA9IHt9O1xuICAgIH1cbiAgICBuZXdWYWx1ZVtuYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgZ2V0SXRlbURlZmF1bHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGVmYXVsdFZhbHVlID8gdGhpcy5kZWZhdWx0VmFsdWVbbmFtZV0gOiBudWxsO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvcjtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHQgOiBcIlwiO1xuICB9XG4gIC8vSVBhbmVsXG4gIGFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHt9XG4gIHJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibGVmdFwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge31cbiAgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtdWx0aXBsZXRleHRpdGVtXCIsXG4gIFtcbiAgICBcIm5hbWVcIixcbiAgICBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2VIb2xkZXJcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW5wdXRUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcInRleHRcIixcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgXCJjb2xvclwiLFxuICAgICAgICBcImRhdGVcIixcbiAgICAgICAgXCJkYXRldGltZVwiLFxuICAgICAgICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgICAgIFwiZW1haWxcIixcbiAgICAgICAgXCJtb250aFwiLFxuICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICBcInBhc3N3b3JkXCIsXG4gICAgICAgIFwicmFuZ2VcIixcbiAgICAgICAgXCJ0ZWxcIixcbiAgICAgICAgXCJ0ZXh0XCIsXG4gICAgICAgIFwidGltZVwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcIndlZWtcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl2YWxpZGF0b3JcIixcbiAgICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKFwiXCIpO1xuICB9XG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm11bHRpcGxldGV4dFwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFpdGVtczp0ZXh0aXRlbXNcIiwgY2xhc3NOYW1lOiBcIm11bHRpcGxldGV4dGl0ZW1cIiB9LFxuICAgIHsgbmFtZTogXCJpdGVtU2l6ZTpudW1iZXJcIiwgZGVmYXVsdDogMjUsIG1pblZhbHVlOiAwIH0sXG4gICAgeyBuYW1lOiBcImNvbENvdW50Om51bWJlclwiLCBkZWZhdWx0OiAxLCBjaG9pY2VzOiBbMSwgMiwgMywgNCwgNV0gfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm11bHRpcGxldGV4dFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKG5hbWUpO1xuICBxLmFkZEl0ZW0oXCJ0ZXh0MVwiKTtcbiAgcS5hZGRJdGVtKFwidGV4dDJcIik7XG4gIHJldHVybiBxO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25fbXVsdGlwbGV0ZXh0LnRzIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgSUVsZW1lbnQsXG4gIElRdWVzdGlvbixcbiAgQmFzZSxcbiAgSVBhbmVsLFxuICBTdXJ2ZXlFcnJvcixcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElTdXJ2ZXlJbXBsLFxuICBJVGV4dFByb2Nlc3Nvcixcbn0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgVGV4dFByZVByb2Nlc3NvciwgVGV4dFByZVByb2Nlc3NvclZhbHVlIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IEtleUR1cGxpY2F0aW9uRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi9rbm9ja291dC9rb3BhZ2VcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24gfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEge1xuICBnZXRJdGVtSW5kZXgoaXRlbTogSVN1cnZleURhdGEpOiBudW1iZXI7XG4gIGdldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEpOiBhbnk7XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBhbnk7XG4gIGdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgcGFuZWxJbmRleDogbnVtYmVyKTogUXVlc3Rpb247XG4gIGdldFN1cnZleSgpOiBJU3VydmV5O1xuICBnZXRSb290RGF0YSgpOiBJU3VydmV5RGF0YTtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICBpbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCwgSVRleHRQcm9jZXNzb3Ige1xuICBwdWJsaWMgc3RhdGljIEl0ZW1WYXJpYWJsZU5hbWUgPSBcInBhbmVsXCI7XG4gIHB1YmxpYyBzdGF0aWMgSW5kZXhWYXJpYWJsZU5hbWUgPSBcInBhbmVsSW5kZXhcIjtcbiAgcHJpdmF0ZSBwYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGE7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IoZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSwgcGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucGFuZWxWYWx1ZSA9IHBhbmVsO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3IgPSBuZXcgVGV4dFByZVByb2Nlc3NvcigpO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3Nvci5vblByb2Nlc3MgPSBmdW5jdGlvbiAoXG4gICAgICB0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZVxuICAgICkge1xuICAgICAgc2VsZi5nZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuc2V0U3VydmV5SW1wbCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnBhbmVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5kYXRhLnNldFBhbmVsSXRlbURhdGEodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuZ2V0VmFsdWUobmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpO1xuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgbG9jTm90aWZpY2F0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4LCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRQYW5lbEl0ZW1EYXRhKHRoaXMpO1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBzdXJ2ZXlWYWx1ZXMgPVxuICAgICAgISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGEuZ2V0Um9vdERhdGEoKVxuICAgICAgICA/IHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkVmFsdWVzKClcbiAgICAgICAgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3VydmV5VmFsdWVzKSB7XG4gICAgICB2YWx1ZXNba2V5XSA9IHN1cnZleVZhbHVlc1trZXldO1xuICAgIH1cbiAgICB2YWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVdID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YS5nZXRSb290RGF0YSgpKVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRSb290RGF0YSgpLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIGdlU3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vSVRleHRQcm9jZXNzb3JcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICBpZiAoIXRleHRWYWx1ZSkgcmV0dXJuO1xuICAgIHZhciBwYW5lbEluZGV4ID0gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0SXRlbUluZGV4KHRoaXMpIDogLTE7XG4gICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHBhbmVsSW5kZXggKyAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gZmlyc3ROYW1lID09IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lO1xuICAgIHRleHRWYWx1ZS5jYW5Qcm9jZXNzID0gdGV4dFZhbHVlLmlzRXhpc3RzO1xuICAgIGlmICghdGV4dFZhbHVlLmNhblByb2Nlc3MpIHJldHVybjtcbiAgICAvL25hbWUgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHBhbmVsXG4gICAgdGV4dFZhbHVlLm5hbWUgPSB0ZXh0VmFsdWUubmFtZS5yZXBsYWNlKFxuICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWUgKyBcIi5cIixcbiAgICAgIFwiXCJcbiAgICApO1xuICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKHRleHRWYWx1ZS5uYW1lKTtcbiAgICB2YXIgcXVlc3Rpb24gPSA8UXVlc3Rpb24+dGhpcy5wYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGZpcnN0TmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbiAmJiBwYW5lbEluZGV4ID4gLTEpIHtcbiAgICAgIHF1ZXN0aW9uID0gdGhpcy5kYXRhLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KGZpcnN0TmFtZSwgcGFuZWxJbmRleCk7XG4gICAgfVxuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICg8YW55PnZhbHVlcylbZmlyc3ROYW1lXSA9IHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWVcbiAgICAgICAgPyBxdWVzdGlvbi5kaXNwbGF5VmFsdWVcbiAgICAgICAgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFsbFZhbHVlcyA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgICBpZiAoYWxsVmFsdWVzKSB7XG4gICAgICAgICg8YW55PnZhbHVlcylbZmlyc3ROYW1lXSA9IGFsbFZhbHVlc1tmaXJzdE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICB0ZXh0VmFsdWUudmFsdWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUodGV4dFZhbHVlLm5hbWUsIHZhbHVlcyk7XG4gIH1cbiAgcHJvY2Vzc1RleHQodGV4dDogc3RyaW5nLCByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHRleHQgPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IucHJvY2Vzcyh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIHJldHVybiBzdXJ2ZXkgPyBzdXJ2ZXkucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKSA6IHRleHQ7XG4gIH1cbiAgcHJvY2Vzc1RleHRFeCh0ZXh0OiBzdHJpbmcsIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbik6IGFueSB7XG4gICAgdGV4dCA9IHRoaXMucHJvY2Vzc1RleHQodGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB2YXIgaGFzQWxsVmFsdWVzT25MYXN0UnVuID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLmhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICB2YXIgcmVzID0geyBoYXNBbGxWYWx1ZXNPbkxhc3RSdW46IHRydWUsIHRleHQ6IHRleHQgfTtcbiAgICBpZiAodGhpcy5nZXRTdXJ2ZXkoKSkge1xuICAgICAgcmVzID0gdGhpcy5nZXRTdXJ2ZXkoKS5wcm9jZXNzVGV4dEV4KHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuID1cbiAgICAgIHJlcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gJiYgaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHJldHVybiByZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsIGltcGxlbWVudHMgSVN1cnZleUltcGwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSkge31cbiAgZ2VTdXJ2ZXlEYXRhKCk6IElTdXJ2ZXlEYXRhIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRTdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcGFuZWwgZHltYW5pYyBxdWVzdGlvbi4gWW91IHNldHVwIHRoZSB0ZW1wbGF0ZSBwYW5lbCwgYnV0IGFkZGluZyBlbGVtZW50cyAoYW55IHF1ZXN0aW9uIG9yIGEgcGFuZWwpIGFuZCBhc3NpZ24gYSB0ZXh0IHRvIGl0J3MgdGl0bGUsIGFuZCB0aGlzIHBhbmVsIHdpbGwgYmUgdXNlZCBhcyBhIHRlbXBsYXRlIG9uIGNyZWF0aW5nIGR5bmFtaWMgcGFuZWxzLiBUaGUgbnVtYmVyIG9mIHBhbmVscyBpcyBkZWZpbmVkIGJ5IHBhbmVsQ291bnQgcHJvcGVydHkuXG4gKiBBbiBlbmQtdXNlciBtYXkgZHluYW1pY2FsbHkgYWRkL3JlbW92ZSBwYW5lbHMsIHVubGVzcyB5b3UgZm9yYmlkZGVuIHRoaXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIGV4dGVuZHMgUXVlc3Rpb25cbiAgaW1wbGVtZW50cyBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcml2YXRlIGxvYWRpbmdQYW5lbENvdW50OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHk6IGJvb2xlYW47XG4gIHByaXZhdGUgY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgcHJpdmF0ZSBjdXJyZW50SW5kZXhWYWx1ZTogbnVtYmVyID0gLTE7XG5cbiAgcmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcGFuZWxDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicGFuZWxzXCIpO1xuICAgIHRoaXMudGVtcGxhdGVWYWx1ZSA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHRoaXMudGVtcGxhdGUucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLnRlbXBsYXRlLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnRlbXBsYXRlLmFkZEVsZW1lbnRDYWxsYmFjayA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBzZWxmLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soZWxlbWVudCk7XG4gICAgICBzZWxmLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9O1xuICAgIHRoaXMudGVtcGxhdGUucmVtb3ZlRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHNlbGYucmVidWlsZFBhbmVscygpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY29uZmlybURlbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsQWRkVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxSZW1vdmVUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFByZXZUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbE5leHRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJwYW5lbHNTdGF0ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpO1xuICAgIHRoaXMuc2V0UGFuZWxzU3VydmV5SW1wbCgpO1xuICB9XG4gIHByaXZhdGUgYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCkge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMudGVtcGxhdGUuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICg8QmFzZT4oPGFueT5lbGVtZW50KSkub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICBzZWxmLm9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICg8UGFuZWxNb2RlbD4oPGFueT5lbGVtZW50KSkuYWRkRWxlbWVudENhbGxiYWNrID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgc2VsZi5hZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvblRlbXBsYXRlRWxlbWVudFByb3BlcnR5Q2hhbmdlZChlbGVtZW50OiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMucGFuZWxzLmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHZhciBwcm9wZXJ0eSA9IFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KGVsZW1lbnQuZ2V0VHlwZSgpLCBvcHRpb25zLm5hbWUpO1xuICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHBhbmVsc1tpXS5nZXRRdWVzdGlvbkJ5TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgICAgaWYgKCEhcXVlc3Rpb24gJiYgKDxhbnk+cXVlc3Rpb24pW29wdGlvbnMubmFtZV0gIT09IG9wdGlvbnMubmV3VmFsdWUpIHtcbiAgICAgICAgKDxhbnk+cXVlc3Rpb24pW29wdGlvbnMubmFtZV0gPSBvcHRpb25zLm5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInBhbmVsZHluYW1pY1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XG4gICAgICBwYW5lbC5jbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQWxsb3dUaXRsZUxlZnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUucmVtb3ZlRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwuIFRoaXMgcGFuZWwgaXMgdXNlZCBhcyBhIHRlbXBsYXRlIG9uIGNyZWF0aWduIGR5bmFtaWMgcGFuZWxzXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVRpdGxlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZWxlbWVudHMsIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlRWxlbWVudHMoKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5lbGVtZW50cztcbiAgfVxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsIHRpdGxlIHByb3BlcnR5LlxuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS50aXRsZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlVGl0bGUobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGUudGl0bGUgPSBuZXdWYWx1ZTtcbiAgfVxuICBnZXQgbG9jVGVtcGxhdGVUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbCBkZXNjcmlwdGlvbiBwcm9wZXJ0eS5cbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmRlc2NyaXB0aW9uO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVtcGxhdGVEZXNjcmlwdGlvbihuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5kZXNjcmlwdGlvbiA9IG5ld1ZhbHVlO1xuICB9XG4gIGdldCBsb2NUZW1wbGF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5sb2NEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXRlbXMoKTogQXJyYXk8SVN1cnZleURhdGE+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2godGhpcy5wYW5lbHNbaV0uZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBhcnJheSBvZiBkeW5hbWljIHBhbmVscyBjcmVhdGVkIGJhc2VkIG9uIHBhbmVsIHRlbXBsYXRlXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVscygpOiBBcnJheTxQYW5lbE1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsc1wiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGluZGV4IG9mIGN1cnJlbnQgYWN0aXZlIGR5bmFtaWNhbCBwYW5lbCB3aGVuIHRoZSByZW5kZXJNb2RlIGlzIG5vdCBcImxpc3RcIi4gSWYgdGhlcmUgaXMgbm8gZHltYW1pYyBwYW5lbCAocGFuZWxDb3VudCA9IDApIG9yIHJlbmRlck1vZGUgZXF1YWxzIFwibGlzdFwiIGl0IHJldHVybnMgLTEsIG90aGVyd2lzZSBpdCByZXR1cm5zIGEgdmFsdWUgZnJvbSAwIHRvIHBhbmVsQ291bnQgLSAxLlxuICAgKiBAc2VlIGN1cnJlbnRQYW5lbFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzUmVuZGVyTW9kZUxpc3QpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiAwO1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleFZhbHVlIDwgMCAmJiB0aGlzLnBhbmVsQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleFZhbHVlID0gMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4VmFsdWUgPj0gdGhpcy5wYW5lbENvdW50KSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleFZhbHVlID0gdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBjdXJyZW50SW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhWYWx1ZSAhPT0gdmFsKSB7XG4gICAgICBpZiAodmFsID49IHRoaXMucGFuZWxDb3VudCkgdmFsID0gdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4VmFsdWUgPSB2YWw7XG4gICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBhY3RpdmUgZHluYW1pY2FsIHBhbmVsIHdoZW4gdGhlIHJlbmRlck1vZGUgaXMgbm90IFwibGlzdFwiLiBJZiB0aGVyZSBpcyBubyBkeW1hbWljIHBhbmVsIChwYW5lbENvdW50ID0gMCkgb3IgcmVuZGVyTW9kZSBlcXVhbHMgXCJsaXN0XCIgaXQgcmV0dXJucyBudWxsLlxuICAgKiBAc2VlIGN1cnJlbkluZGV4XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHJlbmRlck1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBpbmRleCA9IHRoaXMuY3VycmVudEluZGV4O1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5wYW5lbHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHNbaW5kZXhdO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgb24gcmVtb3ZpbmcgYSBwYW5lbFxuICAgKiBAc2VlIENvbmZpcm1EZWxldGVUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29uZmlybURlbGV0ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBhIHF1ZXN0aW9uIG5hbWUgdXNlZCBpbiB0aGUgdGVtcGxhdGUgcGFuZWwgYW5kIHRoZSBsaWJyYXJ5IHNob3dzIGR1cGxpY2F0aW9uIGVycm9yLCBpZiB0aGVyZSBhcmUgc2FtZSB2YWx1ZXMgaW4gZGlmZmVyZW50IHBhbmVscyBvZiB0aGlzIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGtleUR1cGxpY2F0aW9uRXJyb3JcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQga2V5TmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRleHQgc2hvd2luZyBpbiB0aGUgY29uZmlybWF0aW9uIGRlbGV0ZSBkaWFsb2cgb24gcmVtb3ZpbmcgYSBwYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29uZmlybURlbGV0ZVRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJjb25maXJtRGVsZXRlVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNvbmZpcm1EZWxldGVcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgY29uZmlybURlbGV0ZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbmZpcm1EZWxldGVUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0NvbmZpcm1EZWxldGVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZHVwbGljYXRpb24gdmFsdWUgZXJyb3IgdGV4dC4gU2V0IGl0IHRvIHNob3cgdGhlIHRleHQgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuXG4gICAqIEBzZWUga2V5TmFtZVxuICAgKi9cbiAgcHVibGljIGdldCBrZXlEdXBsaWNhdGlvbkVycm9yKCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQga2V5RHVwbGljYXRpb25FcnJvcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwia2V5RHVwbGljYXRpb25FcnJvclwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NLZXlEdXBsaWNhdGlvbkVycm9yKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBwcmV2aW91cyBidXR0b24gdGV4dC4gUHJldmlvdXMgYnV0dG9uIHNob3dzIHRoZSBwcmV2aW91cyBwYW5lbCwgY2hhbmdlIHRoZSBjdXJyZW50UGFuZWwsIHdoZW4gdGhlIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIi5cbiAgICogQHNlZSBjdXJyZW50UGFuZWxcbiAgICogQHNlZSBjdXJyZW50SW5kZXhcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsUHJldlRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhbmVsUHJldlRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwYWdlUHJldlRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxQcmV2VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxQcmV2VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NQYW5lbFByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUHJldlRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBuZXh0IGJ1dHRvbiB0ZXh0LiBOZXh0IGJ1dHRvbiBzaG93cyB0aGUgbmV4dCBwYW5lbCwgY2hhbmdlIHRoZSBjdXJyZW50UGFuZWwsIHdoZW4gdGhlIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIi5cbiAgICogQHNlZSBjdXJyZW50UGFuZWxcbiAgICogQHNlZSBjdXJyZW50SW5kZXhcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsTmV4dFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhbmVsTmV4dFRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwYWdlTmV4dFRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxOZXh0VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxOZXh0VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NQYW5lbE5leHRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsTmV4dFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhZGQgcGFuZWwgYnV0dG9uIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhbmVsQWRkVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcInBhbmVsQWRkVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImFkZFBhbmVsXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsQWRkVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbEFkZFRleHRcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NQYW5lbEFkZFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxBZGRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHBhbmVsIGJ1dHRvbiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFJlbW92ZVRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbFJlbW92ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZW1vdmVQYW5lbFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFJlbW92ZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsUmVtb3ZlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NQYW5lbFJlbW92ZVRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxSZW1vdmVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVuZGVyTW9kZSBlcXVhbHMgdG8gXCJwcm9ncmVzc1RvcFwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Byb2dyZXNzVG9wU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJNb2RlID09IFwicHJvZ3Jlc3NUb3BcIiB8fCB0aGlzLnJlbmRlck1vZGUgPT0gXCJwcm9ncmVzc1RvcEJvdHRvbVwiXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHJlbmRlck1vZGUgZXF1YWxzIHRvIFwicHJvZ3Jlc3NCb3R0b21cIiBvciBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNQcm9ncmVzc0JvdHRvbVNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucmVuZGVyTW9kZSA9PSBcInByb2dyZXNzQm90dG9tXCIgfHxcbiAgICAgIHRoaXMucmVuZGVyTW9kZSA9PSBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBjdXJyZW50SW5kZXggaXMgbW9yZSB0aGFuIDAuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBjdXJyZW5QYW5lbFxuICAgKi9cbiAgcHVibGljIGdldCBpc1ByZXZCdXR0b25TaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA+IDA7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGN1cnJlbnRJbmRleCBpcyBtb3JlIHRoYW4gb3IgZXF1YWwgMCBhbmQgbGVzcyB0aGFuIHBhbmVsQ291bnQgLSAxLlxuICAgKiBAc2VlIGN1cnJlbkluZGV4XG4gICAqIEBzZWUgY3VycmVuUGFuZWxcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTmV4dEJ1dHRvblNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLnBhbmVsQ291bnQgLSAxO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBzaG93UmFuZ2VJblByb2dyZXNzIGVxdWFscyB0byB0cnVlLCByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIgYW5kIHBhbmVsQ291bnQgaXMgPj0gMi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSYW5nZVNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1JhbmdlSW5Qcm9ncmVzcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwICYmIHRoaXMucGFuZWxDb3VudCA+IDFcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIGluY2x1ZGVIaWRkZW4gPyBbdGhpcy50ZW1wbGF0ZV0gOiB0aGlzLnRlbXBsYXRlRWxlbWVudHM7XG4gIH1cbiAgcHJpdmF0ZSBpc0FkZGluZ05ld1BhbmVsczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFkZGluZ05ld1BhbmVsc1ZhbHVlOiBhbnk7XG4gIHByaXZhdGUgaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpIHtcbiAgICB0aGlzLmFkZGluZ05ld1BhbmVsc1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzID0gdHJ1ZTtcbiAgICB0aGlzLmlzTmV3UGFuZWxzVmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKSB7XG4gICAgdGhpcy5pc0FkZGluZ05ld1BhbmVscyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzTmV3UGFuZWxzVmFsdWVDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWU7XG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0FkZGluZ05ld1BhbmVsc1xuICAgICAgPyB0aGlzLmFkZGluZ05ld1BhbmVsc1ZhbHVlXG4gICAgICA6IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQWRkaW5nTmV3UGFuZWxzKSB7XG4gICAgICB0aGlzLmlzTmV3UGFuZWxzVmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIuc2V0VmFsdWVDb3JlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGdldC9zZXQgdGhlIG51bWJlciBvZiBkeW5hbWljIHBhbmVscy5cbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgYWRkUGFuZWxcbiAgICogQHNlZSByZW1vdmVQYW5lbFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsVUlcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICA/IHRoaXMubG9hZGluZ1BhbmVsQ291bnRcbiAgICAgIDogdGhpcy5wYW5lbHMubGVuZ3RoO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMubG9hZGluZ1BhbmVsQ291bnQgPSB2YWw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWwgPT0gdGhpcy5wYW5lbHMubGVuZ3RoIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgdGhpcy5wcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCk7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMucGFuZWxDb3VudDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKCk7XG4gICAgICB0aGlzLnBhbmVscy5wdXNoKHBhbmVsKTtcbiAgICAgIGlmICh0aGlzLnJlbmRlck1vZGUgPT0gXCJsaXN0XCIgJiYgdGhpcy5wYW5lbHNTdGF0ZSAhPSBcImRlZmF1bHRcIikge1xuICAgICAgICBpZiAodGhpcy5wYW5lbHNTdGF0ZSA9PT0gXCJleHBhbmRcIikge1xuICAgICAgICAgIHBhbmVsLmV4cGFuZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghIXBhbmVsLnRpdGxlKSB7XG4gICAgICAgICAgICBwYW5lbC5jb2xsYXBzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsIDwgdGhpcy5wYW5lbENvdW50KSB0aGlzLnBhbmVscy5zcGxpY2UodmFsLCB0aGlzLnBhbmVsQ291bnQgLSB2YWwpO1xuICAgIHRoaXMuc2V0VmFsdWVBZnRlclBhbmVsc0NyZWF0aW5nKCk7XG4gICAgdGhpcy5zZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCk7XG4gICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGFsbG93IHRoZSBlbmQtdXNlciB0byBjb2xsYXBzZS9leHBhbmQgdGhlIHBhbmVscy4gSXQgd29ya3Mgb25seSBpZiB0aGUgcmVuZGVyTW9kZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIHRlbXBsYXRlVGl0bGUgcHJvcGVydHkgaXMgbm90IGVtcHR5LiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgYXZhaWxhYmxlOlxuICAgKiA8YnIvPiBkZWZhdWx0IC0gdGhlIGRlZmF1bHQgdmFsdWUuIFVzZXIgY2FuJ3QgY29sbGFwc2UvZXhwYW5kIHBhbmVsc1xuICAgKiA8YnIvPiBleHBhbmRlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMgYW5kIGFsbCBwYW5lbHMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHRcbiAgICogPGJyLz4gY29sbGFwc2VkIC0gVXNlciBjYW4gY29sbGFwc2UvZXhwYW5kIHBhbmVscyBhbmQgYWxsIHBhbmVscyBhcmUgY29sbGFwc2VkIGJ5IGRlZmF1bHRcbiAgICogPGJyLz4gZmlyc3RFeHBhbmRlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMuIFRoZSBmaXJzdCBwYW5lbCBpcyBleHBhbmRlZCBhbmQgb3RoZXJzIGFyZSBjb2xsYXBzZWRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbHNTdGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbHNTdGF0ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsc1N0YXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIHNldFRlbXBsYXRlUGFuZWxTdXJ2ZXlJbXBsKCkge1xuICAgIHRoaXMudGVtcGxhdGUuc2V0U3VydmV5SW1wbChcbiAgICAgIHRoaXMuaXNEZXNpZ25Nb2RlXG4gICAgICAgID8gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICAgIDogbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsKHRoaXMpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHNldFBhbmVsc1N1cnZleUltcGwoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaV07XG4gICAgICBpZiAocGFuZWwgPT0gdGhpcy50ZW1wbGF0ZSkgY29udGludWU7XG4gICAgICBwYW5lbC5zZXRTdXJ2ZXlJbXBsKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+cGFuZWwuZGF0YSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0UGFuZWxzU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMucmVuZGVyTW9kZSAhPSBcImxpc3RcIiB8fCAhdGhpcy50ZW1wbGF0ZVRpdGxlKVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMucGFuZWxzU3RhdGU7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiZmlyc3RFeHBhbmRlZFwiKSB7XG4gICAgICAgIHN0YXRlID0gaSA9PT0gMCA/IFwiZXhwYW5kZWRcIiA6IFwiY29sbGFwc2VkXCI7XG4gICAgICB9XG4gICAgICB0aGlzLnBhbmVsc1tpXS5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQmFzZWRPblBhbmVsQ291bnQoKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbXTtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSB2YWx1ZS5sZW5ndGg7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykgdmFsdWUucHVzaCh7fSk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgdmFsdWUuc3BsaWNlKHRoaXMucGFuZWxDb3VudCwgdmFsdWUubGVuZ3RoIC0gdGhpcy5wYW5lbENvdW50KTtcbiAgICB9XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHBhbmVsIGNvdW50LiBBIHVzZXIgY291bGQgbm90IGRlbGV0ZSBhIHBhbmVsIGlmIHRoZSBwYW5lbENvdW50IGVxdWFscyB0byBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluUGFuZWxDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5QYW5lbENvdW50XCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluUGFuZWxDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwKSB2YWwgPSAwO1xuICAgIGlmICh2YWwgPT0gdGhpcy5taW5QYW5lbENvdW50KSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluUGFuZWxDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPiB0aGlzLm1heFBhbmVsQ291bnQpIHRoaXMubWF4UGFuZWxDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5wYW5lbENvdW50IDwgdmFsKSB0aGlzLnBhbmVsQ291bnQgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHBhbmVsIGNvdW50LiBBIHVzZXIgY291bGQgbm90IGFkZCBhIHBhbmVsIGlmIHRoZSBwYW5lbENvdW50IGVxdWFscyB0byBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIG1pblBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UGFuZWxDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICBcIm1heFBhbmVsQ291bnRcIixcbiAgICAgIHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UGFuZWxDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPD0gMCkgcmV0dXJuO1xuICAgIGlmICh2YWwgPiBzZXR0aW5ncy5wYW5lbE1heGltdW1QYW5lbENvdW50KVxuICAgICAgdmFsID0gc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudDtcbiAgICBpZiAodmFsID09IHRoaXMubWF4UGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsIDwgdGhpcy5taW5QYW5lbENvdW50KSB0aGlzLm1pblBhbmVsQ291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucGFuZWxDb3VudCA+IHZhbCkgdGhpcy5wYW5lbENvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSAnQWRkIE5ldycgYnV0dG9uXG4gICAqIEBzZWUgYWxsb3dSZW1vdmVQYW5lbFxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0FkZFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dBZGRQYW5lbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGhpZGUgdGhlICdSZW1vdmUnIGJ1dHRvblxuICAgKiBAc2VlIGFsbG93QWRkUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dSZW1vdmVQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVQYW5lbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93UmVtb3ZlUGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVQYW5lbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGUgdGVtcGxhdGUgcXVlc3Rpb25zLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblxuICAgKiBAc2VlIFBhbmVsTW9kZWxCYXNlLnF1ZXN0aW9uVGl0bGVMb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVtcGxhdGVUaXRsZUxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIiwgdmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNob3cvaGlkZSB0aGUgbnVtYmVycyBpbiB0aXRsZXMgaW4gcXVlc3Rpb25zIGluc2lkZSBhIGR5bmFtaWMgcGFuZWwuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIFwib2ZmXCIuIFlvdSBtYXkgc2V0IGl0IHRvIFwib25QYW5lbFwiIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gaW5zaWRlIGEgZHluYW1pYyBwYW5lbCB3aWxsIHN0YXJ0IHdpdGggMSBvciBcIm9uU3VydmV5XCIgdG8gaW5jbHVkZSBuZXN0ZWQgcXVlc3Rpb25zIGluIGR5bWFtaWMgcGFuZWxzIGludG8gZ2xvYmFsIHN1cnZleSBxdWVzdGlvbiBudW1iZXJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dRdWVzdGlvbk51bWJlcnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dRdWVzdGlvbk51bWJlcnModmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHZhbCk7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5xdWVzdGlvblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMsIHRoaXMudmlzaWJsZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmFuZ2UgZnJvbSAxIHRvIHBhbmVsQ291bnQgd2hlbiByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuIFNldCB0byBmYWxzZSB0byBoaWRlIHRoaXMgZWxlbWVudC5cbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UmFuZ2VJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1JhbmdlSW5Qcm9ncmVzcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIGFsbCBkeW5hbWljIHBhbmVscyBhcmUgcmVuZGVyZWQgb25lIGJ5IG9uZSBvbiB0aGUgcGFnZS4gWW91IG1heSBjaGFuZ2UgaXQgdG86IFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIiB0byByZW5kZXIgb25seSBvbmUgZHluYW1pYyBwYW5lbCBhdCBvbmNlLiBUaGUgcHJvZ3Jlc3MgYW5kIG5hdmlnYXRpb24gZWxlbWVudHMgY2FuIGJlIHJlbmRyZWQgb24gdG9wLCBib3R0b20gb3IgYm90aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVuZGVyTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIiwgdmFsKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiByZW5kZXJNb2RlIGVxdWFscyB0byBcImxpc3RcIi5cbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVuZGVyTW9kZUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTW9kZSA9PSBcImxpc3RcIjtcbiAgfVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHJldHVybiAwO1xuICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25TdXJ2ZXlcIiA/IHZhbHVlIDogMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY291bnRlciA9IHRoaXMuc2V0UGFuZWxWaXNpYmxlSW5kZXgoXG4gICAgICAgIHRoaXMucGFuZWxzW2ldLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvZmZcIlxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblN1cnZleVwiKSB7XG4gICAgICAgIHN0YXJ0SW5kZXggKz0gY291bnRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuc2V0VmlzaWJsZUluZGV4KHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IC0xKTtcbiAgICByZXR1cm4gdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzICE9IFwib25TdXJ2ZXlcIiA/IDEgOiBzdGFydEluZGV4IC0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbFZpc2libGVJbmRleChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNob3dJbmRleDogYm9vbGVhblxuICApOiBudW1iZXIge1xuICAgIGlmICghc2hvd0luZGV4KSB7XG4gICAgICBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoLTEpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBwYW5lbC5zZXRWaXNpYmxlSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGFuIGVuZCB1c2VyIG1heSBhZGQgYSBuZXcgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGxlc3MgdGhhbiBtYXhQYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhbkFkZFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd0FkZFBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPCB0aGlzLm1heFBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBhbiBlbmQgdXNlciBtYXkgcmVtb3ZlIGEgcGFuZWwuIFRoZSBxdWVzdGlvbiBpcyBub3QgcmVhZCBvbmx5IGFuZCBwYW5lbENvdW50IGlzIG1vcmUgdGhhbiBtaW5QYW5lbENvdW50XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNhblJlbW92ZVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGxvd1JlbW92ZVBhbmVsICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnBhbmVsQ291bnQgPiB0aGlzLm1pblBhbmVsQ291bnRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZWJ1aWxkUGFuZWxzKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5wcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCk7XG4gICAgdmFyIHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSh0aGlzLCB0aGlzLnRlbXBsYXRlKTtcbiAgICAgIHBhbmVscy5wdXNoKHRoaXMudGVtcGxhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxDb3VudDsgaSsrKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHRoaXMuY3JlYXRlTmV3UGFuZWwoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFuZWxzLnNwbGljZSgwLCB0aGlzLnBhbmVscy5sZW5ndGgsIC4uLnBhbmVscyk7XG4gICAgdGhpcy5zZXRWYWx1ZUFmdGVyUGFuZWxzQ3JlYXRpbmcoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgdGhpcy5yZVJ1bkNvbmRpdGlvbigpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlbiB0aGlzIHZhbHVlIGlzIHNldCB0byBldmVyeSBuZXcgcGFuZWwsIGluY2x1ZGluZyBwYW5lbHMgY3JlYXRlZCBpbml0aWFsbHksIHVubGVzcyB0aGUgZGVmYXVsdFZhbHVlIGlzIG5vdCBlbXB0eVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRQYW5lbFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRQYW5lbFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFBhbmVsVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBjb3B5IHRoZSB2YWx1ZSBpbnRvIG5ldyBhZGRlZCBwYW5lbCBmcm9tIHRoZSBsYXN0IHBhbmVsLiBJZiBkZWZhdWx0UGFuZWxWYWx1ZSBpcyBzZXQgYW5kIHRoaXMgcHJvcGVydHkgZXF1YWxzIHRvIHRydWUsXG4gICAqIHRoZW4gdGhlIHZhbHVlIGZvciBuZXcgYWRkZWQgcGFuZWwgaXMgbWVyZ2luZy5cbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0UGFuZWxWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBpc0RlZmF1bHRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5pc0RlZmF1bHRWYWx1ZUVtcHR5KCkgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSkgfHxcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHN1cGVyLnNldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpIHx8IHRoaXMucGFuZWxDb3VudCA9PSAwKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNSb3dFbXB0eSh2YWxbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgaXNSb3dFbXB0eSh2YWw6IGFueSkge1xuICAgIGZvciAodmFyIHByb3AgaW4gdmFsKSB7XG4gICAgICBpZiAodmFsLmhhc093blByb3BlcnR5KHByb3ApKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBkeW5hbWljIHBhbmVsIGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSBQYW5lbC4gSXQgY2hlY2tzIGlmIGNhbkFkZFBhbmVsIHJldHVybnMgdHJ1ZSBhbmQgdGhlbiBjYWxscyBhZGRQYW5lbCBtZXRob2QuXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgY2FuQWRkUGFuZWxcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbFVJKCk6IFBhbmVsTW9kZWwge1xuICAgIGlmICghdGhpcy5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1BhbmVsID0gdGhpcy5hZGRQYW5lbCgpO1xuICAgIGlmICh0aGlzLnJlbmRlck1vZGUgPT09IFwibGlzdFwiICYmIHRoaXMucGFuZWxzU3RhdGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICBuZXdQYW5lbC5leHBhbmQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHluYW1pYyBwYW5lbCBiYXNlZCBvbiB0aGUgdGVtcGxhdGUgUGFuZWwuXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqL1xuICBwdWJsaWMgYWRkUGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgdGhpcy5wYW5lbENvdW50Kys7XG4gICAgaWYgKCF0aGlzLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5wYW5lbENvdW50IC0gMTtcbiAgICB9XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgaGFzTW9kaWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICEhbmV3VmFsdWUgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgJiZcbiAgICAgICAgbmV3VmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudFxuICAgICAgKSB7XG4gICAgICAgIGhhc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb3B5VmFsdWUobmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sIHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWwgJiZcbiAgICAgICEhbmV3VmFsdWUgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICBuZXdWYWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICBuZXdWYWx1ZS5sZW5ndGggPT0gdGhpcy5wYW5lbENvdW50XG4gICAgKSB7XG4gICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICB0aGlzLmNvcHlWYWx1ZShcbiAgICAgICAgbmV3VmFsdWVbbmV3VmFsdWUubGVuZ3RoIC0gMV0sXG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDJdXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaGFzTW9kaWZpZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxBZGRlZCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHNbdGhpcy5wYW5lbENvdW50IC0gMV07XG4gIH1cbiAgcHJpdmF0ZSBjb3B5VmFsdWUoc3JjOiBhbnksIGRlc3Q6IGFueSkge1xuICAgIGZvciAodmFyIGtleSBpbiBkZXN0KSB7XG4gICAgICBzcmNba2V5XSA9IGRlc3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgcmVtb3ZlUGFuZWwgZnVuY3Rpb24uIERvIG5vdGhpbmcgaXMgY2FuUmVtb3ZlUGFuZWwgcmV0dXJucyBmYWxzZS4gSWYgY29uZmlybURlbGV0ZSBzZXQgdG8gdHJ1ZSwgaXQgc2hvd3MgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgZmlyc3QuXG4gICAqIEBwYXJhbSB2YWx1ZSBhIHBhbmVsIG9yIHBhbmVsIGluZGV4XG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxcbiAgICogQHNlZSBjb25maXJtRGVsZXRlXG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVRleHRcbiAgICogQHNlZSBjYW5SZW1vdmVQYW5lbFxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhbmVsVUkodmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jYW5SZW1vdmVQYW5lbCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5jb25maXJtRGVsZXRlIHx8IGNvbmZpcm1BY3Rpb24odGhpcy5jb25maXJtRGVsZXRlVGV4dCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlUGFuZWwodmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR29lcyB0byB0aGUgbmV4dCBwYW5lbCBpbiB0aGUgUGFuZWxEeW5hbWljXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ29Ub05leHRQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJNb2RlICE9PSBcImxpc3RcIiAmJiB0aGlzLmN1cnJlbnRQYW5lbC5oYXNFcnJvcnMoKSkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhbmVsIGluIHRoZSBQYW5lbER5bmFtaWNcbiAgICpcbiAgICovXG4gIHB1YmxpYyBnb1RvUHJldlBhbmVsKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4LS07XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBkeW5hbWljIHBhbmVsIGZyb20gdGhlIHBhbmVscyBhcnJheS5cbiAgICogQHBhcmFtIHZhbHVlIGEgcGFuZWwgb3IgcGFuZWwgaW5kZXhcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhbmVsKHZhbHVlOiBhbnkpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldFBhbmVsSW5kZXgodmFsdWUpO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5wYW5lbENvdW50KSByZXR1cm47XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbaW5kZXhdO1xuICAgIHRoaXMucGFuZWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxSZW1vdmVkKHRoaXMsIGluZGV4LCBwYW5lbCk7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWwpKSByZXR1cm4gdmFsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFuZWxzW2ldID09PSB2YWwgfHwgaXRlbXNbaV0gPT09IHZhbCkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBzdXBlci5jbGVhckVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaW5kZXg6IG51bWJlcikge1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICBwYW5lbC5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciB2YWx1ZXMgPSAhIXZhbCAmJiBpbmRleCA8IHZhbC5sZW5ndGggPyB2YWxbaW5kZXhdIDogbnVsbDtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFwYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShrZXkpICYmXG4gICAgICAgICF0aGlzLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KGtleSwgaW5kZXgpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHZhbHVlc1trZXldO1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB2YWxbaW5kZXhdID0gdmFsdWVzO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYW5lbEluZGV4OiBudW1iZXJcbiAgKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy52YWx1ZU5hbWVcbiAgICAgID8gPFF1ZXN0aW9uPihcbiAgICAgICAgICB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lRnJvbUFycmF5KFxuICAgICAgICAgICAgdGhpcy52YWx1ZU5hbWUsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcGFuZWxJbmRleFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dFxuICAgICAgPyB0aGlzLnRlbXBsYXRlLnF1ZXN0aW9ucy5pbmRleE9mKGNvbnRleHQpID4gLTFcbiAgICAgIDogZmFsc2U7XG4gICAgdmFyIHByZWZpeE5hbWUgPSB0aGlzLmdldFZhbHVlTmFtZSgpICsgXCJbMF0uXCI7XG4gICAgdmFyIHByZWZpeFRleHQgPSB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCJbMF0uXCI7XG4gICAgdmFyIHBhbmVsT2JqcyA9IG5ldyBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PigpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnRlbXBsYXRlLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQocGFuZWxPYmpzLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbE9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBwYW5lbE9ianNbaV0ubmFtZSxcbiAgICAgICAgdGV4dDogcHJlZml4VGV4dCArIHBhbmVsT2Jqc1tpXS50ZXh0LFxuICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsT2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFuZWxPYmpzW2ldLnF1ZXN0aW9uID09IGNvbnRleHQpIGNvbnRpbnVlO1xuICAgICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwicGFuZWwuXCIgKyBwYW5lbE9ianNbaV0ubmFtZSxcbiAgICAgICAgICB0ZXh0OiBcInBhbmVsLlwiICsgcGFuZWxPYmpzW2ldLnRleHQsXG4gICAgICAgICAgcXVlc3Rpb246IHBhbmVsT2Jqc1tpXS5xdWVzdGlvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yLCBwYXRoKTtcbiAgICB2YXIgcXVlc3Rpb25OYW1lID0gcGF0aDtcbiAgICB2YXIgcG9zID0gcGF0aC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgIHF1ZXN0aW9uTmFtZSA9IHBhdGguc3Vic3RyKDAsIHBvcyk7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHIocG9zICsgMSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMudGVtcGxhdGUuZ2V0UXVlc3Rpb25CeU5hbWUocXVlc3Rpb25OYW1lKTtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcXVlc3Rpb24uZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvciwgcGF0aCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCkge1xuICAgIHZhciByZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0ucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICB9XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMudGVtcGxhdGUucmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHk7XG4gICAgdGhpcy50ZW1wbGF0ZS5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAodGhpcy5sb2FkaW5nUGFuZWxDb3VudCA+IDApIHtcbiAgICAgIHRoaXMucGFuZWxDb3VudCA9IHRoaXMubG9hZGluZ1BhbmVsQ291bnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0UGFuZWxzU3VydmV5SW1wbCgpO1xuICAgIHRoaXMuc2V0UGFuZWxzU3RhdGUoKTtcbiAgICB0aGlzLmFzc2lnbk9uUHJvcGVydHlDaGFuZ2VkVG9UZW1wbGF0ZSgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIHB1YmxpYyBvbkZpcnN0UmVuZGVyaW5nKCkge1xuICAgIHRoaXMudGVtcGxhdGUub25GaXJzdFJlbmRlcmluZygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgc3VwZXIub25GaXJzdFJlbmRlcmluZygpO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blBhbmVsc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcmVSdW5Db25kaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blBhbmVsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIHZhciBjYWNoZWRWYWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICBjYWNoZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlcykpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFuZWxWYWx1ZXMgPSB0aGlzLmdldFBhbmVsSXRlbURhdGEodGhpcy5wYW5lbHNbaV0uZGF0YSk7XG4gICAgICAvL1Nob3VsZCBiZSB1bmlxdWUgZm9yIGV2ZXJ5IHBhbmVsIGR1ZSBhc3luYyBleHByZXNzaW9uIHN1cHBvcnRcbiAgICAgIHZhciBuZXdWYWx1ZXMgPSBIZWxwZXJzLmNyZWF0ZUNvcHkoY2FjaGVkVmFsdWVzKTtcbiAgICAgIG5ld1ZhbHVlc1tcbiAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgXSA9IHBhbmVsVmFsdWVzO1xuICAgICAgbmV3VmFsdWVzW1F1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JbmRleFZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5ydW5Db25kaXRpb24obmV3VmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChcbiAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkl0ZW1WYXJpYWJsZU5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaGFzS2V5c0R1cGxpY2F0ZWQoZmlyZUNhbGxiYWNrOiBib29sZWFuLCByZWM6IGFueSA9IG51bGwpIHtcbiAgICB2YXIga2V5VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgdmFyIHJlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPVxuICAgICAgICB0aGlzLmlzVmFsdWVEdXBsaWNhdGVkKHRoaXMucGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYywgZmlyZUNhbGxiYWNrKSB8fFxuICAgICAgICByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVQYW5lbHNDb250YWluc0Vycm9ycygpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbjtcbiAgICB2YXIgcGFyZW50ID0gPFBhbmVsPnF1ZXN0aW9uLnBhcmVudDtcbiAgICB3aGlsZSAoISFwYXJlbnQpIHtcbiAgICAgIHBhcmVudC51cGRhdGVDb250YWluc0Vycm9ycygpO1xuICAgICAgcGFyZW50ID0gPFBhbmVsPnBhcmVudC5wYXJlbnQ7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgICAgcmVzID0gdGhpcy5oYXNLZXlzRHVwbGljYXRlZChmaXJlQ2FsbGJhY2ssIHJlYykgfHwgcmVzO1xuICAgICAgdGhpcy51cGRhdGVQYW5lbHNDb250YWluc0Vycm9ycygpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVycm9zSW5QYW5lbHMgPSB0aGlzLmhhc0Vycm9ySW5QYW5lbHMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgICAgcmV0dXJuIHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spIHx8IGVycm9zSW5QYW5lbHM7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb250YWluc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0Q29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBhbmVsc1tpXS5jb250YWluc0Vycm9ycykgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLmdldElzQW5zd2VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZpc2libGVRdWVzdGlvbnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICAgIHBhbmVsc1tpXS5hZGRRdWVzdGlvbnNUb0xpc3QodmlzaWJsZVF1ZXN0aW9ucywgdHJ1ZSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZpc2libGVRdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCF2aXNpYmxlUXVlc3Rpb25zW2pdLmlzQW5zd2VyZWQpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcXVlc3Rpb25zW2pdLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICBpZiAoc3VwZXIuZ2V0SXNSdW5uaW5nVmFsaWRhdG9ycygpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uc1tqXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFuZWxzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlcnJvcnMgPSBxdWVzdGlvbnNbal0uZ2V0QWxsRXJyb3JzKCk7XG4gICAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAoIXZhbHVlcyB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFBhbmVsRGlzcGxheVZhbHVlKGksIHZhbCwga2V5c0FzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRGlzcGxheVZhbHVlKFxuICAgIHBhbmVsSW5kZXg6IG51bWJlcixcbiAgICB2YWw6IGFueSxcbiAgICBrZXlzQXNUZXh0OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxJbmRleF07XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcGFuZWwuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShrZXkpO1xuICAgICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbiA9IHRoaXMuZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkoa2V5LCBwYW5lbEluZGV4KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICAgIHZhbFtrZXldID0gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICB2YXIga2V5VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0T25Db21wbGV0ZUFzeW5jSW5QYW5lbChwYW5lbHNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBubEVycm9yID0gcGFuZWxzW2ldLmhhc0Vycm9ycyhcbiAgICAgICAgZmlyZUNhbGxiYWNrLFxuICAgICAgICAhIXJlYyAmJiByZWMuZm9jdXNlT25GaXJzdEVycm9yLFxuICAgICAgICByZWNcbiAgICAgICk7XG4gICAgICBwbmxFcnJvciA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQocGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYykgfHwgcG5sRXJyb3I7XG4gICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiBwbmxFcnJvciAmJiAhcmVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIHJlcyA9IHBubEVycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHNldE9uQ29tcGxldGVBc3luY0luUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT4sXG4gICAgcmVjOiBhbnksXG4gICAgZmlyZUNhbGxiYWNrPzogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMua2V5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj5wYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uICYmXG4gICAgICBxdWVzdGlvbiAhPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvblxuICAgICkge1xuICAgICAgcXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IoXG4gICAgICAgICAgbmV3IEtleUR1cGxpY2F0aW9uRXJyb3IodGhpcy5rZXlEdXBsaWNhdGlvbkVycm9yLCB0aGlzKVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZWMgJiYgIXJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHZhciBqc29uID0gdGhpcy50ZW1wbGF0ZS50b0pTT04oKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICBwYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHBhbmVsKTtcbiAgICBwYW5lbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVBbmRTZXR1cE5ld1BhbmVsT2JqZWN0KCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlTmV3UGFuZWxPYmplY3QoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcGFuZWwub25HZXRRdWVzdGlvblRpdGxlTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZW1wbGF0ZVF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIH07XG4gICAgcmV0dXJuIHBhbmVsO1xuICB9XG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVRdWVzdGlvblRpdGxlTG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiXG4gICAgICA/IHRoaXMudGVtcGxhdGVUaXRsZUxvY2F0aW9uXG4gICAgICA6IHRoaXMuZ2V0VGl0bGVMb2NhdGlvbkNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWxPYmplY3QoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbENvdW50QmFzZWRPblZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkpIHJldHVybjtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgbmV3UGFuZWxDb3VudCA9IHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubGVuZ3RoIDogMDtcbiAgICBpZiAobmV3UGFuZWxDb3VudCA9PSAwICYmIHRoaXMubG9hZGluZ1BhbmVsQ291bnQgPiAwKSB7XG4gICAgICBuZXdQYW5lbENvdW50ID0gdGhpcy5sb2FkaW5nUGFuZWxDb3VudDtcbiAgICB9XG4gICAgdGhpcy5wYW5lbENvdW50ID0gbmV3UGFuZWxDb3VudDtcbiAgfVxuICBwdWJsaWMgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgZmFsc2UpO1xuICAgIHRoaXMuc2V0UGFuZWxDb3VudEJhc2VkT25WYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxVcGRhdGVWYWx1ZUZyb21TdXJ2ZXkodGhpcy5wYW5lbHNbaV0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUlzQW5zd2VyZWQoKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsU3VydmV5VmFsdWVDaGFuZ2VkKHRoaXMucGFuZWxzW2ldKTtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHBhbmVsVXBkYXRlVmFsdWVGcm9tU3VydmV5KHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRQYW5lbEl0ZW1EYXRhKHBhbmVsLmRhdGEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHEudXBkYXRlVmFsdWVGcm9tU3VydmV5KHZhbHVlc1txLmdldFZhbHVlTmFtZSgpXSk7XG4gICAgICBxLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KFxuICAgICAgICB2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXhdXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHBhbmVsU3VydmV5VmFsdWVDaGFuZ2VkKHBhbmVsOiBQYW5lbE1vZGVsKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRQYW5lbEl0ZW1EYXRhKHBhbmVsLmRhdGEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHEub25TdXJ2ZXlWYWx1ZUNoYW5nZWQodmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RGF0YSgpIHtcbiAgICBzdXBlci5vblNldERhdGEoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMuc2V0VGVtcGxhdGVQYW5lbFN1cnZleUltcGwoKTtcbiAgICAgIHRoaXMucmVidWlsZFBhbmVscygpO1xuICAgIH1cbiAgfVxuICAvL0lRdWVzdGlvblBhbmVsRHluYW1pY0RhdGFcbiAgZ2V0SXRlbUluZGV4KGl0ZW06IElTdXJ2ZXlEYXRhKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xuICB9XG4gIGdldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEpOiBhbnkge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgdmFyIGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICB2YXIgcVZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoaW5kZXggPCAwICYmIEFycmF5LmlzQXJyYXkocVZhbHVlKSAmJiBxVmFsdWUubGVuZ3RoID4gaXRlbXMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IGl0ZW1zLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHt9O1xuICAgIGlmICghcVZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHFWYWx1ZSkgfHwgcVZhbHVlLmxlbmd0aCA8PSBpbmRleCkgcmV0dXJuIHt9O1xuICAgIHJldHVybiBxVmFsdWVbaW5kZXhdO1xuICB9XG4gIHNldFBhbmVsSXRlbURhdGEoaXRlbTogSVN1cnZleURhdGEsIG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIHFWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgaWYgKCFxVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocVZhbHVlKSkge1xuICAgICAgcVZhbHVlID0gW107XG4gICAgfVxuICAgIGlmIChxVmFsdWUubGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gcVZhbHVlLmxlbmd0aDsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICAgIHFWYWx1ZS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxVmFsdWVbaW5kZXhdKSBxVmFsdWVbaW5kZXhdID0ge307XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICBxVmFsdWVbaW5kZXhdW25hbWVdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcVZhbHVlW2luZGV4XVtuYW1lXTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uID0gdGhpcy5wYW5lbHNbaW5kZXhdLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUoXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBxVmFsdWU7XG4gICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICBwYW5lbDogKDxRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0+aXRlbSkucGFuZWwsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGl0ZW1JbmRleDogaW5kZXgsXG4gICAgICAgIGl0ZW1WYWx1ZTogcVZhbHVlW2luZGV4XSxcbiAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBnZXRTdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5O1xuICB9XG4gIGdldFJvb3REYXRhKCk6IElTdXJ2ZXlEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbjtcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHRoaXMucGFuZWxzLm1hcChcbiAgICAgICAgKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgdmFyIHBhbmVsRGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICAgIG5hbWU6IHBhbmVsLm5hbWUgfHwgaW5kZXgsXG4gICAgICAgICAgICB0aXRsZTogcGFuZWwudGl0bGUgfHwgXCJQYW5lbFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhbmVsLmdldFZhbHVlKCksXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHBhbmVsLmdldFZhbHVlKCksXG4gICAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgICBpc05vZGU6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiBwYW5lbC5xdWVzdGlvbnNcbiAgICAgICAgICAgICAgLm1hcCgocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5nZXRQbGFpbkRhdGEob3B0aW9ucykpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gISFkKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIHBhbmVsRGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9ICg8YW55PnBhbmVsKVtcbiAgICAgICAgICAgICAgY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBwYW5lbERhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MoKSB7XG4gICAgc3VwZXIudXBkYXRlRWxlbWVudENzcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgZWwudXBkYXRlRWxlbWVudENzcygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xuICAgIHZhciByYW5nZU1heCA9IHRoaXMucGFuZWxDb3VudDtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwicGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0XCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5jdXJyZW50SW5kZXggKyAxLCByYW5nZU1heCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbGR5bmFtaWNcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwidGVtcGxhdGVFbGVtZW50c1wiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RlbXBsYXRlVGl0bGVcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGVtcGxhdGVEZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGVtcGxhdGVEZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFsbG93QWRkUGFuZWw6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUGFuZWw6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYW5lbENvdW50Om51bWJlclwiLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwibWluUGFuZWxDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFBhbmVsQ291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiBzZXR0aW5ncy5wYW5lbE1heGltdW1QYW5lbENvdW50LFxuICAgIH0sXG4gICAgXCJkZWZhdWx0UGFuZWxWYWx1ZTpwYW5lbHZhbHVlXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInBhbmVsc1N0YXRlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJjb2xsYXBzZWRcIiwgXCJleHBhbmRlZFwiLCBcImZpcnN0RXhwYW5kZWRcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwia2V5TmFtZVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jS2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbmZpcm1EZWxldGU6Ym9vbGVhblwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb25maXJtRGVsZXRlVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxBZGRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbEFkZFRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYW5lbFJlbW92ZVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsUmVtb3ZlVGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhbmVsUHJldlRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYW5lbE5leHRUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbE5leHRUZXh0XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICAgIGRlZmF1bHQ6IFwib2ZmXCIsXG4gICAgICBjaG9pY2VzOiBbXCJvZmZcIiwgXCJvblBhbmVsXCIsIFwib25TdXJ2ZXlcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwic2hvd1JhbmdlSW5Qcm9ncmVzczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJlbmRlck1vZGVcIixcbiAgICAgIGRlZmF1bHQ6IFwibGlzdFwiLFxuICAgICAgY2hvaWNlczogW1wibGlzdFwiLCBcInByb2dyZXNzVG9wXCIsIFwicHJvZ3Jlc3NCb3R0b21cIiwgXCJwcm9ncmVzc1RvcEJvdHRvbVwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicGFuZWxkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHJldHVybiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbChuYW1lKTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3BhbmVsZHluYW1pYy50cyIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSByYWRpb2dyb3VwIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmFkaW9ncm91cFwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB0aGlzLnZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2hvdyBcImNsZWFyIGJ1dHRvblwiIGZsYWcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NsZWFyQnV0dG9uXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dDbGVhckJ1dHRvbih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhblNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Q2xlYXJCdXR0b24gJiYgIXRoaXMuaXNSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsZWFyQnV0dG9uQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJhZGlvZ3JvdXBcIixcbiAgW3sgbmFtZTogXCJzaG93Q2xlYXJCdXR0b246Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIG5hbWUgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChuYW1lKTtcbiAgcS5jaG9pY2VzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDaG9pY2VzO1xuICByZXR1cm4gcTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uX3JhZGlvZ3JvdXAudHMiLCJpbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHJhdGluZyBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcInJhdGVzXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicmF0ZXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5maXJlQ2FsbGJhY2soc2VsZi5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChmdW5jdGlvbiAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLm5hbWUgPT0gXCJyYXRlTWluXCIgfHxcbiAgICAgICAgb3B0aW9ucy5uYW1lID09IFwicmF0ZU1heFwiIHx8XG4gICAgICAgIG9wdGlvbnMubmFtZSA9PSBcInJhdGVTdGVwXCJcbiAgICAgICkge1xuICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdmFyIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQgPyB0ZXh0ICsgXCIgXCIgOiB0ZXh0O1xuICAgIH07XG4gICAgbG9jTWF4UmF0ZURlc2NyaXB0aW9uVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQgPyBcIiBcIiArIHRleHQgOiB0ZXh0O1xuICAgIH07XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiByYXRlIGl0ZW1zLiBFdmVyeSBpdGVtIGhhcyB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdGhlIHZhbHVlIGlzIHJlbmRlcmVkLiBUaGUgaXRlbSB0ZXh0IHN1cHBvcnRzIG1hcmtkb3duLiBJZiBpdCBpcyBlbXB0eSB0aGUgYXJyYXkgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIHJhdGVNaW4sIHJhdGVNYXggYW5kIHJhdGVTdGVwIHByb3BlcnRpZXMuXG4gICAqIEBzZWUgcmF0ZU1pblxuICAgKiBAc2VlIHJhdGVNYXhcbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlVmFsdWVzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVWYWx1ZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgcmF0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLlxuICAgKiBAc2VlIHJhdGVWYWx1ZXNcbiAgICogQHNlZSByYXRlTWF4XG4gICAqIEBzZWUgcmF0ZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZU1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlTWluXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZU1pbih2YWw6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB2YWwgPiB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVTdGVwKVxuICAgICAgdmFsID0gdGhpcy5yYXRlTWF4IC0gdGhpcy5yYXRlU3RlcDtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlTWluXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBnZW5lcmF0ZSByYXRlIHZhbHVlcyBpZiByYXRlVmFsdWVzIGFycmF5IGlzIGVtcHR5LiBJdCBpcyB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgcmF0aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LlxuICAgKiBAc2VlIHJhdGVWYWx1ZXNcbiAgICogQHNlZSByYXRlTWluXG4gICAqIEBzZWUgcmF0ZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZU1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlTWF4XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZU1heCh2YWw6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB2YWwgPCB0aGlzLnJhdGVNaW4gKyB0aGlzLnJhdGVTdGVwKVxuICAgICAgdmFsID0gdGhpcy5yYXRlTWluICsgdGhpcy5yYXRlU3RlcDtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlTWF4XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBnZW5lcmF0ZSByYXRlIHZhbHVlcyBpZiByYXRlVmFsdWVzIGFycmF5IGlzIGVtcHR5LiBJdCBpcyB0aGUgc3RlcCB2YWx1ZS4gVGhlIG51bWJlciBvZiByYXRlIHZhbHVlcyBhcmUgKHJhdGVNYXggLSByYXRlTWluKSAvIHJhdGVTdGVwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLlxuICAgKiBAc2VlIHJhdGVWYWx1ZXNcbiAgICogQHNlZSByYXRlTWluXG4gICAqIEBzZWUgcmF0ZU1heFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYXRlU3RlcFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVTdGVwKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8PSAwKSB2YWwgPSAxO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB2YWwgPiB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVNaW4pXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVNaW47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVN0ZXBcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgcmVzID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKHRoaXMudmlzaWJsZVJhdGVWYWx1ZXMsIHZhbHVlKTtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiB2YWx1ZTtcbiAgfVxuICBnZXQgdmlzaWJsZVJhdGVWYWx1ZXMoKTogSXRlbVZhbHVlW10ge1xuICAgIGlmICh0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMucmF0ZVZhbHVlcztcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHZhbHVlID0gdGhpcy5yYXRlTWluO1xuICAgIHZhciBzdGVwID0gdGhpcy5yYXRlU3RlcDtcbiAgICB3aGlsZSAoXG4gICAgICB2YWx1ZSA8PSB0aGlzLnJhdGVNYXggJiZcbiAgICAgIHJlcy5sZW5ndGggPCBzZXR0aW5ncy5yYXRpbmdNYXhpbXVtUmF0ZVZhbHVlQ291bnRcbiAgICApIHtcbiAgICAgIHJlcy5wdXNoKG5ldyBJdGVtVmFsdWUodmFsdWUpKTtcbiAgICAgIHZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWUodmFsdWUgKyBzdGVwLCBzdGVwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGNvcnJlY3RWYWx1ZSh2YWx1ZTogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoTWF0aC5yb3VuZCh2YWx1ZSkgPT0gdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB2YXIgZnIgPSAwO1xuICAgIHdoaWxlIChNYXRoLnJvdW5kKHN0ZXApICE9IHN0ZXApIHtcbiAgICAgIHN0ZXAgKj0gMTA7XG4gICAgICBmcisrO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKGZyKSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyYXRpbmdcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIG1pbmltdW0gKGZpcnN0KSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5SYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtaW5SYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5SYXRlRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pblJhdGVEZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5SYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluUmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgbWF4aW11bSAobGFzdCkgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1heFJhdGVEZXNjcmlwdGlvblwiKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyYXRpbmdcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyYXRlVmFsdWVzOml0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwicmF0ZU1pbjpudW1iZXJcIiwgZGVmYXVsdDogMSB9LFxuICAgIHsgbmFtZTogXCJyYXRlTWF4Om51bWJlclwiLCBkZWZhdWx0OiA1IH0sXG4gICAgeyBuYW1lOiBcInJhdGVTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMC4xIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJtaW5pbnVtUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1heGltdW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNYXhSYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ01vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nTW9kZWwobmFtZSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IFNpZ25hdHVyZVBhZCBmcm9tIFwic2lnbmF0dXJlX3BhZFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5cbnZhciBkZWZhdWx0V2lkdGggPSAzMDA7XG52YXIgZGVmYXVsdEhlaWdodCA9IDIwMDtcblxuZnVuY3Rpb24gcmVzaXplQ2FudmFzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgdmFyIGNvbnRleHQ6IGFueSA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgdmFyIGJhY2tpbmdTdG9yZVJhdGlvID1cbiAgICBjb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAxO1xuXG4gIHZhciByYXRpbyA9IGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbztcblxuICB2YXIgb2xkV2lkdGggPSBjYW52YXMud2lkdGg7XG4gIHZhciBvbGRIZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gIGNhbnZhcy53aWR0aCA9IG9sZFdpZHRoICogcmF0aW87XG4gIGNhbnZhcy5oZWlnaHQgPSBvbGRIZWlnaHQgKiByYXRpbztcblxuICBjYW52YXMuc3R5bGUud2lkdGggPSBvbGRXaWR0aCArIFwicHhcIjtcbiAgY2FudmFzLnN0eWxlLmhlaWdodCA9IG9sZEhlaWdodCArIFwicHhcIjtcblxuICBjb250ZXh0LnNjYWxlKHJhdGlvLCByYXRpbyk7XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3Igc2lnbmF0dXJlIHBhZCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByb3RlY3RlZCBnZXRDc3NSb290KGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGNsYXNzZXMgPSBzdXBlci5nZXRDc3NSb290KGNzc0NsYXNzZXMpO1xuICAgIGlmIChcIlwiICsgdGhpcy53aWR0aCA9PT0gXCIzMDBcIikge1xuICAgICAgY2xhc3NlcyArPSBcIiBcIiArIGNzc0NsYXNzZXMuc21hbGw7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2lnbmF0dXJlcGFkXCI7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBhbnkpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5pbml0U2lnbmF0dXJlUGFkKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVEZXN0b3lRdWVzdGlvbkVsZW1lbnQoZWw6IGFueSkge1xuICAgIGlmICghIWVsKSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTaWduYXR1cmVQYWQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRTaWduYXR1cmVQYWQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgdmFyIGNhbnZhczogYW55ID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF07XG4gICAgdmFyIGJ1dHRvbkVsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIilbMF07XG4gICAgdmFyIHNpZ25hdHVyZVBhZCA9IG5ldyBTaWduYXR1cmVQYWQoY2FudmFzKTtcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICBzaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgfVxuXG4gICAgYnV0dG9uRWwub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dDbGVhciB8fCB0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgICAgICBidXR0b25FbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYXR1cmVQYWQub24oKTtcbiAgICAgICAgYnV0dG9uRWwuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2lnbmF0dXJlUGFkLnBlbkNvbG9yID0gdGhpcy5wZW5Db2xvcjtcbiAgICBzaWduYXR1cmVQYWQub25CZWdpbiA9ICgpID0+IHtcbiAgICAgIGNhbnZhcy5mb2N1cygpO1xuICAgIH07XG4gICAgc2lnbmF0dXJlUGFkLm9uRW5kID0gKCkgPT4ge1xuICAgICAgdmFyIGRhdGEgPSBzaWduYXR1cmVQYWQudG9EYXRhVVJMKCk7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgICB9O1xuICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMudmFsdWU7XG4gICAgICBjYW52YXMud2lkdGggPSB0aGlzLndpZHRoIHx8IGRlZmF1bHRXaWR0aDtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLmhlaWdodCB8fCBkZWZhdWx0SGVpZ2h0O1xuICAgICAgcmVzaXplQ2FudmFzKGNhbnZhcyk7XG4gICAgICBzaWduYXR1cmVQYWQuZnJvbURhdGFVUkwoXG4gICAgICAgIGRhdGEgfHwgXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFQXCJcbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNpZ25hdHVyZVBhZCA9IHNpZ25hdHVyZVBhZDtcbiAgICB2YXIgcHJvcGVydHlDaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5uYW1lID09PSBcIndpZHRoXCIgfHwgb3B0aW9ucy5uYW1lID09PSBcImhlaWdodFwiKSB7XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5hZGQocHJvcGVydHlDaGFuZ2VkSGFuZGxlcik7XG4gICAgdGhpcy5zaWduYXR1cmVQYWQucHJvcGVydHlDaGFuZ2VkSGFuZGxlciA9IHByb3BlcnR5Q2hhbmdlZEhhbmRsZXI7XG4gIH1cbiAgZGVzdHJveVNpZ25hdHVyZVBhZChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQpIHtcbiAgICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMuc2lnbmF0dXJlUGFkLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5zaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgfVxuICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHRoZSBzcGVjaWZpYyB3aWR0aCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIDMwMCk7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGhlaWdodCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgMjAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhlaWdodFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gY2xlYXIgY29udGVudCBvZiB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dDbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Q2xlYXIodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDbGVhclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gc2V0IHBlbiBjb2xvciBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBlbkNvbG9yXCIsIFwiIzFhYjM5NFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBlbkNvbG9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGVuQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNsZWFyIHNpZ25hdHVyZSBidXR0b24gY2FwdGlvbi5cbiAgICovXG4gIGdldCBjbGVhckJ1dHRvbkNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImNsZWFyQ2FwdGlvblwiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNpZ25hdHVyZXBhZFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJhbGxvd0NsZWFyOmJvb2xlYW5cIixcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIndpZHRoOm51bWJlclwiLFxuICAgICAgZGVmYXVsdDogMzAwLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWlnaHQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiAyMDAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInBlbkNvbG9yXCIsXG4gICAgICBkZWZhdWx0OiBcIiMxYWIzOTRcIixcbiAgICB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInNpZ25hdHVyZXBhZFwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwobmFtZSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbl9zaWduYXR1cmVwYWQudHMiLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IE9wZXJhbmRNYWtlciB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCB0cmlnZ2Vycy5cbiAqIEEgdHJpZ2dlciBjYWxscyBhIG1ldGhvZCB3aGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZSB0aGUgcmVzdWx0OiBmcm9tIGZhbHNlIHRvIHRydWUgb3IgZnJvbSB0cnVlIHRvIGZhbHNlLlxuICogUGxlYXNlIG5vdGUsIGl0IHJ1bnMgb25seSBvbmUgY2hhbmdpbmcgdGhlIGV4cHJlc3Npb24gcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xuICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xuICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcbiAgICBpZiAoVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSAhPSBudWxsKSByZXR1cm4gVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZTtcbiAgICBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlID0ge1xuICAgICAgZW1wdHk6IGZ1bmN0aW9uICh2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlbXB0eTogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gISF2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBlcXVhbDogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlcXVhbDogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBjb250YWluczogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWVbXCJpbmRleE9mXCJdICYmIHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPiAtMTtcbiAgICAgIH0sXG4gICAgICBub3Rjb250YWluczogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF2YWx1ZSB8fCAhdmFsdWVbXCJpbmRleE9mXCJdIHx8IHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPT0gLTFcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyOiBmdW5jdGlvbiAodmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgICAgbGVzczogZnVuY3Rpb24gKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdyZWF0ZXJvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbiAodmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgdXNlZE5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICBwcml2YXRlIGhhc0Z1bmN0aW9uOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcIm9wZXJhdG9yXCIsIFwidmFsdWVcIiwgXCJuYW1lXCJdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9sZFByb3BlcnRpZXNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLm9uRXhwcmVzc2lvbkNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRyaWdnZXJiYXNlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ0cmlnZ2VyXCIsIFwiXCIpO1xuICAgIHZhciBleHAgPSAhIXRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbiA6IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIGV4cDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIFwiZXF1YWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIVRyaWdnZXIub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgY2hlY2tFeHByZXNzaW9uKFxuICAgIGtleXM6IGFueSxcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja1JlcXVpcmVkKGtleXMpKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMucGVyZm9ybSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2hlY2sodmFsdWU6IGFueSkge1xuICAgIHZhciB0cmlnZ2VyUmVzdWx0ID0gVHJpZ2dlci5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odmFsdWUsIHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyUmVzdWx0KSB7XG4gICAgICB0aGlzLm9uU3VjY2Vzcyh7fSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGVyZm9ybSh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJSZXN1bHQocmVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVzdWx0KFxuICAgIHJlczogYm9vbGVhbixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMub25TdWNjZXNzKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHt9XG4gIHByb3RlY3RlZCBvbkZhaWx1cmUoKSB7fVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgb2xkUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5vbkV4cHJlc3Npb25DaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkV4cHJlc3Npb25DaGFuZ2VkKCkge1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdGhpcy5oYXNGdW5jdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgYnVpbGRFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHJldHVybiBcIlwiO1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKSAmJiB0aGlzLmlzUmVxdWlyZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgXCJ7XCIgK1xuICAgICAgdGhpcy5uYW1lICtcbiAgICAgIFwifSBcIiArXG4gICAgICB0aGlzLm9wZXJhdG9yICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci50b09wZXJhbmRTdHJpbmcodGhpcy52YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgaXNDaGVja1JlcXVpcmVkKGtleXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgha2V5cykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVpbGRVc2VkTmFtZXMoKTtcbiAgICBpZiAodGhpcy5oYXNGdW5jdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVzZWROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGtleXMuaGFzT3duUHJvcGVydHkodGhpcy51c2VkTmFtZXNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYnVpbGRVc2VkTmFtZXMoKSB7XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHJldHVybjtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMuZXhwcmVzc2lvbjtcbiAgICBpZiAoIWV4cHJlc3Npb24pIHtcbiAgICAgIGV4cHJlc3Npb24gPSB0aGlzLmJ1aWxkRXhwcmVzc2lvbigpO1xuICAgIH1cbiAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybjtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5oYXNGdW5jdGlvbiA9IHRoaXMuY29uZGl0aW9uUnVubmVyLmhhc0Z1bmN0aW9uKCk7XG4gICAgdGhpcy51c2VkTmFtZXMgPSB0aGlzLmNvbmRpdGlvblJ1bm5lci5nZXRWYXJpYWJsZXMoKTtcbiAgICB2YXIgcHJvY2Vzc1ZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51c2VkTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudXNlZE5hbWVzW2ldID0gcHJvY2Vzc1ZhbHVlLmdldEZpcnN0TmFtZSh0aGlzLnVzZWROYW1lc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IGlzUmVxdWlyZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yICE9PSBcImVtcHR5XCIgJiYgdGhpcy5vcGVyYXRvciAhPSBcIm5vdGVtcHR5XCI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcbiAgc2V0Q29tcGxldGVkKCk6IGFueTtcbiAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbik6IGFueTtcbiAgY29weVRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIGZyb21OYW1lOiBzdHJpbmcpOiBhbnk7XG4gIGZvY3VzUXVlc3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJdCBleHRlbmRzIHRoZSBUcmlnZ2VyIGJhc2UgY2xhc3MgYW5kIGFkZCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBTdXJ2ZXlKUyBjbGFzc2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xuICBwcm90ZWN0ZWQgb3duZXJWYWx1ZTogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5vd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRPd25lcihvd25lcjogSVN1cnZleVRyaWdnZXJPd25lcikge1xuICAgIHRoaXMub3duZXJWYWx1ZSA9IG93bmVyO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNPbk5leHRQYWdlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgaXQgbWFrZXMgcXVlc3Rpb25zL3BhZ2VzIHZpc2libGUuXG4gKiBPaHRlcndpc2UgaXQgbWFrZXMgdGhlbSBpbnZpc2libGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBwdWJsaWMgcGFnZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2aXNpYmxldHJpZ2dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbVN1Y2Nlc3MpO1xuICB9XG4gIHByb3RlY3RlZCBvbkZhaWx1cmUoKSB7XG4gICAgdGhpcy5vblRyaWdnZXIodGhpcy5vbkl0ZW1GYWlsdXJlKTtcbiAgfVxuICBwcml2YXRlIG9uVHJpZ2dlcihmdW5jOiBGdW5jdGlvbikge1xuICAgIGlmICghdGhpcy5vd25lcikgcmV0dXJuO1xuICAgIHZhciBvYmplY3RzID0gdGhpcy5vd25lci5nZXRPYmplY3RzKHRoaXMucGFnZXMsIHRoaXMucXVlc3Rpb25zKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZ1bmMob2JqZWN0c1tpXSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkl0ZW1TdWNjZXNzKGl0ZW06IGFueSkge1xuICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uSXRlbUZhaWx1cmUoaXRlbTogYW55KSB7XG4gICAgaXRlbS52aXNpYmxlID0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIGl0IGNvbXBsZXRlcyB0aGUgc3VydmV5LlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlckNvbXBsZXRlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21wbGV0ZXRyaWdnZXJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzT25OZXh0UGFnZSgpIHtcbiAgICByZXR1cm4gIXNldHRpbmdzLmV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDtcbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKHRoaXMub3duZXIpIHRoaXMub3duZXIuc2V0Q29tcGxldGVkKCk7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSB2YWx1ZSBmcm9tIHByb3BlcnR5ICoqc2V0VmFsdWUqKiB3aWxsIGJlIHNldCB0byAqKnNldFRvTmFtZSoqXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNldHZhbHVldHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhcmlhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhcmlhYmxlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzVmFyaWFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWYXJpYWJsZVwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuc2V0VG9OYW1lIHx8ICF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdGhpcy5vd25lci5zZXRUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuc2V0VmFsdWUsIHRoaXMuaXNWYXJpYWJsZSk7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSBzdXJ2ZXkgZ28gdG8gcXVlc3Rpb24gKipnb3RvTmFtZSoqIGFuZCBmb2N1cyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJTa2lwIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJza2lwdHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgZ290b05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZ290b05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBnb3RvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImdvdG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5nb3RvTmFtZSB8fCAhdGhpcy5vd25lcikgcmV0dXJuO1xuICAgIHRoaXMub3duZXIuZm9jdXNRdWVzdGlvbih0aGlzLmdvdG9OYW1lKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlICoqcnVuRXhwcmVzc2lvbioqIHdpbGwgYmUgcnVuLiBJZiAqKnNldFRvTmFtZSoqIHByb3BlcnR5IGlzIG5vdCBlbXB0eSB0aGVuIHRoZSByZXN1bHQgb2YgKipydW5FeHByZXNzaW9uKiogd2lsbCBiZSBzZXQgdG8gaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyUnVuRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicnVuZXhwcmVzc2lvbnRyaWdnZXJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFRvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRUb05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJ1bkV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicnVuRXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJ1bkV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJydW5FeHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICghdGhpcy5vd25lciB8fCAhdGhpcy5ydW5FeHByZXNzaW9uKSByZXR1cm47XG4gICAgdmFyIGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLnJ1bkV4cHJlc3Npb24pO1xuICAgIGlmIChleHByZXNzaW9uLmNhblJ1bikge1xuICAgICAgZXhwcmVzc2lvbi5vblJ1bkNvbXBsZXRlID0gKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9uQ29tcGxldGVSdW5FeHByZXNzaW9uKHJlcyk7XG4gICAgICB9O1xuICAgICAgZXhwcmVzc2lvbi5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvbkNvbXBsZXRlUnVuRXhwcmVzc2lvbihuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNldFRvTmFtZSB8fCBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGZyb20gcXVlc3Rpb24gKipmcm9tTmFtZSoqIHdpbGwgYmUgc2V0IGludG8gKipzZXRUb05hbWUqKi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJDb3B5VmFsdWUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFRvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRUb05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZyb21OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZyb21OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZnJvbU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmcm9tTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29weXZhbHVldHJpZ2dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuc2V0VG9OYW1lIHx8ICF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdGhpcy5vd25lci5jb3B5VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCB0aGlzLmZyb21OYW1lKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFwidHJpZ2dlclwiLCBbXG4gIHsgbmFtZTogXCJvcGVyYXRvclwiLCBkZWZhdWx0OiBcImVxdWFsXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJ2YWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBcImV4cHJlc3Npb246Y29uZGl0aW9uXCIsXG5dKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic3VydmV5dHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIm5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfV0sXG4gIG51bGwsXG4gIFwidHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ2aXNpYmxldHJpZ2dlclwiLFxuICBbXCJwYWdlczpwYWdlc1wiLCBcInF1ZXN0aW9uczpxdWVzdGlvbnNcIl0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJWaXNpYmxlKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjb21wbGV0ZXRyaWdnZXJcIixcbiAgW10sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb21wbGV0ZSgpO1xuICB9LFxuICBcInN1cnZleXRyaWdnZXJcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic2V0dmFsdWV0cmlnZ2VyXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNldFZhbHVlOnRyaWdnZXJ2YWx1ZVwiLFxuICAgICAgZGVwZW5kc09uOiBcInNldFRvTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmICEhb2JqW1wic2V0VG9OYW1lXCJdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpc1ZhcmlhYmxlOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclNldFZhbHVlKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjb3B5dmFsdWV0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwiIXNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSwgeyBuYW1lOiBcIiFmcm9tTmFtZTpxdWVzdGlvbnZhbHVlXCIgfV0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJDb3B5VmFsdWUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNraXB0cmlnZ2VyXCIsXG4gIFt7IG5hbWU6IFwiIWdvdG9OYW1lOnF1ZXN0aW9uXCIgfV0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTa2lwKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJydW5leHByZXNzaW9udHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcInNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSwgXCJydW5FeHByZXNzaW9uOmV4cHJlc3Npb25cIl0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyaWdnZXIudHMiLCIvKipcbiAgKiB2dWUtY2xhc3MtY29tcG9uZW50IHY1LjAuMFxuICAqIChjKSAyMDE1LTIwMTcgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0IChleCkgeyByZXR1cm4gKGV4ICYmICh0eXBlb2YgZXggPT09ICdvYmplY3QnKSAmJiAnZGVmYXVsdCcgaW4gZXgpID8gZXhbJ2RlZmF1bHQnXSA6IGV4OyB9XG5cbnZhciBWdWUgPSBfaW50ZXJvcERlZmF1bHQocmVxdWlyZSgndnVlJykpO1xuXG5mdW5jdGlvbiBjcmVhdGVEZWNvcmF0b3IoZmFjdG9yeSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoXywga2V5LCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgJGRlY29yYXRvclF1ZXVlLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuIGZhY3Rvcnkob3B0aW9ucywga2V5LCBpbmRleCk7IH0pO1xuICAgIH07XG59XG5mdW5jdGlvbiB3YXJuKG1lc3NhZ2UpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3Z1ZS1jbGFzcy1jb21wb25lbnRdICcgKyBtZXNzYWdlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUNvbnN0cnVjdG9yKHZtLCBDb21wb25lbnQpIHtcbiAgICBDb21wb25lbnQucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZtKTtcbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZtLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2bVtrZXldOyB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdm1ba2V5XSA9IHZhbHVlOyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGRhdGEgPSBuZXcgQ29tcG9uZW50KCk7XG4gICAgdmFyIHBsYWluRGF0YSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBsYWluRGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCEoQ29tcG9uZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIFZ1ZSkgJiYgT2JqZWN0LmtleXMocGxhaW5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB3YXJuKCdDb21wb25lbnQgY2xhc3MgbXVzdCBpbmhlcml0IFZ1ZSBvciBpdHMgZGVzY2VuZGFudCBjbGFzcyAnICtcbiAgICAgICAgICAgICAgICAnd2hlbiBjbGFzcyBwcm9wZXJ0eSBpcyB1c2VkLicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwbGFpbkRhdGE7XG59XG5cbnZhciAkaW50ZXJuYWxIb29rcyA9IFtcbiAgICAnZGF0YScsXG4gICAgJ2JlZm9yZUNyZWF0ZScsXG4gICAgJ2NyZWF0ZWQnLFxuICAgICdiZWZvcmVNb3VudCcsXG4gICAgJ21vdW50ZWQnLFxuICAgICdiZWZvcmVEZXN0cm95JyxcbiAgICAnZGVzdHJveWVkJyxcbiAgICAnYmVmb3JlVXBkYXRlJyxcbiAgICAndXBkYXRlZCcsXG4gICAgJ2FjdGl2YXRlZCcsXG4gICAgJ2RlYWN0aXZhdGVkJyxcbiAgICAncmVuZGVyJ1xuXTtcbnZhciAkZGVjb3JhdG9yUXVldWUgPSBbXTtcbmZ1bmN0aW9uIGNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgQ29tcG9uZW50Ll9jb21wb25lbnRUYWc7XG4gICAgdmFyIHByb3RvID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGludGVybmFsSG9va3MuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHByb3RvW2tleV07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBrZXkpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIChvcHRpb25zLm1ldGhvZHMgfHwgKG9wdGlvbnMubWV0aG9kcyA9IHt9KSlba2V5XSA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRvci5nZXQgfHwgZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgICAgICAgIChvcHRpb25zLmNvbXB1dGVkIHx8IChvcHRpb25zLmNvbXB1dGVkID0ge30pKVtrZXldID0ge1xuICAgICAgICAgICAgICAgIGdldDogZGVzY3JpcHRvci5nZXQsXG4gICAgICAgICAgICAgICAgc2V0OiBkZXNjcmlwdG9yLnNldFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIChvcHRpb25zLm1peGlucyB8fCAob3B0aW9ucy5taXhpbnMgPSBbXSkpLnB1c2goe1xuICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3IodGhpcywgQ29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICRkZWNvcmF0b3JRdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChmbikgeyByZXR1cm4gZm4ob3B0aW9ucyk7IH0pO1xuICAgICRkZWNvcmF0b3JRdWV1ZSA9IFtdO1xuICAgIHZhciBzdXBlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbXBvbmVudC5wcm90b3R5cGUpO1xuICAgIHZhciBTdXBlciA9IHN1cGVyUHJvdG8gaW5zdGFuY2VvZiBWdWVcbiAgICAgICAgPyBzdXBlclByb3RvLmNvbnN0cnVjdG9yXG4gICAgICAgIDogVnVlO1xuICAgIHJldHVybiBTdXBlci5leHRlbmQob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeShDb21wb25lbnQsIG9wdGlvbnMpO1xuICAgIH07XG59XG4oZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgIGZ1bmN0aW9uIHJlZ2lzdGVySG9va3Moa2V5cykge1xuICAgICAgICAkaW50ZXJuYWxIb29rcy5wdXNoLmFwcGx5KCRpbnRlcm5hbEhvb2tzLCBrZXlzKTtcbiAgICB9XG4gICAgQ29tcG9uZW50LnJlZ2lzdGVySG9va3MgPSByZWdpc3Rlckhvb2tzO1xufSkoQ29tcG9uZW50IHx8IChDb21wb25lbnQgPSB7fSkpO1xudmFyIENvbXBvbmVudCQxID0gQ29tcG9uZW50O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBDb21wb25lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1jbGFzcy1jb21wb25lbnQvZGlzdC92dWUtY2xhc3MtY29tcG9uZW50LmNvbW1vbi5qc1xuLy8gbW9kdWxlIGlkID0gMTk4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX3ZtLl9tKDApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbHMgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b24sXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdGl0bGU6IF92bS5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb24gfVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KFwi4pyWXCIpXVxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCBbX2MoXCJjYW52YXNcIiwgeyBhdHRyczogeyB0YWJpbmRleDogXCIwXCIgfSB9KV0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0wNDYyMzQ5ZFwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMDQ2MjM0OWRcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlXG4vLyBtb2R1bGUgaWQgPSAxOTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMDUwNTJjMGFcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTA1MDUyYzBhXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZW1wdHkudnVlXG4vLyBtb2R1bGUgaWQgPSAyMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZpZWxkc2V0XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gX2MoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgaXRlbTogaXRlbSwgaW5kZXg6IGluZGV4IH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5jb2x1bW5zLCBmdW5jdGlvbihjb2x1bW4sIGNvbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpIH0sXG4gICAgICAgICAgICAgIF92bS5fbChjb2x1bW4sIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgY29sSW5kZXggKyBpbmRleFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvblxuICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b24sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9uIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTA2YzZkNTI2XCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi0wNmM2ZDUyNlwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlXG4vLyBtb2R1bGUgaWQgPSAyMDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsXG4gICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sKSB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0wNzQyZTE2ZFwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMDc0MmUxNmRcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9odG1sLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290XG4gICAgICAgICAgICA6IFwicGFuZWwtY29tbWVudC1yb290XCIsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgbWF4bGVuZ3RoOiBfdm0ucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCksXG4gICAgICAgICAgICBjb2xzOiBfdm0ucXVlc3Rpb24uY29scyxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgcm93czogX3ZtLnF1ZXN0aW9uLnJvd3MsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLnBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgICAgPyBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24udmFsdWUpKV0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMDk5YzJjOGRcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTA5OWMyYzhkXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvY29tbWVudC52dWVcbi8vIG1vZHVsZSBpZCA9IDIwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIiA6IFwiXCIgfSB9LFxuICAgIFtfYyhcInN1cnZleS1tYXRyaXh0YWJsZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KV0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0wYjRkYTZkOFwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMGI0ZGE2ZDhcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWVcbi8vIG1vZHVsZSBpZCA9IDIwNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZTogX3ZtLnJvb3RTdHlsZVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImg0XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldFRpdGxlU3R5bGUoKSxcbiAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jaGFuZ2VFeHBhbmRlZCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ubm9cbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5ubykpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dJY29uLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dJY29uXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uaWNvbkNzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInN1cnZleS1lcnJvcnNcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICBzdHlsZTogeyBwYWRkaW5nTGVmdDogX3ZtLnF1ZXN0aW9uLmlubmVyUGFkZGluZ0xlZnQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdy52aXNpYmxlXG4gICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3Mucm93XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1yb3dcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyByb3c6IHJvdywgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc0VkaXRCdXR0b25cbiAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmZvb3RlciB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25FZGl0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0uc3VydmV5LmVkaXRUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jYW5jZWxQcmV2aWV3IH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0wYzc4ODk5Y1wiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMGM3ODg5OWNcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9wYW5lbC52dWVcbi8vIG1vZHVsZSBpZCA9IDIwNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSldKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMGQyYWJlMjFcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTBkMmFiZTIxXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvdGltZXJwYW5lbC52dWVcbi8vIG1vZHVsZSBpZCA9IDIwNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJsZWdlbmRcIiwge1xuICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sIFtcbiAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxhYmVsIH0sIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLnZhbHVlLCBpdGVtLnZhbHVlKSA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24udmFsdWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLnF1ZXN0aW9uLnZhbHVlID0gJCRhLmNvbmNhdCgkJHYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLnF1ZXN0aW9uLnZhbHVlID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24udmFsdWUgPSAkJGNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5xdWVzdGlvbi52YWx1ZSwgaXRlbS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnZhbHVlID0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3JjOiBpdGVtLmltYWdlTGluayxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgYWx0OiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiXG4gICAgICAgICAgICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5xdWVzdGlvbi5pbWFnZUZpdCB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHNyYzogaXRlbS5pbWFnZUxpbmssXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dMYWJlbFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMTUzZmUwNTJcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTE1M2ZlMDUyXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlXG4vLyBtb2R1bGUgaWQgPSAyMDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInN1cnZleS1wYW5lbFwiLCB7XG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UGFuZWwsIGNzczogX3ZtLmNzcyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0xYTllMjE5NlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMWE5ZTIxOTZcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlXG4vLyBtb2R1bGUgaWQgPSAyMDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy50ZXh0IH0sIFtcbiAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5kaXNwbGF5VmFsdWUpKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMWQyMDg2NWFcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTFkMjA4NjVhXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZXhwcmVzc2lvbi52dWVcbi8vIG1vZHVsZSBpZCA9IDIwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiXG4gICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIlxuICAgICAgPyBfYyhcImVtYmVkXCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2UsXG4gICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgc3JjOiBfdm0ucXVlc3Rpb24uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTFkYzhkNzA5XCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi0xZGM4ZDcwOVwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL2ltYWdlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uaGFzSHRtbFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmN1c3RvbUh0bWwpIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaGFzRGVmYXVsdFJlbmRlclxuICAgICAgICA/IF9jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMWU2MWE3YjdcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTFlNjFhN2I3XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0uaXRlbUNsYXNzIH0sIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uY2hlY2tlZFZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uaXNSZXF1aXJlZCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIiA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBfdm0ucXVlc3Rpb24uaXNJbmRldGVybWluYXRlLFxuICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSlcbiAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsIF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUpID4gLTFcbiAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgaWYgKCQkYykge1xuICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPSAkJGEuY29uY2F0KCQkdikpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlID0gJCRhXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9ICQkY1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKGZhbHNlKSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0ub25MYWJlbENsaWNrKCRldmVudCwgZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jTGFiZWxGYWxzZS5yZW5kZXJlZEh0bWwpKV1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc3dpdGNoLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5vblN3aXRjaENsaWNrKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyIH0pXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3ModHJ1ZSksXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jTGFiZWxUcnVlLnJlbmRlcmVkSHRtbCkpXVxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0xZWRiOWRkNlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMWVkYjlkZDZcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9ib29sZWFuLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIG11bHRpcGxlOiBfdm0ucXVlc3Rpb24uYWxsb3dNdWx0aXBsZSA/IFwibXVsdGlwbGVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRpdGxlOiBfdm0ucXVlc3Rpb24uaW5wdXRUaXRsZSxcbiAgICAgICAgICAgIGFjY2VwdDogX3ZtLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmRvQ2hhbmdlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczogX3ZtLmdldFBsYWNlaG9sZGVyQ2xhc3MoKSxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH0sXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJmaWxlXCIsIGRpc2FibGVkOiBcIlwiLCBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnRpdGxlIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yLFxuICAgICAgICBvbjogeyBkcm9wOiBfdm0ub25Ecm9wLCBkcmFnb3ZlcjogX3ZtLm9uRHJhZ092ZXIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMud3JhcHBlciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGUgK1xuICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBcIiBcIiArIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICA6IFwiXCIpLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgZm9yOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmNob29zZUJ1dHRvbkNhcHRpb25cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9uKSldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRmlsZUNob3NlbiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ubm9GaWxlQ2hvc2VuQ2FwdGlvbikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0pXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seSAmJiAhX3ZtLnF1ZXN0aW9uLmlzRW1wdHkoKVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b24sXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvQ2xlYW4gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSwgZnVuY3Rpb24odmFsLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YWwubmFtZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kb0Rvd25sb2FkRmlsZSgkZXZlbnQsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyh2YWwubmFtZSkpXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY2FuUHJldmlld0ltYWdlKHZhbClcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHZhbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IFwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgdmFsLm5hbWUgJiYgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZG9SZW1vdmVGaWxlKHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb24pKV1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2ZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMTYgMTZcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kb1JlbW92ZUZpbGUodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNOCwyQzQuNywyLDIsNC43LDIsOHMyLjcsNiw2LDZzNi0yLjcsNi02UzExLjMsMiw4LDJ6IE0xMSwxMGwtMSwxTDgsOWwtMiwybC0xLTFsMi0yTDUsNmwxLTFsMiwybDItMmwxLDFMOSw4IEwxMSwxMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgdmFsLm5hbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRvRG93bmxvYWRGaWxlKCRldmVudCwgdmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3ModmFsLm5hbWUpKV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uQm90dG9tLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0NsZWFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5jbGVhbkJ1dHRvbkNhcHRpb24pKV1cbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtMjBmNzAyODRcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTIwZjcwMjg0XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZmlsZS52dWVcbi8vIG1vZHVsZSBpZCA9IDIxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRIZWFkZXJDbGFzcyhfdm0uZWxlbWVudCkgfSwgW1xuICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiaDVcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldFRpdGxlQ2xhc3MoX3ZtLmVsZW1lbnQpLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5lbGVtZW50LmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgaWQ6IF92bS5lbGVtZW50LmFyaWFUaXRsZUlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydFxuICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uZWxlbWVudC5ub1xuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50Lm5vKSldXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5lbGVtZW50LmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZVxuICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LCBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0gfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLmVsZW1lbnQuaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGVcbiAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTI3YWRjNTM3XCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi0yN2FkYzUzN1wiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXG4vLyBtb2R1bGUgaWQgPSAyMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQmFyLFxuICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnByb2dyZXNzIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgICAgICAgIFwiYXJpYS12YWx1ZW1pblwiOiBcIjBcIixcbiAgICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzVGV4dCArIFwiIFwiICsgX3ZtLmNzcy5wcm9ncmVzc1RleHRJbkJhciB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5zdXJ2ZXkucHJvZ3Jlc3NUZXh0KSldXG4gICAgICAgIClcbiAgICAgIF1cbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcInNwYW5cIixcbiAgICAgIHsgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NUZXh0ICsgXCIgXCIgKyBfdm0uY3NzLnByb2dyZXNzVGV4dFVuZGVyQmFyIH0sXG4gICAgICBbX3ZtLl92KF92bS5fcyhfdm0uc3VydmV5LnByb2dyZXNzVGV4dCkpXVxuICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTI3ZTMyNWVmXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi0yN2UzMjVlZlwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJmb3JtLWdyb3VwXCIgfSwgW1xuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5vdGhlciB8fCBfdm0uY29tbWVudENsYXNzLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICByZWFkb25seTogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRPdGhlcnNNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucXVlc3Rpb24ub3RoZXJQbGFjZUhvbGRlcixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNvbW1lbnQgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0yZWQ3NzZmZlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMmVkNzc2ZmZcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWVcbi8vIG1vZHVsZSBpZCA9IDIxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGRcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmdldENlbGxDbGFzcygpLFxuICAgICAgc3R5bGU6IF92bS5nZXRDZWxsU3R5bGUoKSxcbiAgICAgIGF0dHJzOiB7IGhlYWRlcnM6IF92bS5nZXRIZWFkZXJzKCkgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLmNlbGwuaGFzUXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPblRvcFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJ0b3BcIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICFfdm0uY2VsbC5pc0Nob2ljZVxuICAgICAgICAgICAgICAgID8gX2MoX3ZtLmdldFdpZGdldENvbXBvbmVudE5hbWUoX3ZtLmNlbGwucXVlc3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNDaG9pY2UgJiYgIV92bS5jZWxsLmlzQ2hlY2tib3hcbiAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmNlbGwuaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoX3ZtLmNlbGwuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IF92bS5jZWxsLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBfdm0uY2VsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTGFiZWw6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc0Nob2ljZSAmJiBfdm0uY2VsbC5pc0NoZWNrYm94XG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1jaGVja2JveC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhfdm0uY2VsbC5pdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbTogX3ZtLmNlbGwuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIF92bS5jZWxsLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGhpZGVMYWJlbDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5jZWxsLmlzUmVtb3ZlUm93XG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gK1xuICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBfdm0ucmVtb3ZlUm93Q2xpY2soKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVSb3dUZXh0KSldKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmUgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmNlbGwuaGFzVGl0bGVcbiAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5jZWxsLmxvY1RpdGxlIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi0zY2E1NGVlNVwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtM2NhNTRlZTVcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJpbnB1dFwiLCB7XG4gICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QsXG4gICAgYXR0cnM6IHtcbiAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgIHR5cGU6IF92bS5xdWVzdGlvbi5pbnB1dFR5cGUsXG4gICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKSxcbiAgICAgIG1pbjogX3ZtLnF1ZXN0aW9uLm1pbixcbiAgICAgIG1heDogX3ZtLnF1ZXN0aW9uLm1heCxcbiAgICAgIHN0ZXA6IF92bS5xdWVzdGlvbi5zdGVwLFxuICAgICAgc2l6ZTogX3ZtLnF1ZXN0aW9uLnNpemUsXG4gICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICBwbGFjZWhvbGRlcjpcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLmlucHV0VHlwZSA9PT0gXCJyYW5nZVwiIHx8IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgOiBfdm0ucXVlc3Rpb24ucGxhY2VIb2xkZXIsXG4gICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOlxuICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIiA6IG51bGxcbiAgICB9LFxuICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUgfSxcbiAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfVxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtNDBlY2U0MjJcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTQwZWNlNDIyXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvdGV4dC52dWVcbi8vIG1vZHVsZSBpZCA9IDIxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnBhZ2UuY3NzQ2xhc3Nlcy5wYWdlLnJvb3QgfSxcbiAgICBbXG4gICAgICBfdm0uc2hvd0hlYWRlclxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJoNFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnBhZ2UuY3NzQ2xhc3Nlcy5wYWdlLnRpdGxlIH0sXG4gICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucGFnZS5sb2NUaXRsZSB9IH0pXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dEZXNjcmlwdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnBhZ2UubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByb3cudmlzaWJsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsga2V5OiBfdm0ucGFnZS5pZCArIFwiX1wiICsgaW5kZXgsIGNsYXNzOiBfdm0uY3NzLnJvdyB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcm93XCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHJvdzogcm93LCBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTRlOTYyYTUxXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi00ZTk2MmE1MVwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3BhZ2UudnVlXG4vLyBtb2R1bGUgaWQgPSAyMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5pc1Nob3csXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJpc1Nob3dcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5jbGFzc2VzLFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJhbGVydFwiLCBpZDogX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCIgfVxuICAgIH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5lcnJvcnMsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5lcnJvci5pY29uXG4gICAgICAgICAgICA6IFwicGFuZWwtZXJyb3ItaWNvblwiLFxuICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfVxuICAgICAgICB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZXJyb3IuaXRlbVxuICAgICAgICAgICAgICA6IFwicGFuZWwtZXJyb3ItaXRlbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBlcnJvci5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9KVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi01NjgyZTZhZFwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNTY4MmU2YWRcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9lcnJvcnMudnVlXG4vLyBtb2R1bGUgaWQgPSAyMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgIHJvbGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhX3ZtLml0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5pdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5lcnJvcnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICBjaGVja2VkOiBfdm0uX3EoX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsIF92bS5pdGVtLnZhbHVlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBfdm0uaXRlbS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCItMTIgLTEyIDI0IDI0XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfYyhcImNpcmNsZVwiLCB7IGF0dHJzOiB7IHI6IFwiNlwiLCBjeDogXCIwXCIsIGN5OiBcIjBcIiB9IH0pXVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICFfdm0uaGlkZUxhYmVsXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLml0ZW0ubG9jVGV4dC5rb1JlbmRlcmVkSHRtbCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS52YWx1ZSA9PSBfdm0ucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaGFzT3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICBcInF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtNWJiZTk3YjlcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTViYmU5N2I5XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlXG4vLyBtb2R1bGUgaWQgPSAyMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXlXaW5kb3cuaXNTaG93aW5nLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwic3VydmV5V2luZG93LmlzU2hvd2luZ1wiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cucm9vdCxcbiAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgIGJvdHRvbTogXCIzcHhcIixcbiAgICAgICAgcmlnaHQ6IFwiMTBweFwiLFxuICAgICAgICBcIm1heC13aWR0aFwiOiBcIjYwJVwiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLndpbmRvdy5oZWFkZXIucm9vdCB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiBcIjEwMCVcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0V4cGFuZCB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIiB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ud2luZG93U3VydmV5LmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZXhwYW5kZWRDc3MsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5pc0V4cGFuZGVkU3VydmV5XG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb0V4cGFuZCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBcInBhZGRpbmctcmlnaHRcIjogXCIxMHB4XCIgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJYXCIpXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0V4cGFuZGVkU3VydmV5LFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzRXhwYW5kZWRTdXJ2ZXlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5jc3Mud2luZG93LmJvZHlcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwic3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0ud2luZG93U3VydmV5IH0gfSldLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi02MmY1ODhiMlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNjJmNTg4YjJcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS93aW5kb3cudnVlXG4vLyBtb2R1bGUgaWQgPSAyMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnJvb3QgfSwgW1xuICAgIF9jKFwiZm9ybVwiLCB7IGF0dHJzOiB7IG9uc3VibWl0OiBcInJldHVybiBmYWxzZTtcIiB9IH0sIFtcbiAgICAgICFfdm0uc3VydmV5Lmhhc0xvZ29cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2X2N1c3RvbV9oZWFkZXJcIiB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmNvbnRhaW5lciB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktaGVhZGVyXCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcInN0YXJ0aW5nXCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcInRvcFwiIHx8XG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwiYm90aFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LnN0YXJ0U3VydmV5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5zdGFydCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXBhZ2VcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnN1cnZleS5zdGFydGVkUGFnZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF92bS5zdXJ2ZXkuc3RhcnRlZFBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcImJvdHRvbVwiIHx8XG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwiYm90aFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LnN0YXJ0U3VydmV5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5zdGFydCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJydW5uaW5nXCIgfHwgX3ZtLnN1cnZleS5zdGF0ZSA9PT0gXCJwcmV2aWV3XCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXByb2dyZXNzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktdGltZXJwYW5lbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyA9PT0gXCJ0b3BcIiB8fFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcImJvdGhcIlxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktbmF2aWdhdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHN1cnZleTogX3ZtLnN1cnZleSwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0uc3VydmV5LmN1cnJlbnRQYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX3ZtLnN1cnZleS5jdXJyZW50UGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS10aW1lcnBhbmVsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LXByb2dyZXNzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nID09PSBcImJvdHRvbVwiIHx8XG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwiYm90aFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5oYXNDb21wbGV0ZWRQYWdlXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbXBsZXRlZFBhZ2VDbGFzc2VzKCksXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0uZ2V0UHJvY2Vzc2VkQ29tcGxldGVkSHRtbCgpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSAhPSBcIlwiXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Muc2F2ZURhdGEucm9vdCB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZVRleHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnNhdmVEYXRhLnNhdmVBZ2FpbkJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmdldExvY1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhdmVBZ2FpbkJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvVHJ5U2F2ZUFnYWluIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImNvbXBsZXRlZGJlZm9yZVwiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5ib2R5LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwibG9hZGluZ1wiXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5ib2R5LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwpIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImVtcHR5XCJcbiAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5ib2R5RW1wdHkgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5lbXB0eVN1cnZleVRleHQpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTY4NzRlMWM4XCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi02ODc0ZTFjOFwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3N1cnZleS52dWVcbi8vIG1vZHVsZSBpZCA9IDIyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIChfdm0uc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbC5sZW5ndGggPiAwICYmXG4gICAgX3ZtLnN1cnZleS5zaG93VGl0bGUpIHx8XG4gICAgX3ZtLnN1cnZleS5oYXNMb2dvXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXIgfSwgW1xuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0JlZm9yZVxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sLmxlbmd0aCA+IDAgJiYgX3ZtLnN1cnZleS5zaG93VGl0bGVcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmhlYWRlclRleHQgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImgzXCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnN1cnZleS5jc3MudGl0bGUgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5zdXJ2ZXkubG9jVGl0bGUgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJoNVwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uc3VydmV5LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnN1cnZleS5pc0xvZ29BZnRlclxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5zdXJ2ZXkuaXNMb2dvQWZ0ZXJcbiAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtbG9nby0tcmlnaHQtdGFpbFwiIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi02OWNmZjhjZlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNjljZmY4Y2ZcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9oZWFkZXIudnVlXG4vLyBtb2R1bGUgaWQgPSAyMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbCxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24obykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24obykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IFwiX3ZhbHVlXCIgaW4gbyA/IG8uX3ZhbHVlIDogby52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAgICAgICAgICAgICAgIH0pWzBdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvblxuICAgICAgICAgICAgICAgICAgPyBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiB1bmRlZmluZWQgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ub3B0aW9uc0NhcHRpb24pKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiAhaXRlbS5pc0VuYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogaXRlbS52YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udGV4dCkpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2wsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiBcIlwiLCBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgIF92bS5pc090aGVyU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24ub3RoZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLnF1ZXN0aW9uLmRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc090aGVyU2VsZWN0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi02YjMyMTVkM1wiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNmIzMjE1ZDNcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9kcm9wZG93bi52dWVcbi8vIG1vZHVsZSBpZCA9IDIyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgY2xhc3M6IF92bS5nZXRSb290Q2xhc3MoX3ZtLnF1ZXN0aW9uKSB9LFxuICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgIHsga2V5OiBpdGVtLnZhbHVlLCBjbGFzczogX3ZtLmdldENzcyhfdm0ucXVlc3Rpb24sIGl0ZW0pIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5uYW1lICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogaXRlbS5sb2NUZXh0LnRleHQsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjpcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0udmFsdWUgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWluVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY01pblJhdGVEZXNjcmlwdGlvbiB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0IH0sXG4gICAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgaW5kZXggPT09IF92bS5xdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1heFRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NNYXhSYXRlRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5oYXNPdGhlcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uaGFzT3RoZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH1cbiAgICAgIH0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTcwOTJiZmRmXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi03MDkyYmZkZlwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3JhdGluZy52dWVcbi8vIG1vZHVsZSBpZCA9IDIyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IHRoaXMuY3NzQ2xhc3MsIHN0YXRpY1N0eWxlOiB7IGNsZWFyOiBcImJvdGhcIiB9IH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxQcmV2VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvblByZXZDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3MgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ucHJvZ3Jlc3MgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJwcm9ncmVzc2JhclwiIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxOZXh0VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvbk5leHRDc3MoX3ZtLnF1ZXN0aW9uKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwicG9seWdvblwiLCB7IGF0dHJzOiB7IHBvaW50czogXCIyLDIgMCw0IDUsOSAxMCw0IDgsMiA1LDUgXCIgfSB9KV1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jYW5BZGRQYW5lbFxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbiArXG4gICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGQsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFBhbmVsQ2xpY2sgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dCB9LCBbXG4gICAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5wcm9ncmVzc1RleHQpKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi03NDJiZmZhY1wiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtNzQyYmZmYWNcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcbi8vIG1vZHVsZSBpZCA9IDIyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuZm9vdGVyIH0sIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6ICFfdm0uc3VydmV5LmlzRmlyc3RQYWdlICYmIF92bS5zdXJ2ZXkuaXNTaG93UHJldkJ1dHRvbixcbiAgICAgICAgICBleHByZXNzaW9uOiBcIiFzdXJ2ZXkuaXNGaXJzdFBhZ2UgJiYgc3VydmV5LmlzU2hvd1ByZXZCdXR0b25cIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXYsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlUHJldlRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLmJ1dHRvbk1vdXNlRG93biwgY2xpY2s6IF92bS5wcmV2UGFnZSB9XG4gICAgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6ICFfdm0uc3VydmV5LmlzTGFzdFBhZ2UsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCIhc3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvbk5leHQsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlTmV4dFRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLm5leHRCdXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0ubmV4dFBhZ2UgfVxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnN1cnZleS5pc1ByZXZpZXdCdXR0b25WaXNpYmxlXG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LmlzTGFzdFBhZ2UsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic3VydmV5LmlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXZpZXcsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkucHJldmlld1RleHQgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWRvd246IF92bS5idXR0b25Nb3VzZURvd24sIGNsaWNrOiBfdm0uc2hvd1ByZXZpZXcgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zdXJ2ZXkuaXNDb21wbGV0ZUJ1dHRvblZpc2libGVcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXkuaXNMYXN0UGFnZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXkuaXNMYXN0UGFnZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uQ29tcGxldGUsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkuY29tcGxldGVUZXh0IH0sXG4gICAgICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLmNvbXBsZXRlTGFzdFBhZ2UgfVxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtNzVlYWRmZDZcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTc1ZWFkZmQ2XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvbmF2aWdhdGlvbi52dWVcbi8vIG1vZHVsZSBpZCA9IDIyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJzdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCIgfSxcbiAgICBfdm0uX2woX3ZtLnJvdy5lbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQudmlzaWJsZVxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnRcIiwge1xuICAgICAgICAgICAga2V5OiBlbGVtZW50LmlkVmFsdWUsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogZWxlbWVudC5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiBlbGVtZW50LnBhZGRpbmdSaWdodCxcbiAgICAgICAgICAgICAgZmxleEJhc2lzOiBlbGVtZW50LnJlbmRlcldpZHRoLFxuICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IGVsZW1lbnQucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiBlbGVtZW50Lm1pbldpZHRoLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogZWxlbWVudC5tYXhXaWR0aCxcbiAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGlkOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICByb2xlOiBlbGVtZW50LmFyaWFSb2xlLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBlbGVtZW50Lmhhc1RpdGxlID8gZWxlbWVudC5hcmlhVGl0bGVJZCA6IG51bGwsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgfSlcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtN2NjMGJkODhcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTdjYzBiZDg4XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvcm93LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjI5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGFibGVXcmFwcGVyIH0sIFtcbiAgICBfYyhcImZpZWxkc2V0XCIsIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJ0YWJsZVwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dIZWFkZXJcbiAgICAgICAgICA/IF9jKFwidGhlYWRcIiwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJ0ZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucywgZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbCB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogY29sdW1uLmxvY1RleHQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInRib2R5XCIsXG4gICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlUm93cywgZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvdyB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiByb3cubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucywgZnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnJlbmRlcmVkSHRtbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMsIGZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NlbGxUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBoZWFkZXJzOiBjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByb3cuZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmlucHV0SWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy52YWx1ZSA9IGNvbHVtbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIi0xMiAtMTIgMjQgMjRcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcjogXCI2XCIsIGN4OiBcIjBcIiwgY3k6IFwiMFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2lyY2xlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICBdKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi03ZmEyZjQwM1wiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtN2ZhMmY0MDNcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9tYXRyaXgudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRhYmxlXCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIF92bS5fbChfdm0ucXVlc3Rpb24uZ2V0Um93cygpLCBmdW5jdGlvbihyb3csIHJvd2luZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwidHJcIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcInJvd2tleVwiICsgcm93aW5kZXgsXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvd1xuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl9sKHJvdywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJsYWJlbFwiICsgaXRlbS5lZGl0b3IuaWQsXG4gICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBpdGVtLmVkaXRvci5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRPblN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS5lZGl0b3IucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUaXRsZSB9IH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS5lZGl0b3IucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0uZWRpdG9yLmlkLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY3NzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPblRvcFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogaXRlbS5lZGl0b3IsIGxvY2F0aW9uOiBcInRvcFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKF92bS5nZXRXaWRnZXRDb21wb25lbnROYW1lKGl0ZW0uZWRpdG9yKSwge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBpdGVtLmVkaXRvciB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IGl0ZW0uZWRpdG9yLCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIH0pXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTkzZmU0YzAyXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi05M2ZlNGMwMlwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWVcbi8vIG1vZHVsZSBpZCA9IDIzMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZTogX3ZtLnJvb3RTdHlsZVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImg0XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYXNUaXRsZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldFRpdGxlU3R5bGUoKSxcbiAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jaGFuZ2VFeHBhbmRlZCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93SWNvbixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93SWNvblwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmljb25Dc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jRGVzY3JpcHRpb24gfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHsgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImYtcGFuZWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmlzQ29sbGFwc2VkLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhaXNDb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5vZGU6IF92bS5yb290Tm9kZSwgcGFuZWw6IF92bS5xdWVzdGlvbiwgY3NzOiBcImNzc1wiIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtOTZhZTFhNzhcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTk2YWUxYTc4XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjMyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0uZ2V0Um9vdENsYXNzKF92bS5lbGVtZW50KSB9LFxuICAgIFtcbiAgICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlT25MZWZ0VG9wXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC1oZWFkZXJcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCB9IH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgY2xhc3M6IF92bS5nZXRDb250ZW50Q2xhc3MoX3ZtLmVsZW1lbnQpIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Ub3BcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsIGxvY2F0aW9uOiBcInRvcFwiIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhfdm0uZ2V0V2lkZ2V0Q29tcG9uZW50TmFtZShfdm0uZWxlbWVudCksIHtcbiAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5lbGVtZW50Lmhhc0NvbW1lbnRcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLmZvcm1Hcm91cCB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LmNvbW1lbnRUZXh0KSldKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRDbGFzczogX3ZtLmNzcy5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmhhc0Vycm9yc09uQm90dG9tXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVycm9yc1wiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJib3R0b21cIiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmVsZW1lbnQuaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5kZXNjcmlwdGlvblVuZGVySW5wdXQgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY0Rlc2NyaXB0aW9uIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uZWxlbWVudC5oYXNUaXRsZU9uQm90dG9tXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktZWxlbWVudC1oZWFkZXJcIiwgeyBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCB9IH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtOTczNDcyYWNcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTk3MzQ3MmFjXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvZWxlbWVudC52dWVcbi8vIG1vZHVsZSBpZCA9IDIzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIiA6IFwiXCIgfSB9LFxuICAgIFtcbiAgICAgIF92bS5xdWVzdGlvbi5pc0FkZFJvd09uVG9wXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b24gK1xuICAgICAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uYWRkUm93VGV4dCkpXSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkFkZCB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN1cnZleS1tYXRyaXh0YWJsZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNBZGRSb3dPbkJvdHRvbVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uICtcbiAgICAgICAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmFkZFJvd1RleHQpKV0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtOWEwYjg4ZThcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LTlhMGI4OGU4XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWVcbi8vIG1vZHVsZSBpZCA9IDIzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIHsgc3R5bGU6IF92bS5zdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIF92bS50YWdOYW1lLFxuICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5ub2RlcywgZnVuY3Rpb24oZWxOb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBlbE5vZGUuZWxlbWVudElkLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbm9kZTogZWxOb2RlLCBwYW5lbDogX3ZtLnBhbmVsLCBjc3M6IFwiY3NzXCIgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnRleHQpICsgXCJcXG4gIFwiKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pZFZhbHVlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IF92bS5xdWVzdGlvbi5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogX3ZtLnF1ZXN0aW9uLm1pbldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5xdWVzdGlvbi5tYXhXaWR0aFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICBzdXJ2ZXk6IF92bS5zdXJ2ZXksXG4gICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi05ZDk5MmMzMFwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtOWQ5OTJjMzBcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjM1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJlbmRlcmVkUGFuZWxzLCBmdW5jdGlvbihwYW5lbCkge1xuICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IGtleTogcGFuZWwuaWQgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInN1cnZleS1wYW5lbFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBwYW5lbCwgY3NzOiBfdm0uY3NzIH0gfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcmVtb3ZlXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwiaHJcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yIH0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5pc1Byb2dyZXNzQm90dG9tU2hvd2luZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgX3ZtLnF1ZXN0aW9uLmNhbkFkZFBhbmVsXG4gICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLmdldEJ1dHRvbkFkZENzcyhfdm0ucXVlc3Rpb24pLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uYWRkUGFuZWxDbGljayB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi05ZGRhNWQwNlwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtOWRkYTVkMDZcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLmdldExhYmVsQ2xhc3MoX3ZtLml0ZW0pIH0sIFtcbiAgICAgICAgX3ZtLml0ZW0gPT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzQWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1Db250cm9sLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0uaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0uaXNBbGxTZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5pc0FsbFNlbGVjdGVkLCBfdm0uaXNBbGxTZWxlY3RlZCkgPiAtMVxuICAgICAgICAgICAgICAgICAgOiBfdm0uaXNBbGxTZWxlY3RlZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICBpZiAoJCRjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLmlzQWxsU2VsZWN0ZWQgPSAkJGEuY29uY2F0KCQkdikpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChfdm0uaXNBbGxTZWxlY3RlZCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5pc0FsbFNlbGVjdGVkID0gJCRjXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF92bS5pdGVtICE9IF92bS5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBfdm0uaW5kZXgsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICFfdm0uaXRlbS5pc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0uaXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaWQgKyBcIl9lcnJvcnNcIlxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0uaXRlbS52YWx1ZSkgPiAtMVxuICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLml0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICBpZiAoJCRjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSAkJGEuY29uY2F0KCQkdikpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gJCRjXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgMjQgMjRcIiB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW19jKFwicGF0aFwiLCB7IGF0dHJzOiB7IGQ6IFwiTTUsMTNsMi0ybDMsM2w3LTdsMiwybC05LDlMNSwxM3pcIiB9IH0pXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJjaGVja1wiIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAhX3ZtLmhpZGVMYWJlbFxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbCxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0aXRsZTogX3ZtLml0ZW0ubG9jVGV4dC5rb1JlbmRlcmVkSHRtbCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5pdGVtLmxvY1RleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXRlbS52YWx1ZSA9PSBfdm0ucXVlc3Rpb24ub3RoZXJJdGVtLnZhbHVlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaGFzT3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246XG4gICAgICAgICAgICAgICAgICBcInF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgJiYgcXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtYzU4YzgwZDBcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWM1OGM4MGQwXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjM3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJmaWVsZHNldFwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICBfYyhcImxlZ2VuZFwiLCB7XG4gICAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sIH1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmNvbHVtbnMsIGZ1bmN0aW9uKGNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCkgfSxcbiAgICAgICAgICAgICAgX3ZtLl9sKGNvbHVtbiwgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgY29sSW5kZXggKyBpbmRleFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtY2FkMjc2ZjZcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWNhZDI3NmY2XCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvY2hlY2tib3gudnVlXG4vLyBtb2R1bGUgaWQgPSAyMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9IH0sIFtcbiAgICBfdm0ubG9jU3RyaW5nLmhhc0h0bWxcbiAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSB9XG4gICAgICAgIH0pXG4gICAgICA6IF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpKVxuICAgICAgICBdKVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH1cbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgaWYgKG1vZHVsZS5ob3QuZGF0YSkge1xuICAgIHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIikgICAgICAucmVyZW5kZXIoXCJkYXRhLXYtZDNhM2Q3NWFcIiwgeyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfSlcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi92dWUtbG9hZGVyL2xpYi90ZW1wbGF0ZS1jb21waWxlcj97XCJpZFwiOlwiZGF0YS12LWQzYTNkNzVhXCIsXCJoYXNTY29wZWRcIjpmYWxzZSxcImJ1YmxlXCI6e1widHJhbnNmb3Jtc1wiOnt9fX0hLi9+L3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9dGVtcGxhdGUmaW5kZXg9MCEuL3NyYy92dWUvc3RyaW5nLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjM5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoX3ZtLmdldFdpZGdldENvbXBvbmVudE5hbWUoX3ZtLmNvbnRlbnRRdWVzdGlvbiksIHtcbiAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jb250ZW50UXVlc3Rpb24sIGNzczogX3ZtLmNzcyB9XG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfVxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICBpZiAobW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgcmVxdWlyZShcInZ1ZS1ob3QtcmVsb2FkLWFwaVwiKSAgICAgIC5yZXJlbmRlcihcImRhdGEtdi1kNGFhZTA5YVwiLCB7IHJlbmRlcjogcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZucyB9KVxuICB9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtZDRhYWUwOWFcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL34vdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT10ZW1wbGF0ZSZpbmRleD0wIS4vc3JjL3Z1ZS9jdXN0b20udnVlXG4vLyBtb2R1bGUgaWQgPSAyNDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6ICFfdm0uaXNDb2xsYXBzZWQsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCIhaXNDb2xsYXBzZWRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0ucXVlc3Rpb24uY2FuUmVtb3ZlUGFuZWwgJiYgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uICtcbiAgICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmUsXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlVGV4dCB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5yZW1vdmVQYW5lbENsaWNrKF92bS5wYW5lbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LWRiNmIyZjdlXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi1kYjZiMmY3ZVwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWVcbi8vIG1vZHVsZSBpZCA9IDI0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLnRhYmxlLnNob3dIZWFkZXJcbiAgICAgICAgPyBfYyhcInRoZWFkXCIsIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGUuaGVhZGVyUm93LmNlbGxzLCBmdW5jdGlvbihjZWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaGVhZGVyX1wiICsgY2VsbC5pZCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGwsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1pbldpZHRoOiBjZWxsLm1pbldpZHRoLCB3aWR0aDogY2VsbC53aWR0aCB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IGNlbGwubG9jVGl0bGUgfSB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICBfdm0uX2woX3ZtLnRhYmxlLnJvd3MsIGZ1bmN0aW9uKHJvdykge1xuICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgIHsga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93LmlkIH0sXG4gICAgICAgICAgICBfdm0uX2wocm93LmNlbGxzLCBmdW5jdGlvbihjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFwic3VydmV5LW1hdHJpeGNlbGxcIiwge1xuICAgICAgICAgICAgICAgIGtleTogcm93LmlkICsgXCJfXCIgKyBjZWxsSW5kZXgsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnRhYmxlLnNob3dGb290ZXJcbiAgICAgICAgPyBfYyhcInRmb290XCIsIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICAgIF92bS5fbChfdm0udGFibGUuZm9vdGVyUm93LmNlbGxzLCBmdW5jdGlvbihjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiZm9vdGVyX1wiICsgY2VsbEluZGV4LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9XG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LWZhMTk3ZTRhXCIsIHsgcmVuZGVyOiByZW5kZXIsIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zIH0pXG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdnVlLWxvYWRlci9saWIvdGVtcGxhdGUtY29tcGlsZXI/e1wiaWRcIjpcImRhdGEtdi1mYTE5N2U0YVwiLFwiaGFzU2NvcGVkXCI6ZmFsc2UsXCJidWJsZVwiOntcInRyYW5zZm9ybXNcIjp7fX19IS4vfi92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAhLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZVxuLy8gbW9kdWxlIGlkID0gMjQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMjQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG1vZGVsXG5leHBvcnQgKiBmcm9tIFwiLi9jaHVua3MvbW9kZWxcIjtcblxuLy8gbG9jYWxpemF0aW9uXG5pbXBvcnQgXCIuL2NodW5rcy9sb2NhbGl6YXRpb25cIjtcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtzL2hlbHBlcnNcIjtcblxuZXhwb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcbi8vIGNzcyBzdGFuZGFyZFxuZXhwb3J0IHsgZGVmYXVsdFN0YW5kYXJkQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3Nzc3RhbmRhcmRcIjtcbi8vIGNzcyBib290c3RyYXBcbmV4cG9ydCB7IGRlZmF1bHRCb290c3RyYXBDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3Nib290c3RyYXBcIjtcbi8vIGNzcyBib290c3RyYXAgKyBtYXRlcmlhbFxuZXhwb3J0IHsgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWxcIjtcbmV4cG9ydCB7IG1vZGVybkNzcyB9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc21vZGVyblwiO1xuXG5pbXBvcnQgeyBWdWVTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi92dWUvc3VydmV5TW9kZWxcIjtcbmV4cG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIE1vZGVsIH07XG5pbXBvcnQgeyBWdWVTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCIuLi92dWUvc3VydmV5TW9kZWxcIjtcbmV4cG9ydCB7IFZ1ZVN1cnZleVdpbmRvd01vZGVsIGFzIFdpbmRvd01vZGVsIH07XG5leHBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi4vdnVlL3N1cnZleS52dWVcIjtcbmV4cG9ydCB7IEN1c3RvbVdpZGdldCB9IGZyb20gXCIuLi92dWUvY3VzdG9td2lkZ2V0LnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5U3RyaW5nIH0gZnJvbSBcIi4uL3Z1ZS9zdHJpbmcudnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlFbGVtZW50VnVlIH0gZnJvbSBcIi4uL3Z1ZS9lbGVtZW50LnZ1ZVwiO1xuZXhwb3J0IHsgV2luZG93IH0gZnJvbSBcIi4uL3Z1ZS93aW5kb3cudnVlXCI7XG5leHBvcnQgeyBQYWdlIH0gZnJvbSBcIi4uL3Z1ZS9wYWdlLnZ1ZVwiO1xuZXhwb3J0IHsgUmFkaW9ncm91cCB9IGZyb20gXCIuLi92dWUvcmFkaW9ncm91cC52dWVcIjtcbmV4cG9ydCB7IFJhZGlvZ3JvdXBJdGVtIH0gZnJvbSBcIi4uL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWVcIjtcbmV4cG9ydCB7IE90aGVyQ2hvaWNlIH0gZnJvbSBcIi4uL3Z1ZS9vdGhlckNob2ljZS52dWVcIjtcbmV4cG9ydCB7IFJhdGluZyB9IGZyb20gXCIuLi92dWUvcmF0aW5nLnZ1ZVwiO1xuZXhwb3J0IHsgQ29tbWVudCB9IGZyb20gXCIuLi92dWUvY29tbWVudC52dWVcIjtcbmV4cG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uL3Z1ZS9jaGVja2JveC52dWVcIjtcbmV4cG9ydCB7IENoZWNrYm94SXRlbSB9IGZyb20gXCIuLi92dWUvY2hlY2tib3hpdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgVGV4dCB9IGZyb20gXCIuLi92dWUvdGV4dC52dWVcIjtcbmV4cG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW4udnVlXCI7XG5leHBvcnQgeyBFbXB0eSB9IGZyb20gXCIuLi92dWUvZW1wdHkudnVlXCI7XG5leHBvcnQgeyBNdWx0aXBsZVRleHQgfSBmcm9tIFwiLi4vdnVlL211bHRpcGxldGV4dC52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeCB9IGZyb20gXCIuLi92dWUvbWF0cml4LnZ1ZVwiO1xuZXhwb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi4vdnVlL2Ryb3Bkb3duLnZ1ZVwiO1xuZXhwb3J0IHsgRmlsZSB9IGZyb20gXCIuLi92dWUvZmlsZS52dWVcIjtcbmV4cG9ydCB7IE1hdHJpeENlbGwgfSBmcm9tIFwiLi4vdnVlL21hdHJpeGNlbGwudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhUYWJsZSB9IGZyb20gXCIuLi92dWUvbWF0cml4dGFibGUudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi92dWUvbWF0cml4ZHJvcGRvd24udnVlXCI7XG5leHBvcnQgeyBNYXRyaXhEeW5hbWljIH0gZnJvbSBcIi4uL3Z1ZS9tYXRyaXhkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgRXJyb3JzIH0gZnJvbSBcIi4uL3Z1ZS9lcnJvcnMudnVlXCI7XG5leHBvcnQgeyBIdG1sIH0gZnJvbSBcIi4uL3Z1ZS9odG1sLnZ1ZVwiO1xuZXhwb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gXCIuLi92dWUvZXhwcmVzc2lvbi52dWVcIjtcbmV4cG9ydCB7IEltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3Z1ZS9pbWFnZXBpY2tlci52dWVcIjtcbmV4cG9ydCB7IFBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUmVtb3ZlIH0gZnJvbSBcIi4uL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlXCI7XG5leHBvcnQgeyBQYW5lbER5bmFtaWNQcm9ncmVzcyB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlXCI7XG5leHBvcnQgeyBOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL3Z1ZS9uYXZpZ2F0aW9uLnZ1ZVwiO1xuZXhwb3J0IHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vdnVlL3Byb2dyZXNzLnZ1ZVwiO1xuZXhwb3J0IHsgVGltZXJQYW5lbCB9IGZyb20gXCIuLi92dWUvdGltZXJwYW5lbC52dWVcIjtcbmV4cG9ydCB7IFBhbmVsIH0gZnJvbSBcIi4uL3Z1ZS9wYW5lbC52dWVcIjtcbmV4cG9ydCB7IEZsb3dQYW5lbCB9IGZyb20gXCIuLi92dWUvZmxvd3BhbmVsLnZ1ZVwiO1xuZXhwb3J0IHsgRmxvd1BhbmVsRWxlbWVudCB9IGZyb20gXCIuLi92dWUvZmxvd3BhbmVsZWxlbWVudC52dWVcIjtcbmV4cG9ydCB7IFJvdyB9IGZyb20gXCIuLi92dWUvcm93LnZ1ZVwiO1xuZXhwb3J0IHsgRWxlbWVudEhlYWRlciB9IGZyb20gXCIuLi92dWUvZWxlbWVudGhlYWRlci52dWVcIjtcbmV4cG9ydCB7IEltYWdlIH0gZnJvbSBcIi4uL3Z1ZS9pbWFnZS52dWVcIjtcbmV4cG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi92dWUvc2lnbmF0dXJlcGFkLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4uL3Z1ZS9oZWFkZXIudnVlXCI7XG5leHBvcnQgeyBDdXN0b20gfSBmcm9tIFwiLi4vdnVlL2N1c3RvbS52dWVcIjtcbmV4cG9ydCB7IENvbXBvc2l0ZSB9IGZyb20gXCIuLi92dWUvY29tcG9zaXRlLnZ1ZVwiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvdnVlLnRzIl0sInNvdXJjZVJvb3QiOiIifQ==","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"animated fadeIn\"},[(_vm.showSurvey)?_c('survey',{attrs:{\"survey\":_vm.survey}}):_vm._e(),(!_vm.showSurvey)?_c('div',[_c('p',[_vm._v(\"Loading Survey\")])]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Surveys.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Surveys.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Surveys.vue?vue&type=template&id=938c3f30&\"\nimport script from \"./Surveys.vue?vue&type=script&lang=js&\"\nexport * from \"./Surveys.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export const tokenMixin = {\r\n methods: {\r\n checkForToken () {\r\n console.log('checkForToken');\r\n if (this.$localStorage.get('token') == null)\r\n {\r\n this.$router.replace('/login');\r\n return false;\r\n }\r\n var expirationDate = this.$localStorage.get('tokenExpiration');\r\n if (expirationDate === null)\r\n {\r\n this.$router.replace('/login');\r\n return false;\r\n }\r\n else {\r\n var expirationDateToDate = new Date(expirationDate);\r\n var currentDate = new Date();\r\n if (expirationDateToDate < currentDate)\r\n {\r\n this.$router.replace('/login');\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n checkForNav () {\r\n if (this.$localStorage.get('navleft') == null) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n },\r\n buildTokenHeader () {\r\n return {\r\n headers: {'Authorization': 'bearer ' + this.$localStorage.get('token')}\r\n };\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""}